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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? protocol.c

?? Open DMT Client C Source code
?? C
?? 第 1 頁 / 共 2 頁
字號:
// ----------------------------------------------------------------------------static protDataCallbackFtn_t  ftnErrorHandler = 0;void protocolSetErrorHandler(protDataCallbackFtn_t ftn){    ftnErrorHandler = ftn;}static void protocolHandleError(UInt16 errKey, const UInt8 *errData, UInt16 errDataLen){    if (ftnErrorHandler) {        (*ftnErrorHandler)(errKey, errData, errDataLen);    }}// ----------------------------------------------------------------------------static protClientInitCallbackFtn_t  ftnClientInitHandler = 0;void protocolSetClientInitHandler(protClientInitCallbackFtn_t ftn){    ftnClientInitHandler = ftn;}static void protocolHandleClientInit(){        /* external client init */    if (ftnClientInitHandler) {        (*ftnClientInitHandler)();    }        /* send pending packets */    if (protHasPendingPackets()) {        logINFO(LOGSRC,"Sending pending packets during client initialization ...");        Packet_t pkt;        while (protGetPendingPacket(&pkt)) {            serverWritePacket(&pkt);        }    }    }// ----------------------------------------------------------------------------/* protocol loop entry point */void protocolLoop(    const char *portName, utBool portLog,    utBool cliKeepAlive,     utBool cliSpeaksFirst){    TimerSec_t revokeSpeakFreelyTimer = 0L;    UInt32 haveEvents = 0L;    Packet_t packet, *pkt = &packet;    utBool clientNeedsInit = utFalse;        /* global states */    clientKeepAlive = cliKeepAlive; // utFalse    clientSpeaksFirst = cliSpeaksFirst; // utTrue;        /* pending packet mutex init */    threadMutexInit(&pendingMutex);            /* init */    serverInitialize();    lastEventSequence = 0L;    lastEventSeqLen   = 0;    lastEventTimer    = 0L;    /* loop forever */    for (;;) {                /* open port */        if (!serverIsOpen()) {            logINFO(LOGSRC,"Openning server port: %s", portName);            if (!serverOpen(portName, portLog)) {                // Unable to open/accept client (message already displayed)                /* sleep and try again */                threadSleepMS(3000L);                continue;            }            logINFO(LOGSRC,"Server port opened: %s", portName);            *clientAccountID = 0;            *clientDeviceID = 0;            revokeSpeakFreelyTimer = utcGetTimer();            if (!clientSpeaksFirst) {                // If the client does not speak first, then we must nudge the client                // to let him know to speak now.                serverWritePacketFmt(PKT_SERVER_EOB_DONE,"%1u",(UInt32)0L);                isSpeakFreelyMode = utFalse;            }            // Send any client initialization at the start of each new connection            clientNeedsInit = utTrue; // clientSpeaksFirst;            serverNeedsMoreInfo = utFalse;        }                /* send pending packets, etc. */        if (cliKeepAlive) {#if defined(INCLUDE_UPLOAD)            if (pendingFileUpload) {                utBool rtn = utFalse;                if (pendingFileClient && *pendingFileClient) {                    logINFO(LOGSRC,"Uploading file: %s", pendingFileUpload);                    rtn = uploadSendFile(pendingFileUpload, pendingFileClient);                } else {                    logINFO(LOGSRC,"Uploading encoded file: %s", pendingFileUpload);                    rtn = uploadSendEncodedFile(pendingFileUpload);                }                if (!rtn) {                    logERROR(LOGSRC,"Upload failed!");                }                pendingFileUpload = (char*)0;                pendingFileClient = (char*)0;            } else#endif            if (protHasPendingPackets()) {                logINFO(LOGSRC,"Sending pending packet during client keep-alive ...");                Packet_t pkt;                while (protGetPendingPacket(&pkt)) {                    serverWritePacket(&pkt);                }            } else             if (stopSpeakFreely) {                if (isSpeakFreelyMode) {                    serverWritePacketFmt(PKT_SERVER_EOB_DONE,"%1u",(UInt32)0L);                    isSpeakFreelyMode = utFalse;                }                stopSpeakFreely = utFalse;            } else            if (startSpeakFreely) {                if (!isSpeakFreelyMode) {                    if (speakFreelyMaxEvents >= 0) {                        serverWritePacketFmt(PKT_SERVER_EOB_SPEAK_FREELY,"%1u",(UInt32)speakFreelyMaxEvents);                    } else {                        serverWritePacketFmt(PKT_SERVER_EOB_SPEAK_FREELY,"");                    }                    isSpeakFreelyMode = utTrue;                }                startSpeakFreely = utFalse;            }        }        /* read client packet */        int err = serverReadPacket(pkt);        //logINFO(LOGSRC,"Client Packet HEADER=%04X", pkt->hdrType);        if (err == SRVERR_TRANSPORT_ERROR) {            logERROR(LOGSRC,"Read error (EOF?)");            serverClose();            continue;        } else        if (err == SRVERR_TIMEOUT) {            // read timeout            if (!clientKeepAlive) {                serverWritePacketFmt(PKT_SERVER_EOT,"");                logINFO(LOGSRC,"End-Of-Transmission\n\n");                serverClose();            } else            if (clientNeedsInit) {                // we haven't heard from the client, thus we haven't initialized it either                // nudge the client again to get him to speak                logINFO(LOGSRC,"Init Client");                serverWritePacketFmt(PKT_SERVER_EOB_DONE,"%1u",(UInt32)0L);                isSpeakFreelyMode = utFalse;            } else            if ((lastEventTimer != 0L) && utcIsTimerExpired(lastEventTimer,3L)) {                // Acknowledge the events that we've received                // [Note: Only needed if client never releases 'speakFreely' rights]                logWARNING(LOGSRC,"Read timeout, ackowledging received events");                Packet_t pkt;                if (lastEventSeqLen > 0) {                    pktInit(&pkt, PKT_SERVER_ACK, "%*x", lastEventSeqLen, lastEventSequence);                } else {                    pktInit(&pkt, PKT_SERVER_ACK, "");                }                serverWritePacket(&pkt);                haveEvents = 0;                lastEventTimer = 0L;            } else            if (utcIsTimerExpired(revokeSpeakFreelyTimer,REVOKE_SPEAK_FREELY_INTERVAL)) {                // read timeout, revoke speak-freely (ping client)                //logDEBUG(LOGSRC,"Client Timeout");                serverWritePacketFmt(PKT_SERVER_EOB_DONE,"%1u",(UInt32)0L);                isSpeakFreelyMode = utFalse;                revokeSpeakFreelyTimer = utcGetTimer();            }            continue;        } else        if (err != SRVERR_OK) {            // SRVERR_CHECKSUM_FAILED            // SRVERR_PARSE_ERROR            // SRVERR_PACKET_LENGTH            logERROR(LOGSRC,"Checksum error");            // The remainder of the session is suspect, flush the rest            serverWritePacketFmt(PKT_SERVER_EOT,"");            logINFO(LOGSRC,"End-Of-Transmission\n\n");            serverClose();            continue;        }                /* reset "revoke speak-freely" timer */        // reset timer when we hear from the client        revokeSpeakFreelyTimer = utcGetTimer();        /* print received packet */        pktPrintPacket(pkt, "[RX]", ENCODING_CSV);                /* handle event packet */        ClientPacketType_t pht = pkt->hdrType;        if (((pht >= PKT_CLIENT_FIXED_FMT_STD  ) && (pht <= PKT_CLIENT_FIXED_FORMAT_F )) ||            ((pht >= PKT_CLIENT_DMTSP_FORMAT_0 ) && (pht <= PKT_CLIENT_DMTSP_FORMAT_F )) ||            ((pht >= PKT_CLIENT_CUSTOM_FORMAT_0) && (pht <= PKT_CLIENT_CUSTOM_FORMAT_F))   ) {            Event_t ev;            if (evParseEventPacket(pkt, &ev)) {                if ((lastEventSequence > 0L) && ((lastEventSequence + 1L) != ev.sequence)) {                    logERROR(LOGSRC,"********************************************************");                    logERROR(LOGSRC,"Possible Event Data Loss");                    logERROR(LOGSRC,"Expected sequence: 0x%04X", (lastEventSequence + 1L));                    logERROR(LOGSRC,"Found sequence...: 0x%04X", ev.sequence);                    logERROR(LOGSRC,"********************************************************");                }                lastEventSequence = ev.sequence;                lastEventSeqLen   = ev.seqLen;                protocolHandleEvent(pkt, &ev);            }            haveEvents++;            lastEventTimer = utcGetTimer();            continue;        }         /* handle other */        switch ((UInt16)pkt->hdrType) {                        case PKT_CLIENT_UNIQUE_ID:                // ignore                break;            case PKT_CLIENT_ACCOUNT_ID:                memset(clientAccountID, 0, sizeof(clientAccountID));                binScanf(pkt->data, pkt->dataLen, "%*s", MAX_ID_SIZE, clientAccountID);                strTrimTrailing(clientAccountID);                // protocolHandleAccountID(clientAccountID);                break;            case PKT_CLIENT_DEVICE_ID:                memset(clientDeviceID, 0, sizeof(clientDeviceID));                binScanf(pkt->data, pkt->dataLen, "%*s", MAX_ID_SIZE, clientDeviceID);                strTrimTrailing(clientDeviceID);                logINFO(LOGSRC,"Client Account/Device: %s/%s\n", clientAccountID, clientDeviceID);                // protocolHandleDeviceID(clientDeviceID);                break;                            case PKT_CLIENT_PROPERTY_VALUE:                if (pkt->dataLen >= 2) {                    UInt32 propKey = 0L;                    binScanf(pkt->data, pkt->dataLen, "%2x", &propKey);                    protocolHandleProperty((UInt16)propKey, pkt->data + 2, (UInt16)(pkt->dataLen - 2));                } else {                    // invalid property packet (just ignore)                }                break;                            case PKT_CLIENT_DIAGNOSTIC:                if (pkt->dataLen >= 2) {                    UInt32 diagKey = 0L;                    binScanf(pkt->data, pkt->dataLen, "%2x", &diagKey);                    protocolHandleDiag((UInt16)diagKey, pkt->data + 2, (UInt16)(pkt->dataLen - 2));                } else {                    // invalid diagnostic packet (just ignore)                }                break;                            case PKT_CLIENT_ERROR:                if (pkt->dataLen >= 2) {                    UInt32 errKey = 0L;                    binScanf(pkt->data, pkt->dataLen, "%2x", &errKey);                    protocolHandleError((UInt16)errKey, pkt->data + 2, (UInt16)(pkt->dataLen - 2));                } else {                    // invalid error packet (just ignore)                }                break;                            case PKT_CLIENT_EOB_DONE:            case PKT_CLIENT_EOB_MORE:                // NOTE: any client supplied Fletcher checksum is ignored here.                serverReadFlush(); // flush any remaining byte in the client input queue                if (haveEvents > 0) {                    // Acknowledge the events that we've received                    Packet_t pkt;                    if (lastEventSeqLen > 0) {                        pktInit(&pkt, PKT_SERVER_ACK, "%*x", lastEventSeqLen, lastEventSequence);                    } else {                        pktInit(&pkt, PKT_SERVER_ACK, "");                    }                    serverWritePacket(&pkt);                    haveEvents = 0;                    lastEventTimer = 0L;                }                if (clientNeedsInit) {                    // send any desired client initialization                    clientNeedsInit = utFalse;                    protocolHandleClientInit();                }                if (clientKeepAlive) {                    if (serverNeedsMoreInfo) {                        serverWritePacketFmt(PKT_SERVER_EOB_DONE,"%1x",(UInt32)0L);                        isSpeakFreelyMode = utFalse;                        serverNeedsMoreInfo = utFalse;                    } else                    if (isSpeakFreelyMode) {                        // tell client to speak when he wishes                        if (speakFreelyMaxEvents >= 0) {                            serverWritePacketFmt(PKT_SERVER_EOB_SPEAK_FREELY,"%1u",(UInt32)speakFreelyMaxEvents);                        } else {                            serverWritePacketFmt(PKT_SERVER_EOB_SPEAK_FREELY,"");                        }                        isSpeakFreelyMode = utTrue;                    }                } else                if (serverNeedsMoreInfo) {                    // we need more info from the client                    serverWritePacketFmt(PKT_SERVER_EOB_DONE,"%1x",(UInt32)0L);                    isSpeakFreelyMode = utFalse;                    serverNeedsMoreInfo = utFalse;                } else                if ((UInt16)pkt->hdrType == PKT_CLIENT_EOB_DONE) {                    // client is finished, close socket                    serverWritePacketFmt(PKT_SERVER_EOT,"");                    logINFO(LOGSRC,"End-Of-Transmission\n\n");                    serverClose();                } else {                    // client isn't done yet, tell client to continue                    serverWritePacketFmt(PKT_SERVER_EOB_DONE,"");                    isSpeakFreelyMode = utFalse;                }                break;                            default:                serverWriteError("%2x%2x", (UInt32)NAK_PACKET_TYPE, (UInt32)pkt->hdrType);                break;                        }            } // for (;;)         /* we only get here if there is an error */    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av电影免费观看高清完整版在线观看| 7799精品视频| 国产欧美精品一区二区色综合朱莉| 日本不卡视频在线| 91精品国产91久久久久久最新毛片 | 91精品国产一区二区三区蜜臀 | 欧美成人一区二区三区在线观看| 日韩影视精彩在线| 在线观看亚洲精品| 亚洲综合色婷婷| 91精品国产美女浴室洗澡无遮挡| 久久先锋资源网| 国产91在线观看丝袜| 国产精品久久久久久久蜜臀| av网站免费线看精品| 一区二区在线观看免费视频播放| 美女任你摸久久| 日韩欧美中文字幕公布| 国产在线精品一区二区不卡了 | 色悠悠久久综合| 丝袜美腿一区二区三区| 久久人人97超碰com| av在线不卡网| 青草av.久久免费一区| 国产日韩精品久久久| 精品视频免费在线| 国产成人亚洲精品青草天美| 一区二区三区四区av| 欧美r级电影在线观看| 在线视频国内一区二区| 日日夜夜精品视频天天综合网| 精品区一区二区| 丁香五精品蜜臀久久久久99网站| 亚洲视频一区在线| 欧美日韩高清在线| 国产一区二区三区免费看| 综合色中文字幕| 欧美精选午夜久久久乱码6080| 国内精品免费在线观看| 亚洲精品免费视频| 欧美变态tickling挠脚心| 成人丝袜18视频在线观看| 亚洲国产精品一区二区www| 精品欧美久久久| 色婷婷久久久久swag精品| 看电影不卡的网站| 久久久久久久国产精品影院| 欧美亚洲一区三区| 国产精品自拍三区| 亚洲婷婷综合色高清在线| 日韩欧美国产精品一区| 一本大道久久a久久综合婷婷 | 国产精品自产自拍| 亚洲永久免费视频| 国产日韩欧美激情| 欧美剧在线免费观看网站| av亚洲产国偷v产偷v自拍| 久久精品国产亚洲5555| 亚洲黄色性网站| 亚洲日本在线看| 国产精品美女久久久久久2018| 久久久久久久综合| wwwwww.欧美系列| 精品美女被调教视频大全网站| 欧美人与性动xxxx| 欧美日韩另类一区| 欧美亚洲动漫精品| 欧洲生活片亚洲生活在线观看| 色综合天天综合| 91丨porny丨首页| www.66久久| 色哟哟在线观看一区二区三区| 成人av在线一区二区三区| 国产91精品露脸国语对白| 岛国av在线一区| 成人激情免费网站| 99久久久国产精品| 91视频国产观看| 欧美影视一区二区三区| 欧美美女一区二区在线观看| 欧美日韩一区三区| 3atv一区二区三区| 欧美电影免费观看高清完整版| 日韩欧美成人午夜| 久久嫩草精品久久久久| 国产精品看片你懂得| 成人欧美一区二区三区白人| 亚洲最新在线观看| 日韩专区在线视频| 激情文学综合丁香| 高清不卡一二三区| 色综合久久久久久久久久久| 欧美日韩亚洲另类| 精品国产欧美一区二区| 国产欧美久久久精品影院 | 亚洲国产日韩在线一区模特| 一区二区三区在线观看视频| 午夜精品一区在线观看| 美女网站在线免费欧美精品| 国产精品自在在线| 色成人在线视频| 日韩欧美亚洲另类制服综合在线| 久久青草欧美一区二区三区| 亚洲欧美日韩综合aⅴ视频| 日韩精品亚洲一区二区三区免费| 激情综合五月天| 91丝袜高跟美女视频| 91精品国产一区二区| 国产免费观看久久| 天堂成人免费av电影一区| 国产精品一区二区三区乱码 | 3d成人h动漫网站入口| 久久久久久一级片| 亚洲国产视频在线| 国产在线观看一区二区| 欧美在线一区二区三区| 26uuu精品一区二区三区四区在线| 亚洲国产精品黑人久久久| 亚洲一二三区在线观看| 久久97超碰色| 色国产综合视频| 国产亚洲综合av| 亚洲第一福利视频在线| 国产精品1024久久| 欧美日韩极品在线观看一区| 久久精品一区二区三区不卡牛牛| 一区二区三区欧美| 国产69精品久久99不卡| 日韩一区二区三区精品视频| 亚洲色图欧洲色图| 国产精品性做久久久久久| 欧美美女一区二区三区| 亚洲天堂2016| 国产精品一级在线| 欧美一级日韩免费不卡| 一区二区三区中文字幕电影 | 欧美精品一区二区三区很污很色的| 亚洲欧美经典视频| 顶级嫩模精品视频在线看| 777奇米四色成人影色区| 亚洲三级电影全部在线观看高清| 国产一区二区三区综合| 91精品国产综合久久久蜜臀粉嫩| 最近中文字幕一区二区三区| 激情图片小说一区| 69堂亚洲精品首页| 亚洲美腿欧美偷拍| 国产91精品一区二区麻豆亚洲| 日韩女优电影在线观看| 天堂成人国产精品一区| 欧美三级乱人伦电影| 18欧美乱大交hd1984| 成人一区二区三区| 国产视频一区二区在线| 久久99日本精品| 日韩一区二区电影在线| 亚洲va韩国va欧美va精品 | 99视频一区二区三区| 国产情人综合久久777777| 激情久久五月天| 337p粉嫩大胆噜噜噜噜噜91av | 精品视频1区2区| 亚洲国产欧美一区二区三区丁香婷| 成人免费av网站| 国产精品乱码人人做人人爱| 福利一区在线观看| 国产精品污网站| 99精品在线观看视频| 亚洲女女做受ⅹxx高潮| 日本乱码高清不卡字幕| 艳妇臀荡乳欲伦亚洲一区| 欧日韩精品视频| 婷婷亚洲久悠悠色悠在线播放 | 久久亚洲综合色| 国产精品一区二区在线播放 | 亚洲成人免费在线| 欧美日韩的一区二区| 免费日本视频一区| 精品国产百合女同互慰| 国产成人免费高清| 中文字幕永久在线不卡| 91国偷自产一区二区三区成为亚洲经典 | 91色婷婷久久久久合中文| 一区二区三区在线视频播放| 欧美日韩精品欧美日韩精品一| 美日韩黄色大片| 中文字幕国产一区| 日本精品一区二区三区四区的功能| 亚洲综合视频在线观看| 日韩欧美亚洲国产精品字幕久久久| 国产精品一二三四五| 中文字幕亚洲欧美在线不卡| 日本伦理一区二区| 奇米精品一区二区三区在线观看| 久久蜜桃香蕉精品一区二区三区| 成人免费视频视频在线观看免费 | ...av二区三区久久精品| 欧美日韩国产一区| 国产在线精品一区二区三区不卡| 亚洲色图.com|