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

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

?? worker.cpp

?? funambol windows mobile plugin source code, the source code is taken from the funambol site
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
    int ret = 0;
    HANDLE stpThread = (HANDLE)lpv;

    //
    // Wait for STPThread to finish.
    // - if handle is NULL, no STP has been done  -> go with CTP.
    // - if STPThread returned error              -> go with CTP.
    // - if STPThread returned ok                 -> exit now (STP is running).
    // 
    if (stpThread) {
        LOG.debug("Waiting for STP notification sync to finish (timeout = %d sec)...", MAX_ADDRESSCHANGE_TIME);
        DWORD waitResult = WaitForSingleObject(stpThread, MAX_ADDRESSCHANGE_TIME * 1000);
        switch (waitResult) {

            // Thread exited, get exit code.
            case WAIT_ABANDONED:
                LOG.debug("STPThread abandoned");
            case WAIT_OBJECT_0: {
                DWORD exitcode = 0;
                GetExitCodeThread(stpThread, &exitcode);
                LOG.debug("STPThread ended with code %d", exitcode);
                if (exitcode == 0) {
                    // STP is running correctly: close CTP if active
                    CloseHandle(stpThread);
                    CTPManager* ctpManager = CTPManager::getInstance();
                    ctpManager->stopCTP();
                    return 1;
                }
                else {
                    // STP failed, go with CTP
                    LOG.debug("STP failed, go with CTP");
                    break;
                }
            }

            // Thread is still running after timeout -> kill it and continue.
            case WAIT_TIMEOUT: {
                LOG.debug("Timeout - STPThread is running, closing CTP if active");
                CTPManager* ctpManager = CTPManager::getInstance();
                ctpManager->stopCTP();
                return 1;
            }

            // Some error occurred (case WAIT_FAILED)
            default: {
                LOG.debug("Wait error on STPThread");
                break;
            }
        }
    }
    CloseHandle(stpThread);


    // Start the CTP connection process.
    // Get the unique instance of CTPManager.
    CTPManager* ctpManager = CTPManager::getInstance();

    //
    // Infinite cycle: always restore the connection if it's lost 
    // or in case of errors. Exit only if leavingState flag is up.
    //
    bool restore = false;
    bool jump    = false;
    while (ctpManager->getConfig()->isLeavingState() == false) {

        if (restore) {
            // Restoring from a broken connection: close socket and wait some seconds.
            LOG.debug("Restoring CTP connection...");
            ctpManager->closeConnection();

            int sleepTime = ctpManager->getConfig()->getCtpRetry();
            sleepTime = min(sleepTime, ctpManager->getConfig()->getMaxCtpRetry());
            LOG.debug("Sleep for %d seconds...", sleepTime);
            Sleep(sleepTime * 1000);

            // Save the new value to config
            sleepTime *= CTP_RETRY_INCREASE_FACTOR;     // Double the retry time
            ctpManager->getConfig()->setCtpRetry(sleepTime);
            restore = false;
        }
        if (jump) {
            // Restoring from a JUMP status: close socket and reconnect immediately.
            LOG.debug("Restoring CTP connection from a JUMP...");
            ctpManager->closeConnection();
            jump = false;
        }

        //
        // Open socket connection
        // ----------------------
        LOG.debug("Open CTP connection...");
        if (ctpManager->openConnection()) {
            ctpManager->closeConnection();
            ret = 1;
            goto finally;
        }

        //
        // Authentication
        // --------------
        LOG.debug("Sending [AUTH] message...");
        if (ctpManager->sendAuthMsg()) {
            ctpManager->closeConnection();
            ret = 2;
            goto finally;
        }
        
        // Receiving AUTH status message
        CTPMessage* authStatusMsg = ctpManager->receiveStatusMsg();
        char authStatus = authStatusMsg->getGenericCommand();
        list<CTPParam>::iterator param;
        char* buf = NULL;
        switch (authStatus) {

            case ST_UNAUTHORIZED:
                //
                // Retry with new nonce received
                //
                LOG.info("Client not authenticated: retry with new nonce");
                buf = extractNonceParam(authStatusMsg);
                if (buf) {
                    // Save new nonce to config, and save config to registry!
                    ctpManager->getConfig()->setCtpNonce(buf);
                    ctpManager->getConfig()->saveCTPConfig();
                    delete [] buf;
                }
                else {
                    // NONCE not found -> restore connection
                    LOG.error("Error receiving UNAUTHORIZED Status message: NONCE param is missing");
                    restore = true;
                    continue;
                }

                // Send 2nd auth msg
                LOG.info("Sending CTP authentication message...");
                if (ctpManager->sendAuthMsg()) {
                    ret = 2;
                    goto finally;
                }

                // Check 2nd status received, only OK allowed
                authStatusMsg = ctpManager->receiveStatusMsg();
                authStatus = authStatusMsg->getGenericCommand();
                if (authStatus == ST_OK) {
                    // *** Authentication OK! *** 
                    // Save nonce if any (go to case ST_OK)
                }
                else {
                    LOG.info("CTP error: Client not authenticated. Please check your credentials.");
                    ret = 3;
                    goto finally;
                }
                // no 'break': need to enter into case ST_OK...


            case ST_OK:
                // *** Authentication OK! *** 
                LOG.info("Client authenticated succesfully!");
                // Save nonce if any
                buf = extractNonceParam(authStatusMsg);
                if (buf) {
                    // Save new nonce to config, and save config to registry!
                    ctpManager->getConfig()->setCtpNonce(buf);
                    ctpManager->getConfig()->saveCTPConfig();
                    delete [] buf;
                }
                else {
                    LOG.info("No new nonce received.");
                }
                break;


            case ST_JUMP:
                //
                // Jump to desired server 'to' and save the 'from' value
                //
                LOG.info("Server requested a JUMP");
                if (authStatusMsg->params.size() < 1) {
                    // Expected FROM and TO params -> restore connection
                    LOG.error("Error receiving JUMP Status message: some parameter is missing");
                    restore = true;
                    continue;
                }

                // Read FROM and TO parameters and update CTPConfig
                param = authStatusMsg->params.begin();
                while (param != authStatusMsg->params.end()) {
                    int valueLen = (*param).getValueLength();
                    void* value  = (*param).getValue();
                    if ((*param).getParamCode() == P_FROM) {
                        char* from = stringdup((char*)value, valueLen);
                        ctpManager->getConfig()->setUrlFrom(from);
                        delete [] from;
                    }
                    else if ((*param).getParamCode() == P_TO) {
                        char* url = stringdup((char*)value, valueLen);
                        string to = ctpManager->getConfig()->getHostName(url);
                        int port  = ctpManager->getConfig()->getHostPort(url);
                        ctpManager->getConfig()->setUrlTo(to);
                        ctpManager->getConfig()->setCtpPort(port);
                        delete [] url;
                    }
                    else {
                        // Unexpected Status param -> restore connection
                        LOG.error("Error receiving JUMP Status message: unexpected param '0x%02x'", (*param).getParamCode());
                        restore = true;
                        continue;
                    }
                    param++;
                }

                // Now restore the socket connection to the new Server address...
                LOG.debug("JUMP status received: FROM %s TO %s:%d", ctpManager->getConfig()->getUrlFrom().c_str(), 
                                                                    ctpManager->getConfig()->getUrlTo().c_str(), 
                                                                    ctpManager->getConfig()->getCtpPort() );
                jump = true;
                continue;


            case ST_FORBIDDEN:
                // Forbidden authentication -> exit thread
                LOG.info("Authentication forbidden by the Server, please check your credentials.");
                ret = 4;
                goto finally;


            case ST_ERROR:
                // Error -> restore connection
                LOG.info("Received ERROR status from Server: restore ctp connection");
                restore = true;
                continue;

            default:
                // Unexpected status -> restore connection
                LOG.error("Unexpected status received '0x%02x' -> restore ctp connection", authStatus);
                restore = true;
                continue;
        }

        //
        // Creates the thread that will be stuck waiting for server msg
        // and waits until it ends (errors or ctpConnTimeout).
        //
        ctpManager->receive();

        // If here, connection was broken or ctpConnTimeout -> restore connection
        restore = true;
    }

