⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upnpapi.c

📁 upnpsdk-1.0.4.tar.gz Intel UPnP SDK Source
💻 C
📖 第 1 页 / 共 5 页
字号:
    {        HandleUnlock();        return UPNP_E_INVALID_SERVICE;    }        HandleUnlock();    retVal = genaNotifyAllExt(Hnd,DevID,ServName,PropSet);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpNotify \n");)    return retVal;}  /****************** End of UpnpNotify *********************/#endif // INCLUDE_DEVICE_APIS#ifdef INCLUDE_DEVICE_APISint UpnpAcceptSubscription(IN UpnpDevice_Handle Hnd ,    IN const char *DevID_const,    IN const char *ServName_const,    IN const char ** VarName_const,    IN const char ** NewVal_const,    int cVariables,    IN Upnp_SID SubsId){    struct Handle_Info *SInfo=NULL;     int retVal;    char *DevID = (char *)DevID_const;    char *ServName = (char *)ServName_const;    char **VarName = (char **)VarName_const;    char **NewVal = (char **)NewVal_const;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpAcceptSubscription \n");)    HandleLock();    if(GetHandleInfo(Hnd, &SInfo) != HND_DEVICE)     {        HandleUnlock();        return UPNP_E_INVALID_HANDLE;    }    if (DevID == NULL)    {        HandleUnlock();        return UPNP_E_INVALID_SERVICE;    }    if (ServName == NULL)    {        HandleUnlock();        return UPNP_E_INVALID_SERVICE;    }    if (SubsId == NULL)    {        HandleUnlock();        return UPNP_E_INVALID_SID;    }    if (VarName == NULL || NewVal == NULL || cVariables < 0)    {        HandleUnlock();        return UPNP_E_INVALID_PARAM;    }        HandleUnlock();    retVal = genaInitNotify(Hnd,DevID,ServName, VarName, NewVal, cVariables,                             SubsId);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpAcceptSubscription \n");)    return retVal;}  /****************** End of UpnpAcceptSubscription *********************/int UpnpAcceptSubscriptionExt(IN UpnpDevice_Handle Hnd ,    IN const char *DevID_const,    IN const char *ServName_const,    IN Upnp_Document PropSet,    IN Upnp_SID SubsId){    struct Handle_Info *SInfo=NULL;     int retVal;    char *DevID = (char *)DevID_const;    char *ServName = (char *)ServName_const;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpAcceptSubscription \n");)    HandleLock();    if(GetHandleInfo(Hnd, &SInfo) != HND_DEVICE)     {        HandleUnlock();        return UPNP_E_INVALID_HANDLE;    }    if (DevID == NULL)    {        HandleUnlock();        return UPNP_E_INVALID_SERVICE;    }    if (ServName == NULL)    {        HandleUnlock();        return UPNP_E_INVALID_SERVICE;    }    if (SubsId == NULL)    {        HandleUnlock();        return UPNP_E_INVALID_SID;    }    if (PropSet == NULL)    {        HandleUnlock();        return UPNP_E_INVALID_PARAM;    }        HandleUnlock();    retVal = genaInitNotifyExt(Hnd,DevID,ServName,PropSet,SubsId);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpAcceptSubscription \n");)    return retVal;}  /****************** End of UpnpAcceptSubscription *********************/#endif // INCLUDE_DEVICE_APIS#endif // EXCLUDE_GENA == 0//-----------------------------------------------------------------------------////                                   SOAP interface ////-----------------------------------------------------------------------------#if EXCLUDE_SOAP == 0#ifdef INCLUDE_CLIENT_APISint UpnpSendAction( IN UpnpClient_Handle Hnd,    IN const char *ActionURL_const,    IN const char *ServiceType_const,    IN const char *DevUDN_const,    IN Upnp_Document Action,    OUT Upnp_Document *RespNodePtr){    struct Handle_Info * SInfo=NULL;     int retVal = 0;    char *ActionURL = (char *)ActionURL_const;    char *ServiceType = (char *)ServiceType_const;    //char *DevUDN = (char *)DevUDN_const;  // udn not used?    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpSendAction \n");)    HandleLock();    if(GetHandleInfo(Hnd, &SInfo) != HND_CLIENT)     {        HandleUnlock();        return UPNP_E_INVALID_HANDLE;    }    HandleUnlock();    if (ActionURL == NULL)    {        return UPNP_E_INVALID_URL;    }        if (ServiceType == NULL || Action == NULL || RespNodePtr == NULL)    {        return UPNP_E_INVALID_PARAM;    }        retVal = SoapSendAction(ActionURL, ServiceType, Action,                             RespNodePtr);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpSendAction \n");)    return retVal;}  /****************** End of UpnpSendAction *********************/ // INCLUDE_CLIENT_APISint UpnpSendActionAsync(IN UpnpClient_Handle Hnd,    IN const char *ActionURL_const,    IN const char *ServiceType_const,    IN const char * DevUDN_const,    IN Upnp_Document Act,    IN Upnp_FunPtr Fun,    IN const void * Cookie_const){    struct Handle_Info * SInfo=NULL;     struct UpnpNonblockParam  * Param;    Upnp_DOMString tmpStr;    char *ActionURL = (char *)ActionURL_const;    char *ServiceType = (char *)ServiceType_const;    //char *DevUDN = (char *)DevUDN_const;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpSendActionAsync \n");)    HandleLock();    if(GetHandleInfo(Hnd, &SInfo) != HND_CLIENT)     {        HandleUnlock();        return UPNP_E_INVALID_HANDLE;    }    HandleUnlock();    if (ActionURL == NULL)    {        return UPNP_E_INVALID_URL;    }        if (ServiceType == NULL || Act == NULL || Fun == NULL)    {        return UPNP_E_INVALID_PARAM;    }        tmpStr = UpnpNewPrintDocument(Act);    if (tmpStr == NULL)    {        return UPNP_E_INVALID_ACTION;    }        Param = (struct UpnpNonblockParam*)malloc(sizeof(struct UpnpNonblockParam));    if (Param == NULL)         return UPNP_E_OUTOF_MEMORY;    Param->FunName = ACTION;    Param->Handle = Hnd;    strcpy(Param->Url,ActionURL);     strcpy(Param->ServiceType,ServiceType);    Param->Act = UpnpParse_Buffer(tmpStr);    free(tmpStr);    Param->Cookie = (void*) Cookie_const;    Param->Fun = Fun;    tpool_Schedule((void *) UpnpThreadDistribution, Param);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpSendActionAsync \n");)    return  UPNP_E_SUCCESS;}  /****************** End of UpnpSendActionAsync *********************/int UpnpGetServiceVarStatusAsync(IN UpnpClient_Handle Hnd,    IN const char *ActionURL_const,    IN const char *VarName_const,    IN Upnp_FunPtr Fun,    IN const void * Cookie_const    ){    struct Handle_Info * SInfo=NULL;     struct UpnpNonblockParam * Param;    char *ActionURL = (char *)ActionURL_const;    char *VarName = (char *)VarName_const;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpGetServiceVarStatusAsync \n");)    HandleLock();    if(GetHandleInfo(Hnd, &SInfo) != HND_CLIENT)    {        HandleUnlock();        return UPNP_E_INVALID_HANDLE;    }    HandleUnlock();    if (ActionURL == NULL)    {        return UPNP_E_INVALID_URL;    }        if (VarName == NULL || Fun == NULL )         return UPNP_E_INVALID_PARAM;    Param = (struct UpnpNonblockParam*)malloc(sizeof(struct UpnpNonblockParam));    if (Param == NULL)         return UPNP_E_OUTOF_MEMORY;    Param->FunName = STATUS;    Param->Handle = Hnd;    strcpy(Param->Url,ActionURL);         strcpy(Param->VarName,VarName);             Param->Fun = Fun;    Param->Cookie = (void*) Cookie_const;    tpool_Schedule((void *) UpnpThreadDistribution, Param);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpGetServiceVarStatusAsync \n");)    return  UPNP_E_SUCCESS;}  /****************** End of UpnpGetServiceVarStatusAsync ****************/int UpnpGetServiceVarStatus(IN UpnpClient_Handle Hnd,    IN const char *ActionURL_const,    IN const char *VarName_const,    OUT Upnp_DOMString* StVar){    struct Handle_Info * SInfo=NULL;     int retVal = 0;    char *StVarPtr;    char *ActionURL = (char *)ActionURL_const;    char *VarName = (char *)VarName_const;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpGetServiceVarStatus \n");)    HandleLock();    if(GetHandleInfo(Hnd, &SInfo) != HND_CLIENT)     {        HandleUnlock();        return UPNP_E_INVALID_HANDLE;    }    HandleUnlock();    if (ActionURL == NULL)    {        return UPNP_E_INVALID_URL;    }        if (VarName == NULL || StVar == NULL )         return UPNP_E_INVALID_PARAM;    retVal = SoapGetServiceVarStatus(ActionURL, VarName, &StVarPtr);     *StVar = StVarPtr;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpGetServiceVarStatus \n");)    return retVal;}  /****************** End of UpnpGetServiceVarStatus *********************/#endif // INCLUDE_CLIENT_APIS#endif // EXCLUDE_SOAP//-----------------------------------------------------------------------------////                                   Client API's ////-----------------------------------------------------------------------------int UpnpDownloadUrlItem( const char *url_const,    char **outBuf, char *contentType){    char *tmpBuf;    int retVal = 0, bufLen = 0;    http_message msgBuf;    token ctBuf;    char *url = (char *)url_const;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpDownloadUrlItem \n");)    if (url == NULL || outBuf == NULL || contentType == NULL)        return UPNP_E_INVALID_PARAM;    if (contentType !=  NULL)        strcpy(contentType,"");        if ((retVal = transferHTTP("GET", "\r\n", 2,&tmpBuf, url)) != HTTP_SUCCESS)    {        return retVal;    }    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"UpnpDownloadUrlItem: tmpBuf is = %s\n",tmpBuf);            UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"************************END OF OUTBUF**************************\n");)    bufLen = strlen(tmpBuf);    if ((retVal = parse_http_response(tmpBuf, &msgBuf, bufLen)) != HTTP_SUCCESS)    {        free(tmpBuf);        return retVal;    }    if (msgBuf.content.size == 0)    {    DBGONLY(    UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"UpnpDownloadUrlItem: Content Size is ZERO\n");    //UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"UpnpDownloadUrlItem: Printing msgBuf.content.buff |%s| and the ptr is |%x|\n", msgBuf.content.buff, msgBuf.content.buff);    msgBuf.content.buff = NULL;    //UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"UpnpDownloadUrlItem: Printing msgBuf.content.buff |%s| and the ptr is |%x|\n", msgBuf.content.buff, msgBuf.content.buff);    )        free(tmpBuf);        return UPNP_E_INVALID_URL;    }    if (strncasecmp(msgBuf.status.status_code.buff, "200", strlen("200")))    {        free(tmpBuf);        DBGONLY(        UpnpPrintf(UPNP_CRITICAL,API,__FILE__,__LINE__,"UpnpDownloadUrlItem: HTTP ERROR IN GETTING THE DOC\n");        print_token(&msgBuf.status.status_code,UPNP_CRITICAL,API,__FILE__,__LINE__);)        return UPNP_E_INVALID_URL;    }    (*outBuf) = (char *) malloc (msgBuf.content.size + 1);    if (*outBuf == NULL)    {#if 1  // WONSOO			free(tmpBuf);#endif        return UPNP_E_OUTOF_MEMORY;    }    strcpy(*outBuf, msgBuf.content.buff);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"UpnpDownloadUrlItem: copied the buffer\n");)    if (search_for_header(&msgBuf,"Content-Type",&ctBuf))        strncpy(contentType, ctBuf.buff, LINE_SIZE - 1 > ctBuf.size ?                 ctBuf.size : LINE_SIZE - 1);    DBGONLY(    UpnpPrintf(UPNP_PACKET,API,__FILE__,__LINE__,"UpnpDownloadUrlItem: OutBuf is = %s\n",*outBuf);    UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"************************END OF OUTBUF**************************\n");)    free_http_message(&msgBuf); // free the headers inside msgBuf    free(tmpBuf);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Exiting UpnpDownloadUrlItem \n");)    return UPNP_E_SUCCESS;}  /****************** End of UpnpDownloadUrlItem *********************/int UpnpDownloadXmlDoc(const char *url_const,    Upnp_Document *xmlDoc){    char *xmlBuf = NULL;    char contentType[LINE_SIZE] = "";    int retVal = 0;    char *url = (char *)url_const;    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Inside UpnpDownloadXmlDoc \n");)    if (url == NULL || xmlDoc == NULL)    {        return UPNP_E_INVALID_PARAM;    }    if ((retVal = UpnpDownloadUrlItem(url, &xmlBuf, contentType)) !=          UPNP_E_SUCCESS)    {        return retVal;    }    if (strncasecmp(contentType, "text/xml",strlen("text/xml")))    {        free(xmlBuf);        return UPNP_E_INVALID_DESC;    }        DBGONLY(    UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Got the Xml file . \n  %s ", xmlBuf);    UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"********************* END OF XML FILE*******************\n");    UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Going to parse it\n");)    *xmlDoc = UpnpParse_Buffer(xmlBuf);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"Going to free xmlBuf \n");)    free(xmlBuf);    DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"xmlBuf FREED\n");)    if (*xmlDoc == NULL)    {        DBGONLY(UpnpPrintf(UPNP_CRITICAL,API,__FILE__,__LINE__,"Invalid desc\n");)        return UPNP_E_INVALID_DESC;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -