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

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

?? upnpapi.c

?? Upnp開發包文件
?? C
?? 第 1 頁 / 共 5 頁
字號:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2000-2003 Intel Corporation // All rights reserved. //// Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: //// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither name of Intel Corporation nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission.// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.///////////////////////////////////////////////////////////////////////////////File upnpapi.c#include <assert.h>#include <signal.h>#include <stdlib.h>#include <string.h>#include <sys/stat.h>#include "config.h"#include "upnpapi.h"#include "httpreadwrite.h"#include "ssdplib.h"#include "soaplib.h"#include "ThreadPool.h"#include "membuffer.h"#include <sys/ioctl.h>#include <linux/if.h>#include <sys/utsname.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include "httpreadwrite.h"//************************************//Needed for GENA#include "gena.h"#include "service_table.h"#include "miniserver.h"//*******************************************/* ********************* */#ifdef INTERNAL_WEB_SERVER#include "webserver.h"#include "urlconfig.h"#endif // INTERNAL_WEB_SERVER/* ****************** *///Mutex to synchronize the subscription handling at the client sideCLIENTONLY( ithread_mutex_t GlobalClientSubscribeMutex;     )    //Mutex to synchronize handles ( root device or control point handle)     ithread_mutex_t GlobalHndMutex;//Mutex to synchronize the uuid creation process     ithread_mutex_t gUUIDMutex;     TimerThread gTimerThread;     ThreadPool gRecvThreadPool;     ThreadPool gSendThreadPool;//Flag to indicate the state of web server     WebServerState bWebServerState = WEB_SERVER_DISABLED;// static buffer to store the local host ip address or host name     char LOCAL_HOST[LINE_SIZE];// local port for the mini-server     unsigned short LOCAL_PORT;// UPnP device and control point handle table      void *HandleTable[NUM_HANDLE];//This structure is for virtual directory callbacks     struct UpnpVirtualDirCallbacks virtualDirCallback;// a local dir which serves as webserver root     extern membuffer gDocumentRootDir;// Maximum content-length that the SDK will process on an incoming packet. // Content-Length exceeding this size will be not processed and error 413 // (HTTP Error Code) will be returned to the remote end point.     int g_maxContentLength = DEFAULT_SOAP_CONTENT_LENGTH;// Global variable to denote the state of Upnp SDK //    = 0 if uninitialized, = 1 if initialized.     int UpnpSdkInit = 0;// Global variable to denote the state of Upnp SDK device registration.// = 0 if unregistered, = 1 if registered.     int UpnpSdkDeviceRegistered = 0;// Global variable to denote the state of Upnp SDK client registration.// = 0 if unregistered, = 1 if registered.     int UpnpSdkClientRegistered = 0;/**************************************************************************** * Function: UpnpInit * *  Parameters:		 *		IN const char * HostIP: Local IP Address *		IN short DestPort: Local Port to listen for incoming connections *  Description: *      Initializes  *		 - Mutex objects,  *		 - Handle Table *		 - Thread Pool and Thread Pool Attributes *		 - MiniServer(starts listening for incoming requests)  *				and WebServer (Sends request to the  *		        Upper Layer after HTTP Parsing) *		 - Checks for IP Address passed as an argument. IF NULL,  *                 gets local host name *		 - Sets GENA and SOAP Callbacks. *		 - Starts the timer thread. * *  Returns: *      UPNP_E_SUCCESS on success, nonzero on failure. *      UPNP_E_INIT_FAILED if Initialization fails. *      UPNP_E_INIT if UPnP is already initialized *****************************************************************************/     int UpnpInit( IN const char *HostIP,                   IN unsigned short DestPort ){    int retVal = 0;    ThreadPoolAttr attr;    if( UpnpSdkInit == 1 ) {        // already initialized        return UPNP_E_INIT;    }    membuffer_init( &gDocumentRootDir );    srand( time( NULL ) );      // needed by SSDP or other parts    DBGONLY( if( InitLog(  ) != UPNP_E_SUCCESS )             return UPNP_E_INIT_FAILED; );    DBGONLY( UpnpPrintf             ( UPNP_INFO, API, __FILE__, __LINE__, "Inside UpnpInit \n" );         )        //initialize mutex        if( ithread_mutex_init( &GlobalHndMutex, NULL ) != 0 ) {        return UPNP_E_INIT_FAILED;    }    if( ithread_mutex_init( &gUUIDMutex, NULL ) != 0 ) {        return UPNP_E_INIT_FAILED;    }    //initialize subscribe mutex    CLIENTONLY( if                ( ithread_mutex_init( &GlobalClientSubscribeMutex, NULL )                  != 0 ) {                return UPNP_E_INIT_FAILED;}     )        HandleLock(  );    if( HostIP != NULL )        strcpy( LOCAL_HOST, HostIP );    else {        if( getlocalhostname( LOCAL_HOST ) != UPNP_E_SUCCESS ) {            HandleUnlock(  );            return UPNP_E_INIT_FAILED;        }    }    if( UpnpSdkInit != 0 ) {        HandleUnlock(  );        return UPNP_E_INIT;    }    InitHandleList(  );    HandleUnlock(  );    TPAttrInit( &attr );    TPAttrSetMaxThreads( &attr, MAX_THREADS );    TPAttrSetMinThreads( &attr, MIN_THREADS );    TPAttrSetJobsPerThread( &attr, JOBS_PER_THREAD );    TPAttrSetIdleTime( &attr, THREAD_IDLE_TIME );    if( ThreadPoolInit( &gSendThreadPool, &attr ) != UPNP_E_SUCCESS ) {        UpnpSdkInit = 0;        UpnpFinish(  );        return UPNP_E_INIT_FAILED;    }    if( ThreadPoolInit( &gRecvThreadPool, &attr ) != UPNP_E_SUCCESS ) {        UpnpSdkInit = 0;        UpnpFinish(  );        return UPNP_E_INIT_FAILED;    }    UpnpSdkInit = 1;#if EXCLUDE_SOAP == 0    DEVICEONLY( SetSoapCallback( soap_device_callback );         );#endif#if EXCLUDE_GENA == 0    SetGenaCallback( genaCallback );#endif    if( ( retVal = TimerThreadInit( &gTimerThread,                                    &gSendThreadPool ) ) !=        UPNP_E_SUCCESS ) {        UpnpSdkInit = 0;        UpnpFinish(  );        return retVal;    }#if EXCLUDE_MINISERVER == 0    if( ( retVal = StartMiniServer( DestPort ) ) <= 0 ) {        DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,                             "Miniserver failed to start" );             )            UpnpFinish(  );        UpnpSdkInit = 0;        if( retVal != -1 )            return retVal;        else                    // if miniserver is already running for unknown reasons!            return UPNP_E_INIT_FAILED;    }#endif    DestPort = retVal;    LOCAL_PORT = DestPort;#if EXCLUDE_WEB_SERVER == 0    if( ( retVal =          UpnpEnableWebserver( WEB_SERVER_ENABLED ) ) != UPNP_E_SUCCESS ) {        UpnpFinish(  );        UpnpSdkInit = 0;        return retVal;    }#endif    DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,                         "Host Ip: %s Host Port: %d\n", LOCAL_HOST,                         LOCAL_PORT ) );    DBGONLY( UpnpPrintf             ( UPNP_INFO, API, __FILE__, __LINE__, "Exiting UpnpInit \n" );         )        return UPNP_E_SUCCESS;} /***************** end of UpnpInit ******************//**************************************************************************** * Function: UpnpFinish * *  Parameters:	NONE * *  Description: *      Checks for pending jobs and threads  *		Unregisters either the client or device  *		Shuts down the Timer Thread *		Stops the Mini Server *		Uninitializes the Thread Pool *		For Win32 cleans up Winsock Interface  *		Cleans up mutex objects * *  Return Values: *      UPNP_E_SUCCESS on success, nonzero on failure. *****************************************************************************/intUpnpFinish(  ){    DEVICEONLY( UpnpDevice_Handle device_handle;         )        CLIENTONLY( UpnpClient_Handle client_handle;         )    struct Handle_Info *temp;    DBGONLY( ThreadPoolStats stats;         )        if( UpnpSdkInit != 1 )        return UPNP_E_FINISH;    DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,                         "Inside UpnpFinish : UpnpSdkInit is :%d:\n",                         UpnpSdkInit ); if( UpnpSdkInit == 1 ) {             UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,                         "UpnpFinish : UpnpSdkInit is ONE\n" );}             ThreadPoolGetStats( &gRecvThreadPool, &stats );             UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,                         "Recv Thread Pool \n High Jobs pending = %d"                         " \nMed Jobs Pending = %d\n Low Jobs Pending = %d \nWorker Threads"                         " = %d\nIdle Threads = %d\nPersistent Threads = %d\nAverage Time "                         "spent in High Q = %lf\nAverage Time spent in Med Q = %lf\nAverage"                         " Time spent in Low Q = %lf\nMax Threads Used: %d\nTotal Work Time"                         "= %lf\nTotal Idle Time = %lf\n",                         stats.currentJobsHQ, stats.currentJobsMQ,                         stats.currentJobsLQ, stats.persistentThreads,                         stats.avgWaitHQ, stats.avgWaitMQ, stats.avgWaitLQ,                         stats.maxThreads, stats.totalWorkTime,                         stats.totalIdleTime );             ThreadPoolGetStats( &gSendThreadPool, &stats );             UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,                         "Send Thread Pool \n High Jobs pending = %d"                         " \nMed Jobs Pending = %d\n Low Jobs Pending = %d \nWorker Threads"                         " = %d\nIdle Threads = %d\nPersistent Threads = %d\nAverage Time "                         "spent in High Q = %lf\nAverage Time spent in Med Q = %lf\nAverage"                         " Time spent in Low Q = %lf\nMax Threads Used: %d\nTotal Work Time"                         "= %lf\nTotal Idle Time = %lf\n",                         stats.currentJobsHQ, stats.currentJobsMQ,                         stats.currentJobsLQ, stats.persistentThreads,                         stats.avgWaitHQ, stats.avgWaitMQ, stats.avgWaitLQ,                         stats.maxThreads, stats.totalWorkTime,                         stats.totalIdleTime ); )#ifdef INCLUDE_DEVICE_APIS        if( GetDeviceHandleInfo( &device_handle, &temp ) == HND_DEVICE )            UpnpUnRegisterRootDevice( device_handle );#endif#ifdef INCLUDE_CLIENT_APIS    if( GetClientHandleInfo( &client_handle, &temp ) == HND_CLIENT )        UpnpUnRegisterClient( client_handle );#endif    TimerThreadShutdown( &gTimerThread );    StopMiniServer(  );#if EXCLUDE_WEB_SERVER == 0    web_server_destroy(  );#endif    ThreadPoolShutdown( &gSendThreadPool );    ThreadPoolShutdown( &gRecvThreadPool );    DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Exiting UpnpFinish : UpnpSdkInit is :%d:\n", UpnpSdkInit ); ThreadPoolGetStats( &gRecvThreadPool, &stats ); UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Recv Thread Pool \n High Jobs pending = %d" " \nMed Jobs Pending = %d\n Low Jobs Pending = %d \nWorker Threads" " = %d\nIdle Threads = %d\nPersistent Threads = %d\nAverage Time " "spent in High Q = %lf\nAverage Time spent in Med Q = %lf\nAverage" " Time spent in Low Q = %lf\nMax Threads Used: %d\nTotal Work Time" "= %lf\nTotal Idle Time = %lf\n", stats.currentJobsHQ, stats.currentJobsMQ, stats.currentJobsLQ, stats.persistentThreads, stats.avgWaitHQ, stats.avgWaitMQ, stats.avgWaitLQ, stats.maxThreads, stats.totalWorkTime, stats.totalIdleTime ); ThreadPoolGetStats( &gSendThreadPool, &stats ); UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Send Thread Pool \n High Jobs pending = %d" " \nMed Jobs Pending = %d\n Low Jobs Pending = %d \nWorker Threads" " = %d\nIdle Threads = %d\nPersistent Threads = %d\nAverage Time " "spent in High Q = %lf\nAverage Time spent in Med Q = %lf\nAverage" " Time spent in Low Q = %lf\nMax Threads Used: %d\nTotal Work Time" "= %lf\nTotal Idle Time = %lf\n", stats.currentJobsHQ, stats.currentJobsMQ, stats.currentJobsLQ, stats.persistentThreads, stats.avgWaitHQ, stats.avgWaitMQ, stats.avgWaitLQ, stats.maxThreads, stats.totalWorkTime, stats.totalIdleTime ); )   // DBGONLY        DBGONLY( CloseLog(  );         );    CLIENTONLY( ithread_mutex_destroy( &GlobalClientSubscribeMutex );         )        ithread_mutex_destroy( &GlobalHndMutex );    ithread_mutex_destroy( &gUUIDMutex );    // remove all virtual dirs    UpnpRemoveAllVirtualDirs(  );    UpnpSdkInit = 0;    return UPNP_E_SUCCESS;}  /********************* End of  UpnpFinish  *************************//**************************************************************************** * Function: UpnpGetServerPort * *  Parameters:	NONE * *  Description: *      Gives back the miniserver port. * *  Return Values: *      local port on success, zero on failure. *****************************************************************************/unsigned shortUpnpGetServerPort( void ){    if( UpnpSdkInit != 1 )        return 0;    return LOCAL_PORT;}/*************************************************************************** * Function: UpnpGetServerIpAddress * *  Parameters:	NONE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区的| 国产精品综合一区二区三区| 91麻豆国产在线观看| 国产精品日日摸夜夜摸av| 国产v综合v亚洲欧| 国产日韩欧美a| 成人国产视频在线观看| 日韩伦理av电影| 91福利精品视频| 日韩—二三区免费观看av| 日韩欧美一区二区在线视频| 美腿丝袜亚洲一区| 2022国产精品视频| 99精品国产热久久91蜜凸| 亚洲网友自拍偷拍| 精品免费日韩av| 国产成人午夜精品影院观看视频| 精品一区二区在线视频| 欧美一区二区三区四区高清| 国产精品一区在线观看你懂的| 久久综合狠狠综合| 91片黄在线观看| 日本亚洲天堂网| 日本一区二区三区久久久久久久久不 | 成人一区二区三区在线观看| 日韩理论片网站| 日韩一区二区三| 波多野洁衣一区| 婷婷久久综合九色国产成人 | 日韩一区二区免费在线电影| 精品亚洲porn| 久久精品一二三| 91国内精品野花午夜精品| 日韩主播视频在线| 日本一区二区三区在线观看| 色天天综合色天天久久| 日本中文字幕不卡| 久久激情综合网| 欧美日韩精品一区二区| 国产精品视频免费| 国产精品小仙女| 亚洲一区二区三区在线看| 久久色.com| 欧美日韩一二三区| 不卡的av在线播放| 久久国产精品第一页| 亚洲欧美视频一区| 久久综合狠狠综合久久综合88 | 美国十次综合导航| 亚洲精品国产无天堂网2021| 久久综合色婷婷| 欧美精品乱人伦久久久久久| gogo大胆日本视频一区| 麻豆久久久久久久| 亚洲国产成人精品视频| 中文字幕中文字幕在线一区| 日韩三级中文字幕| 在线影视一区二区三区| 高清视频一区二区| 精品一区二区免费| 婷婷综合久久一区二区三区| 专区另类欧美日韩| 国产精品免费视频一区| 久久先锋影音av鲁色资源网| 制服丝袜中文字幕一区| 日本伦理一区二区| 91麻豆成人久久精品二区三区| 国产高清精品在线| 卡一卡二国产精品 | 亚洲色图20p| 国产精品全国免费观看高清| 久久色在线观看| 欧美精品一区二区三| 日韩三级精品电影久久久| 欧美欧美欧美欧美| 欧美妇女性影城| 欧美猛男超大videosgay| 欧洲中文字幕精品| 欧美亚洲一区二区三区四区| 99精品国产视频| 91免费视频观看| 色哦色哦哦色天天综合| 91亚洲国产成人精品一区二区三| fc2成人免费人成在线观看播放 | 日韩欧美国产一区二区在线播放| 欧美日韩一区二区三区在线看| 欧美四级电影网| 欧美精品亚洲二区| 日韩欧美一二三区| 久久色.com| 国产精品久久久久久妇女6080 | 亚洲精品视频在线看| 亚洲免费av在线| 亚洲一区二区三区激情| 日韩国产在线观看一区| 美腿丝袜亚洲综合| 国产精品一区二区三区网站| 成人一区二区三区| 一本色道亚洲精品aⅴ| 欧美日韩中文字幕一区| 91麻豆精品国产91久久久更新时间 | 91麻豆精品国产无毒不卡在线观看 | 中文字幕av不卡| 亚洲婷婷国产精品电影人久久| 亚洲午夜一二三区视频| 麻豆视频一区二区| 岛国一区二区在线观看| 色嗨嗨av一区二区三区| 91精品黄色片免费大全| 久久九九99视频| 一区二区三区国产精华| 麻豆成人综合网| eeuss鲁片一区二区三区| 欧美综合久久久| 久久综合九色综合97_久久久| 国产精品高潮久久久久无| 亚洲成人av电影在线| 国产麻豆成人精品| 色综合天天综合网国产成人综合天 | 国产一区二区三区| 色偷偷一区二区三区| 欧美mv日韩mv国产网站| 亚洲丝袜美腿综合| 激情五月激情综合网| 91老师国产黑色丝袜在线| 欧美一区二区三区免费大片| 国产精品伦理一区二区| 免费成人结看片| www.日韩精品| 欧美va天堂va视频va在线| 亚洲精选免费视频| 国产成人免费av在线| 欧美二区乱c少妇| 亚洲欧洲av另类| 国产在线精品一区二区不卡了 | 国产精品三级在线观看| 美女诱惑一区二区| 91在线视频播放地址| 精品国产乱码久久久久久影片| 一区二区三区精品| 成人精品鲁一区一区二区| 制服丝袜亚洲网站| 亚洲一区在线视频| av午夜精品一区二区三区| 精品国产第一区二区三区观看体验| 亚洲老妇xxxxxx| 成人午夜电影久久影院| 日韩欧美三级在线| 日韩精品一二三区| 欧美综合亚洲图片综合区| 国产精品久久久久久久久晋中| 狠狠色综合播放一区二区| 欧美日韩免费不卡视频一区二区三区| 国产精品久久久久久久蜜臀 | 成人黄色电影在线| 久久久午夜精品理论片中文字幕| 舔着乳尖日韩一区| 欧美日韩国产一二三| 亚洲自拍都市欧美小说| 色视频成人在线观看免| 亚洲欧美日韩电影| aaa欧美色吧激情视频| 欧美国产日韩一二三区| 国产精品一区2区| 久久久久久亚洲综合| 国产自产2019最新不卡| 欧美mv日韩mv亚洲| 国产呦萝稀缺另类资源| 精品粉嫩aⅴ一区二区三区四区| 免费成人小视频| 欧美变态口味重另类| 国产综合久久久久久久久久久久| 精品国精品自拍自在线| 国产真实乱对白精彩久久| 欧美成人精品1314www| 精品一区二区三区免费毛片爱| 精品美女在线播放| 国产麻豆视频精品| 国产精品丝袜一区| 成人av动漫网站| 亚洲蜜臀av乱码久久精品| 欧洲亚洲精品在线| 免费在线欧美视频| 久久众筹精品私拍模特| 国产成人精品三级| 国产精品二区一区二区aⅴ污介绍| av不卡免费电影| 亚洲国产精品欧美一二99| 欧美精品乱人伦久久久久久| 精品在线播放午夜| 亚洲国产精品高清| 欧美伊人久久大香线蕉综合69 | 夜夜嗨av一区二区三区四季av| 欧美日韩一区二区三区不卡| 日本特黄久久久高潮| 国产视频一区在线观看| 91老师片黄在线观看| 日本欧美肥老太交大片| 国产亚洲欧洲997久久综合 | 欧美综合天天夜夜久久|