亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? protocol.c

?? Open DMT Client C Source code
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
// ----------------------------------------------------------------------------// Copyright 2006-2007, Martin D. Flynn// All rights reserved// ----------------------------------------------------------------------------//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at// // http://www.apache.org/licenses/LICENSE-2.0// // Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.//// ----------------------------------------------------------------------------// Description://  Server DMTP communication protocol handler// ---// Change History://  2006/01/04  Martin D. Flynn//     -Initial release//  2006/01/29  Martin D. Flynn//     -Added header file "io.h"//  2006/02/12  Martin D. Flynn//     -Added header "cerrors.h"//     -Request GPS diagnostic info whem GPS error/failure received.//  2007/01/28  Martin D. Flynn//     -Reset 'revoke speak-freely' timer each time we hear from the client.//     -Maintain 'lastEventTimer' to acknowledge events in speak-freely mode//      if we don't get an EOB from the client.//     -Added support for a single queued 'pending' packet for transmission to//      the client.//     -Moved the handling of events, diagnostic packets, etc, to external//      callback functions (thus making this module much more customizable for //      specific applications).// ----------------------------------------------------------------------------#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <time.h>#include <sys/time.h>#include "tools/stdtypes.h"#include "tools/strtools.h"#include "tools/utctools.h"#include "tools/gpstools.h"#include "tools/io.h"#include "tools/threads.h"#include "base/props.h"#include "base/statcode.h"#include "server/server.h"#include "server/serrors.h"#include "server/cerrors.h"#include "server/packet.h"#include "server/events.h"#include "server/log.h"#include "server/protocol.h"#include "server/upload.h"// ----------------------------------------------------------------------------#define REVOKE_SPEAK_FREELY_INTERVAL   HOUR_SECONDS(24) // 60L// ----------------------------------------------------------------------------static UInt32 lastEventSequence     = 0L;static int lastEventSeqLen          = 0;static TimerSec_t lastEventTimer    = 0L;static utBool clientKeepAlive       = utTrue;   // utFalsestatic utBool clientSpeaksFirst     = utFalse;  // utTrue// ----------------------------------------------------------------------------static utBool serverNeedsMoreInfo   = utFalse;/* indicate to server that we are expecting more information from the client */// When called, an end-of-block will be sent, rather than an end-of-transmissionvoid protSetNeedsMoreInfo(){    serverNeedsMoreInfo = utTrue;}// ----------------------------------------------------------------------------static utBool stopSpeakFreely       = utFalse;static utBool startSpeakFreely      = utFalse;static utBool isSpeakFreelyMode     = utFalse;static int    speakFreelyMaxEvents  = -1;/* set client speakFreely mode */void protSetSpeakFreelyMode(utBool mode, int maxEvents){    if (mode) {        // start speakFreely        if (!isSpeakFreelyMode) {            startSpeakFreely = utTrue;        }        speakFreelyMaxEvents = maxEvents;    } else {        // stop speakFreely        if (isSpeakFreelyMode) {            stopSpeakFreely = utTrue;        }    }}// ----------------------------------------------------------------------------#define PENDING_QUE_SIZE    30 // <-- will hold a maximum of (SIZE - 1) packetsstatic int                  pendingQueFirst = 0L;static int                  pendingQueLast  = 0L;static Packet_t             pendingQue[PENDING_QUE_SIZE];static threadMutex_t        pendingMutex;#define PENDING_LOCK        MUTEX_LOCK(&pendingMutex);#define PENDING_UNLOCK      MUTEX_UNLOCK(&pendingMutex);utBool protAddPendingPacket(Packet_t *pkt){    if (pkt) {        utBool rtn = utFalse;        PENDING_LOCK {            int newLast = ((pendingQueLast + 1L) < PENDING_QUE_SIZE)? (pendingQueLast + 1L) : 0L;            if (newLast != pendingQueFirst) {                memcpy(&pendingQue[pendingQueLast], pkt, sizeof(Packet_t));                pendingQueLast = newLast;                logINFO(LOGSRC,"Pending packet set ...");                rtn = utTrue;            } else {                logWARNING(LOGSRC,"Pending packet queue is full ...");                rtn = utFalse;            }        } PENDING_UNLOCK        return rtn;    } else {        logWARNING(LOGSRC,"Null packet specified ...");        return utFalse;    }}static Packet_t *protGetPendingPacket(Packet_t *pkt){    if (pkt) {        Packet_t *rtn = (Packet_t*)0;        PENDING_LOCK {            if (pendingQueFirst != pendingQueLast) {                int newFirst = ((pendingQueFirst + 1L) < PENDING_QUE_SIZE)? (pendingQueFirst + 1L) : 0L;                memcpy(pkt, &pendingQue[pendingQueFirst], sizeof(Packet_t));                pendingQueFirst = newFirst;                rtn = pkt;            } else {                rtn = (Packet_t*)0;            }        } PENDING_UNLOCK        return rtn;    } else {        return (Packet_t*)0;    }}static utBool protHasPendingPackets(){    utBool rtn = utFalse;    PENDING_LOCK {        rtn = (pendingQueFirst != pendingQueLast)? utTrue : utFalse;    } PENDING_UNLOCK    return rtn;}// ----------------------------------------------------------------------------#if defined(INCLUDE_UPLOAD)static const char *pendingFileUpload = (char*)0;static const char *pendingFileClient = (char*)0;utBool protSetPendingFileUpload(const char *file, const char *cliFile){    logINFO(LOGSRC,"Pending 'File' Upload set ...");    pendingFileUpload = file;    pendingFileClient = cliFile;    return utTrue;}#endif// ----------------------------------------------------------------------------static char clientAccountID[MAX_ID_SIZE + 1];static char clientDeviceID[MAX_ID_SIZE + 1];const char *protGetAccountID(){    return clientAccountID;}const char *protGetDeviceID(){    return clientDeviceID;}// ----------------------------------------------------------------------------utBool protUploadPacket(const UInt8 *val, UInt8 valLen){    if (serverIsOpen()) {        return serverWritePacketFmt(PKT_SERVER_FILE_UPLOAD, "%*b", (int)valLen, val);    } else {        return utFalse;    }}// ----------------------------------------------------------------------------utBool protGetPropValue(UInt16 propKey){    if (serverIsOpen()) {        return serverWritePacketFmt(PKT_SERVER_GET_PROPERTY, "%2x", (UInt32)propKey);    } else {        return utFalse;    }}// ----------------------------------------------------------------------------utBool protSetPropBinary(UInt16 propKey, const UInt8 *val, UInt8 valLen){    if (serverIsOpen()) {        //logINFO(LOGSRC,"Setting binary property value: [%d]", valLen);        return serverWritePacketFmt(PKT_SERVER_SET_PROPERTY, "%2x%*b", (UInt32)propKey, (int)valLen, val);    } else {        return utFalse;    }}utBool protSetPropString(UInt16 propKey, const UInt8 *val){    int valLen = strlen(val);    return protSetPropBinary(propKey, val, valLen);}// ----------------------------------------------------------------------------static utBool _protSetPropUInt32(UInt16 propKey, UInt32 *val, int count, int blen){    if (serverIsOpen() && (count > 0) && (blen >= 1) && (blen <= 4)) {        UInt32 pk = (UInt32)propKey;        if (count == 1) {            return serverWritePacketFmt(PKT_SERVER_SET_PROPERTY, "%2x%*x", pk, blen, (UInt32)val[0]);        } else {            UInt8 buf[PACKET_MAX_PAYLOAD_LENGTH];            Buffer_t bb, *dst = binBuffer(&bb, buf, sizeof(buf), BUFFER_DESTINATION);            int i;            for (i = 0; i < count; i++) {                binBufPrintf(dst, "%*x", blen, (UInt32)val[i]);            }            int valLen = BUFFER_DATA_LENGTH(dst);            return serverWritePacketFmt(PKT_SERVER_SET_PROPERTY, "%2x%*b", pk, valLen, buf);        }    } else {        return utFalse;    }}utBool protSetPropUInt32Arr(UInt16 propKey, UInt32 *val32, int count){    return _protSetPropUInt32(propKey, val32, count, 4);}utBool protSetPropUInt32(UInt16 propKey, UInt32 val32){    return _protSetPropUInt32(propKey, &val32, 1, 4);}utBool protSetPropUInt16Arr(UInt16 propKey, UInt16 *val, int count){    int i, m = 8;    UInt32 val32[8];    for (i = 0; (i < count) && (i < m); i++) { val32[i] = (UInt32)val[i]; }    return _protSetPropUInt32(propKey, val32, ((count <= m)? count : m), 2);}utBool protSetPropUInt16(UInt16 propKey, UInt16 val){    UInt32 val32 = (UInt32)val;    return _protSetPropUInt32(propKey, &val32, 1, 2);}utBool protSetPropUInt8Arr(UInt16 propKey, UInt8 *val, int count){    int i, m = 8;    UInt32 val32[8];    for (i = 0; (i < count) && (i < m); i++) { val32[i] = (UInt32)val[i]; }    return _protSetPropUInt32(propKey, val32, ((count <= m)? count : m), 1);}utBool protSetPropUInt8(UInt16 propKey, UInt8 val){    UInt32 val32 = (UInt32)val;    return _protSetPropUInt32(propKey, &val32, 1, 1);}// ----------------------------------------------------------------------------static protEventCallbackFtn_t  ftnEventHandler = 0;void protocolSetEventHandler(protEventCallbackFtn_t ftn){    ftnEventHandler = ftn;}static void protocolHandleEvent(Packet_t *pkt, Event_t *ev){    if (ftnEventHandler) {        (*ftnEventHandler)(pkt, ev);    }}// ----------------------------------------------------------------------------static protDataCallbackFtn_t  ftnPropertyHandler = 0;void protocolSetPropertyHandler(protDataCallbackFtn_t ftn){    ftnPropertyHandler = ftn;}static void protocolHandleProperty(UInt16 propKey, const UInt8 *propData, UInt16 propDataLen){    if (ftnPropertyHandler) {        (*ftnPropertyHandler)(propKey, propData, propDataLen);    }}// ----------------------------------------------------------------------------static protDataCallbackFtn_t  ftnDiagHandler = 0;void protocolSetDiagHandler(protDataCallbackFtn_t ftn){    ftnDiagHandler = ftn;}static void protocolHandleDiag(UInt16 diagKey, const UInt8 *diagData, UInt16 diagDataLen){    if (ftnDiagHandler) {        (*ftnDiagHandler)(diagKey, diagData, diagDataLen);    }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人夜色高潮福利影视| 一级女性全黄久久生活片免费| 久久成人综合网| 欧美一区二区日韩| 看电视剧不卡顿的网站| 精品美女一区二区三区| 国产一区二三区| 国产欧美日本一区二区三区| 94-欧美-setu| 亚洲在线观看免费视频| 555夜色666亚洲国产免| 久久99精品久久久久久动态图| 久久综合给合久久狠狠狠97色69| 国产a久久麻豆| 亚洲猫色日本管| 88在线观看91蜜桃国自产| 国产麻豆精品一区二区| 亚洲男同性恋视频| 欧美一区二区三区在线看| 国产成人自拍网| 亚洲综合一二区| 日韩欧美第一区| 成人福利电影精品一区二区在线观看| 一区二区三区色| 欧美va亚洲va在线观看蝴蝶网| 成人动漫视频在线| 日韩综合小视频| 久久精品无码一区二区三区| 91色婷婷久久久久合中文| 青青草国产精品97视觉盛宴| 国产欧美日本一区视频| 欧美性xxxxx极品少妇| 精品一区二区三区欧美| 亚洲欧美日韩人成在线播放| 在线成人小视频| 波多野结衣的一区二区三区| 日韩专区一卡二卡| 亚洲日本在线a| 日韩欧美高清一区| 99久久免费国产| 久久精品久久精品| 一区二区三区蜜桃网| 久久久久亚洲综合| 欧美日韩国产123区| va亚洲va日韩不卡在线观看| 秋霞成人午夜伦在线观看| 日韩毛片高清在线播放| 精品欧美一区二区久久| 欧洲一区二区三区免费视频| 粉嫩在线一区二区三区视频| 日韩精品一区第一页| 一区二区在线观看免费视频播放| 久久久99精品免费观看| 777色狠狠一区二区三区| 94色蜜桃网一区二区三区| 国产精品自拍网站| 麻豆成人综合网| 一区二区三区自拍| 国产精品毛片高清在线完整版| 精品理论电影在线| 欧美精品一卡二卡| 在线视频你懂得一区二区三区| 成人av在线电影| 国产福利电影一区二区三区| 免费欧美在线视频| 日韩av不卡在线观看| 亚洲综合av网| 亚洲欧美激情视频在线观看一区二区三区| 久久久夜色精品亚洲| 精品国精品国产| 日韩一区二区三区四区| 在线不卡一区二区| 777a∨成人精品桃花网| 欧美日韩国产小视频在线观看| 欧洲精品在线观看| 在线观看欧美黄色| 欧美亚洲自拍偷拍| 欧美最新大片在线看| 色婷婷亚洲精品| 欧美在线免费观看亚洲| 欧美在线观看视频在线| 欧美日韩中字一区| 欧美日韩视频不卡| 91精品在线一区二区| 欧美一级高清大全免费观看| 91麻豆精品91久久久久久清纯| 日韩一二三区不卡| 精品成人一区二区三区| 欧美精品一区二区三区很污很色的 | 亚洲国产日日夜夜| 亚洲国产一区二区三区| 午夜视频在线观看一区二区三区| 亚洲国产精品一区二区www在线| 亚洲国产中文字幕在线视频综合 | 亚洲18女电影在线观看| 亚洲成人av资源| 蜜臀av在线播放一区二区三区| 老司机一区二区| 国产一区二区三区精品视频| 成人夜色视频网站在线观看| 91免费观看视频在线| 欧美色综合影院| 日韩欧美国产一二三区| 欧美极品美女视频| 亚洲在线中文字幕| 国内久久精品视频| 成人sese在线| 欧美日韩国产a| 国产夜色精品一区二区av| 亚洲欧洲在线观看av| 亚洲国产cao| 国产精品18久久久久| 色域天天综合网| 日韩一区二区三区在线观看| 欧美国产成人在线| 三级一区在线视频先锋| 国产suv一区二区三区88区| 欧美这里有精品| 国产日韩精品一区二区三区在线| 亚洲精品免费在线| 精品一区精品二区高清| 91影视在线播放| 日韩欧美色综合| 国产精品福利一区| 久久99在线观看| 色狠狠一区二区| 久久久精品国产免大香伊| 亚洲午夜电影网| 成人黄动漫网站免费app| 欧美一区二区三区四区视频| 中文字幕一区二区三区在线不卡| 日日夜夜免费精品视频| 99麻豆久久久国产精品免费优播| 91精品中文字幕一区二区三区 | 最新成人av在线| 狠狠色2019综合网| 8x8x8国产精品| 亚洲精品久久久蜜桃| 高清视频一区二区| 日韩美一区二区三区| 亚洲成人黄色影院| 不卡在线观看av| 国产欧美精品一区aⅴ影院| 玖玖九九国产精品| 欧美片在线播放| 亚洲一区二区不卡免费| 成人app软件下载大全免费| 精品99999| 免费日本视频一区| 91精品欧美一区二区三区综合在| 亚洲欧美韩国综合色| 岛国精品一区二区| 久久久九九九九| 国产一区亚洲一区| 日韩欧美一区在线观看| 视频一区视频二区中文| 欧美三级韩国三级日本三斤| 亚洲三级在线免费| www.66久久| 综合欧美一区二区三区| 成人黄色电影在线| 国产精品无码永久免费888| 国产剧情一区二区三区| 欧美精品一区二区蜜臀亚洲| 日本在线播放一区二区三区| 91精品在线一区二区| 免费观看日韩av| 日韩丝袜美女视频| 久久不见久久见免费视频1| 日韩欧美国产三级电影视频| 美女免费视频一区| 2023国产精品自拍| 国产制服丝袜一区| 久久久.com| 成人午夜激情视频| 国产精品久久久久久久久久免费看| 风间由美一区二区av101 | 亚洲精品成人a在线观看| 一本久道久久综合中文字幕| 亚洲精品国产a久久久久久| 在线观看欧美精品| 日韩精品乱码免费| 亚洲精品一区在线观看| 国产麻豆91精品| 亚洲三级免费观看| 欧美日本一道本在线视频| 日产国产高清一区二区三区 | 国产伦精品一区二区三区在线观看| 欧美va亚洲va香蕉在线| 国产白丝网站精品污在线入口| 中文一区二区在线观看| 色婷婷综合五月| 日本欧美一区二区三区乱码 | 制服视频三区第一页精品| 看片的网站亚洲| 国产精品日日摸夜夜摸av| 欧美在线观看视频一区二区三区| 午夜精品一区二区三区免费视频| 欧美一区二区视频在线观看2022 | 日本一区二区在线不卡|