📄 upnpapi.c
字号:
{ 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 + -