finally:

    LOG.debug("Exiting ctpWorker thread");
    return ret;
}




DWORD WINAPI receiveWorker(LPVOID lpv) {

    LOG.debug("Starting receiveWorker thread");
    int ret = 0;
    CTPManager* ctpManager = CTPManager::getInstance();


    // Keep the socket open, always in 'receive' state.
    // Exit only in case of errors or if we're in leaving state.
    while (ctpManager->getConfig()->isLeavingState() == false) {

        // Receive msg from Server
        CTPMessage* statusMsg = ctpManager->receiveStatusMsg();
        if (!statusMsg) {
            // Error on receiving -> exit thread
            ret = -1;
            goto finally;
        }

        char status = statusMsg->getGenericCommand();
        SyncNotification* sn = NULL;
        switch (status) {

            case ST_OK:
                // 'OK' to our 'Ready' command -> back to recv
                LOG.info("[OK] received -> back to receive state");
                break;

            case ST_SYNC:
                //
                // Start the sync!
                // ---------------
                LOG.info("[SYNC] notification received! Starting the sync");
                sn = statusMsg->getSyncNotification();
                startSyncFromSAN(sn);

                // Back to recv
                LOG.debug("Back to receive state");
                break;

            case ST_ERROR:
                LOG.debug("[ERROR] message received");
            default:
                // Error from server -> exit thread (will try restoring the socket from scratch)
                LOG.debug("Bad status received (code 0x%02x), exiting thread", status);
                ret = -2;
                goto finally;
        }
    }

finally:
    LOG.debug("Exiting receiveWorker thread");
    return ret;
}



/**
 * Thread used to send 'ready' messages as a heartbeat.
 * It never ends, so it must be killed by the caller to stop the CTP.
 */
DWORD WINAPI heartbeatWorker(LPVOID lpv) {
    LOG.debug("Starting heartbeatWorker thread");

    // Load the sleep interval (ctpReady)
    CTPManager* ctpManager = CTPManager::getInstance();
    int sleepInterval = ctpManager->getConfig()->getCtpReady();

    // Send 'ready' message to Server and sleep ctpReady seconds
    while (ctpManager->getConfig()->isLeavingState() == false) {
        ctpManager->sendReadyMsg();
        Sleep(sleepInterval * 1000);
    }

    LOG.debug("Exiting heartbeatWorker thread");
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情第一区| 欧美激情在线免费观看| 香蕉成人啪国产精品视频综合网| 91麻豆免费观看| 热久久免费视频| 亚洲另类一区二区| 日韩三级在线观看| 欧美中文字幕不卡| 国产美女在线精品| 青娱乐精品在线视频| 中文字幕在线不卡| 久久久久国产精品人| 欧美日韩国产高清一区二区 | 亚洲同性gay激情无套| 精品国精品国产| 欧美一级欧美一级在线播放| 99热这里都是精品| 成人av片在线观看| 国产精品一区二区不卡| 麻豆成人91精品二区三区| 夜夜操天天操亚洲| 亚洲六月丁香色婷婷综合久久| 久久精品视频一区二区| 日韩精品中文字幕一区| 制服丝袜av成人在线看| 欧美伦理视频网站| 欧美色偷偷大香| 337p亚洲精品色噜噜狠狠| bt欧美亚洲午夜电影天堂| 成人a级免费电影| 粉嫩av一区二区三区粉嫩| 韩国理伦片一区二区三区在线播放| 视频在线观看一区| 精品一区二区三区av| 同产精品九九九| 亚洲成人福利片| 蜜桃视频在线一区| 全国精品久久少妇| 偷窥国产亚洲免费视频| 国产在线视频一区二区| 国产精品亚洲第一区在线暖暖韩国 | 6080午夜不卡| 久久亚洲一区二区三区明星换脸 | 国产精品青草久久| 亚洲一区二区精品3399| 久久精品国产精品亚洲综合| 国产激情视频一区二区三区欧美 | 日韩电影在线免费| 国产99久久久精品| 欧美日韩一区二区三区在线看| 日韩一级二级三级精品视频| 国产精品免费久久久久| 水蜜桃久久夜色精品一区的特点 | 午夜影院在线观看欧美| 国产美女精品一区二区三区| 欧美日韩国产综合久久| 国产精品人妖ts系列视频| 麻豆精品视频在线观看视频| 91蜜桃在线免费视频| 国产清纯白嫩初高生在线观看91 | 日韩欧美中文字幕精品| 亚洲欧洲日韩综合一区二区| 极品少妇一区二区| 日韩欧美中文一区| 久久精品国产精品亚洲综合| 欧美日韩成人在线| 亚洲h在线观看| 欧美色综合天天久久综合精品| 中日韩免费视频中文字幕| 国产精品综合在线视频| 国产丝袜美腿一区二区三区| 激情综合网天天干| 国产三级精品在线| 成人精品国产福利| 亚洲欧美综合另类在线卡通| 成人黄色大片在线观看| 欧美激情艳妇裸体舞| www.欧美精品一二区| 欧美韩日一区二区三区四区| 91视频免费观看| 视频一区欧美日韩| 精品国产欧美一区二区| 成人亚洲精品久久久久软件| 亚洲欧洲在线观看av| 欧美日韩色一区| 国产高清无密码一区二区三区| 中文字幕精品一区| 欧美午夜电影网| 精品一区二区在线播放| 亚洲天堂精品在线观看| 欧美一二三四在线| 97se狠狠狠综合亚洲狠狠| 日韩高清不卡一区二区三区| 国产日韩欧美一区二区三区综合| 91高清视频免费看| 国产成人福利片| 国内精品不卡在线| 亚洲不卡av一区二区三区| 亚洲欧美在线aaa| 亚洲一区在线观看网站| 成人黄色av电影| 一区二区激情小说| 国产日韩欧美一区二区三区乱码| 欧美在线小视频| 成人午夜电影网站| 国产91对白在线观看九色| 日韩电影一区二区三区| 一区二区三区在线观看欧美| 国产精品久久夜| 国产精品伦理一区二区| 欧美韩日一区二区三区四区| 欧美v国产在线一区二区三区| 欧美一区二区视频在线观看2020| 欧美日韩免费观看一区三区| 欧美在线高清视频| 欧美性猛片aaaaaaa做受| 欧美在线你懂的| 91久久奴性调教| 精品视频1区2区3区| 欧美一区二区三区喷汁尤物| 欧美一区二区三区视频在线观看 | 国产成人av一区| 不卡av电影在线播放| 国内精品免费**视频| 久久狠狠亚洲综合| av亚洲精华国产精华精| 欧美日韩国产首页在线观看| 4438x亚洲最大成人网| 亚洲国产精品精华液ab| 亚洲品质自拍视频| 蜜臀久久久99精品久久久久久| 国产精品一区二区男女羞羞无遮挡| 国产91精品久久久久久久网曝门| 99久久777色| 国产女人aaa级久久久级 | 奇米色777欧美一区二区| 国产精品亚洲综合一区在线观看| 一道本成人在线| 亚洲精品在线观看网站| 亚洲精品乱码久久久久久久久 | 精品国产乱码久久久久久久久 | 欧美日韩成人一区二区| 日本一区二区三区免费乱视频| 亚洲bt欧美bt精品| 99免费精品在线观看| 久久久久久久综合| 久草精品在线观看| 欧美精品123区| 视频一区二区国产| 欧美视频中文字幕| 日韩电影在线免费看| av在线播放成人| 亚洲欧美日韩人成在线播放| 国产高清精品网站| 国产精品国产a级| www.成人在线| 亚洲欧美另类小说| 91蝌蚪porny| 香蕉加勒比综合久久| 日韩一区二区三区av| 国产老女人精品毛片久久| 精品三级在线观看| 成人av网站在线观看免费| 国产欧美视频一区二区| 91蜜桃传媒精品久久久一区二区| ...中文天堂在线一区| 欧美绝品在线观看成人午夜影视| 亚洲一二三区在线观看| 日韩午夜三级在线| 国产精品99久久久久久有的能看 | 裸体健美xxxx欧美裸体表演| www国产成人| 欧美欧美欧美欧美| 成人福利在线看| 亚洲丶国产丶欧美一区二区三区| 欧美成人精品1314www| 91老司机福利 在线| 99精品欧美一区二区三区小说| 亚洲成人福利片| 欧美国产视频在线| 欧美电视剧免费全集观看 | 色欧美日韩亚洲| 国产传媒久久文化传媒| 亚洲电影一级黄| 中文字幕在线一区免费| 久久久精品日韩欧美| 日韩网站在线看片你懂的| 欧美天堂亚洲电影院在线播放| 国产精品123区| 美女在线一区二区| 亚洲影院理伦片| 亚洲精品高清在线观看| 成人免费一区二区三区在线观看| 久久一区二区三区国产精品| 精品国产免费一区二区三区四区| 91精品国产综合久久国产大片| 在线精品国精品国产尤物884a| 成人av在线观| 欧美在线一二三| 日韩精品最新网址|