📄 sample_util.c
字号:
* Event -- The callback event structure * ********************************************************************************/int SampleUtil_PrintEvent(Upnp_EventType EventType, void *Event){ printf("\n\n\n======================================================================\n"); printf("----------------------------------------------------------------------\n"); SampleUtil_PrintEventType(EventType); switch ( EventType) { /* SSDP Stuff */ case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: case UPNP_DISCOVERY_SEARCH_RESULT: { struct Upnp_Discovery *d_event = (struct Upnp_Discovery * ) Event; printf("ErrCode = %d\n",d_event->ErrCode); printf("Expires = %d\n",d_event->Expires); printf("DeviceId = %s\n",d_event->DeviceId); printf("DeviceType = %s\n",d_event->DeviceType); printf("ServiceType = %s\n",d_event->ServiceType); //printf("ServiceVer = %s\n",d_event->ServiceVer); printf("Location = %s\n",d_event->Location); printf("OS = %s\n",d_event->Os); printf("Ext = %s\n",d_event->Ext); } break; case UPNP_DISCOVERY_SEARCH_TIMEOUT: // Nothing to print out here break; /* SOAP Stuff */ case UPNP_CONTROL_ACTION_REQUEST: { struct Upnp_Action_Request *a_event = (struct Upnp_Action_Request * ) Event; char *xmlbuff=NULL; printf("ErrCode = %d\n",a_event->ErrCode); printf("ErrStr = %s\n",a_event->ErrStr); printf("ActionName = %s\n",a_event->ActionName); printf("UDN = %s\n",a_event->DevUDN); printf("ServiceID = %s\n",a_event->ServiceID); if (a_event->ActionRequest) { xmlbuff = UpnpNewPrintDocument(a_event->ActionRequest); if (xmlbuff) printf("ActRequest = %s\n",xmlbuff); if (xmlbuff) free(xmlbuff); xmlbuff=NULL; } else { printf("ActRequest = (null)\n"); } if (a_event->ActionResult) { xmlbuff = UpnpNewPrintDocument(a_event->ActionResult); if (xmlbuff) printf("ActResult = %s\n",xmlbuff); if (xmlbuff) free(xmlbuff); xmlbuff=NULL; } else { printf("ActResult = (null)\n"); } } break; case UPNP_CONTROL_ACTION_COMPLETE: { struct Upnp_Action_Complete *a_event = (struct Upnp_Action_Complete * ) Event; char *xmlbuff=NULL; printf("ErrCode = %d\n",a_event->ErrCode); printf("CtrlUrl = %s\n",a_event->CtrlUrl); if (a_event->ActionRequest) { xmlbuff = UpnpNewPrintDocument(a_event->ActionRequest); if (xmlbuff) printf("ActRequest = %s\n",xmlbuff); if (xmlbuff) free(xmlbuff); xmlbuff=NULL; } else { printf("ActRequest = (null)\n"); } if (a_event->ActionResult) { xmlbuff = UpnpNewPrintDocument(a_event->ActionResult); if (xmlbuff) printf("ActResult = %s\n",xmlbuff); if (xmlbuff) free(xmlbuff); xmlbuff=NULL; } else { printf("ActResult = (null)\n"); } } break; case UPNP_CONTROL_GET_VAR_REQUEST: { struct Upnp_State_Var_Request *sv_event = (struct Upnp_State_Var_Request * ) Event; printf("ErrCode = %d\n",sv_event->ErrCode); printf("ErrStr = %s\n",sv_event->ErrStr); printf("UDN = %s\n",sv_event->DevUDN); printf("ServiceID = %s\n",sv_event->ServiceID); printf("StateVarName= %s\n",sv_event->StateVarName); printf("CurrentVal = %s\n",sv_event->CurrentVal); } break; case UPNP_CONTROL_GET_VAR_COMPLETE: { struct Upnp_State_Var_Complete *sv_event = (struct Upnp_State_Var_Complete * ) Event; printf("ErrCode = %d\n",sv_event->ErrCode); printf("CtrlUrl = %s\n",sv_event->CtrlUrl); printf("StateVarName= %s\n",sv_event->StateVarName); printf("CurrentVal = %s\n",sv_event->CurrentVal); } break; /* GENA Stuff */ case UPNP_EVENT_SUBSCRIPTION_REQUEST: { struct Upnp_Subscription_Request *sr_event = (struct Upnp_Subscription_Request * ) Event; printf("ServiceID = %s\n",sr_event->ServiceId); printf("UDN = %s\n",sr_event->UDN); printf("SID = %s\n",sr_event->Sid); } break; case UPNP_EVENT_RECEIVED: { struct Upnp_Event *e_event = (struct Upnp_Event * ) Event; char *xmlbuff=NULL; printf("SID = %s\n",e_event->Sid); printf("EventKey = %d\n",e_event->EventKey); xmlbuff = UpnpNewPrintDocument(e_event->ChangedVariables); printf("ChangedVars = %s\n",xmlbuff); free(xmlbuff); xmlbuff=NULL; } break; case UPNP_EVENT_RENEWAL_COMPLETE: { struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe * ) Event; printf("SID = %s\n",es_event->Sid); printf("ErrCode = %d\n",es_event->ErrCode); printf("TimeOut = %d\n",es_event->TimeOut); } break; case UPNP_EVENT_SUBSCRIBE_COMPLETE: case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: { struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe * ) Event; printf("SID = %s\n",es_event->Sid); printf("ErrCode = %d\n",es_event->ErrCode); printf("PublisherURL= %s\n",es_event->PublisherUrl); printf("TimeOut = %d\n",es_event->TimeOut); } break; case UPNP_EVENT_AUTORENEWAL_FAILED: case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe * ) Event; printf("SID = %s\n",es_event->Sid); printf("ErrCode = %d\n",es_event->ErrCode); printf("PublisherURL= %s\n",es_event->PublisherUrl); printf("TimeOut = %d\n",es_event->TimeOut); } break; } printf("----------------------------------------------------------------------\n"); printf("======================================================================\n\n\n\n"); return(0);}/******************************************************************************** * SampleUtil_FindAndParseService * * Description: * This routine finds the first occurance of a service in a DOM representation * of a description document and parses it. Note that this function currently * assumes that the eventURL and controlURL values in the service definitions * are full URLs. Relative URLs are not handled here. * * Parameters: * DescDoc -- The DOM description document * location -- The location of the description document * serviceSearchType -- The type of service to search for * serviceId -- OUT -- The service ID * eventURL -- OUT -- The event URL for the service * controlURL -- OUT -- The control URL for the service * ********************************************************************************/int SampleUtil_FindAndParseService (Upnp_Document DescDoc, char* location, char *serviceSearchType, char **serviceId, char **eventURL, char **controlURL) { int i, length, found=0; int ret; char *serviceType=NULL; char *baseURL=NULL; char *base; char *relcontrolURL=NULL, *releventURL=NULL; Upnp_NodeList serviceList=NULL; Upnp_Node service=NULL; baseURL = SampleUtil_GetFirstDocumentItem(DescDoc, "URLBase"); if (baseURL) base = baseURL; else base = location; serviceList = SampleUtil_GetFirstServiceList(DescDoc); length = UpnpNodeList_getLength(serviceList); for (i=0;i<length;i++) { service = UpnpNodeList_item(serviceList, i); serviceType = SampleUtil_GetFirstElementItem(service, "serviceType"); if (strcmp(serviceType, serviceSearchType) == 0) { printf("Found service: %s\n", serviceType); *serviceId = SampleUtil_GetFirstElementItem(service, "serviceId"); relcontrolURL = SampleUtil_GetFirstElementItem(service, "controlURL"); releventURL = SampleUtil_GetFirstElementItem(service, "eventSubURL"); *controlURL = malloc(strlen(base) + strlen(relcontrolURL) + 1); if (*controlURL) { ret = UpnpResolveURL(base, relcontrolURL, *controlURL); if (ret!=UPNP_E_SUCCESS) printf("Error generating controlURL from %s + %s\n", base, relcontrolURL); } *eventURL = malloc(strlen(base) + strlen(releventURL) + 1); if (*eventURL) { ret = UpnpResolveURL(base, releventURL, *eventURL); if (ret!=UPNP_E_SUCCESS) printf("Error generating eventURL from %s + %s\n", base, releventURL); } if (relcontrolURL) free(relcontrolURL); if (releventURL) free(releventURL); relcontrolURL = releventURL = NULL; found=1; break; } if (service) UpnpNode_free(service); service=NULL; if (serviceType) free(serviceType); serviceType=NULL; } if (service) UpnpNode_free(service); if (serviceType) free(serviceType); if (serviceList) UpnpNodeList_free(serviceList); if (baseURL) free(baseURL); return(found);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -