📄 sample_util.c
字号:
} break; case UPNP_DISCOVERY_SEARCH_TIMEOUT: // Nothing to print out here break; /* SOAP */ case UPNP_CONTROL_ACTION_REQUEST: { struct Upnp_Action_Request *a_event = ( struct Upnp_Action_Request * )Event; char *xmlbuff = NULL; SampleUtil_Print( "ErrCode = %d\n", a_event->ErrCode ); SampleUtil_Print( "ErrStr = %s\n", a_event->ErrStr ); SampleUtil_Print( "ActionName = %s\n", a_event->ActionName ); SampleUtil_Print( "UDN = %s\n", a_event->DevUDN ); SampleUtil_Print( "ServiceID = %s\n", a_event->ServiceID ); if( a_event->ActionRequest ) { xmlbuff = ixmlPrintDocument( a_event->ActionRequest ); if( xmlbuff ) SampleUtil_Print( "ActRequest = %s\n", xmlbuff ); if( xmlbuff ) ixmlFreeDOMString( xmlbuff ); xmlbuff = NULL; } else { SampleUtil_Print( "ActRequest = (null)\n" ); } if( a_event->ActionResult ) { xmlbuff = ixmlPrintDocument( a_event->ActionResult ); if( xmlbuff ) SampleUtil_Print( "ActResult = %s\n", xmlbuff ); if( xmlbuff ) ixmlFreeDOMString( xmlbuff ); xmlbuff = NULL; } else { SampleUtil_Print( "ActResult = (null)\n" ); } } break; case UPNP_CONTROL_ACTION_COMPLETE: { struct Upnp_Action_Complete *a_event = ( struct Upnp_Action_Complete * )Event; char *xmlbuff = NULL; SampleUtil_Print( "ErrCode = %d\n", a_event->ErrCode ); SampleUtil_Print( "CtrlUrl = %s\n", a_event->CtrlUrl ); if( a_event->ActionRequest ) { xmlbuff = ixmlPrintDocument( a_event->ActionRequest ); if( xmlbuff ) SampleUtil_Print( "ActRequest = %s\n", xmlbuff ); if( xmlbuff ) ixmlFreeDOMString( xmlbuff ); xmlbuff = NULL; } else { SampleUtil_Print( "ActRequest = (null)\n" ); } if( a_event->ActionResult ) { xmlbuff = ixmlPrintDocument( a_event->ActionResult ); if( xmlbuff ) SampleUtil_Print( "ActResult = %s\n", xmlbuff ); if( xmlbuff ) ixmlFreeDOMString( xmlbuff ); xmlbuff = NULL; } else { SampleUtil_Print( "ActResult = (null)\n" ); } } break; case UPNP_CONTROL_GET_VAR_REQUEST: { struct Upnp_State_Var_Request *sv_event = ( struct Upnp_State_Var_Request * )Event; SampleUtil_Print( "ErrCode = %d\n", sv_event->ErrCode ); SampleUtil_Print( "ErrStr = %s\n", sv_event->ErrStr ); SampleUtil_Print( "UDN = %s\n", sv_event->DevUDN ); SampleUtil_Print( "ServiceID = %s\n", sv_event->ServiceID ); SampleUtil_Print( "StateVarName= %s\n", sv_event->StateVarName ); SampleUtil_Print( "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; SampleUtil_Print( "ErrCode = %d\n", sv_event->ErrCode ); SampleUtil_Print( "CtrlUrl = %s\n", sv_event->CtrlUrl ); SampleUtil_Print( "StateVarName= %s\n", sv_event->StateVarName ); SampleUtil_Print( "CurrentVal = %s\n", sv_event->CurrentVal ); } break; /* GENA */ case UPNP_EVENT_SUBSCRIPTION_REQUEST: { struct Upnp_Subscription_Request *sr_event = ( struct Upnp_Subscription_Request * )Event; SampleUtil_Print( "ServiceID = %s\n", sr_event->ServiceId ); SampleUtil_Print( "UDN = %s\n", sr_event->UDN ); SampleUtil_Print( "SID = %s\n", sr_event->Sid ); } break; case UPNP_EVENT_RECEIVED: { struct Upnp_Event *e_event = ( struct Upnp_Event * )Event; char *xmlbuff = NULL; SampleUtil_Print( "SID = %s\n", e_event->Sid ); SampleUtil_Print( "EventKey = %d\n", e_event->EventKey ); xmlbuff = ixmlPrintDocument( e_event->ChangedVariables ); SampleUtil_Print( "ChangedVars = %s\n", xmlbuff ); ixmlFreeDOMString( xmlbuff ); xmlbuff = NULL; } break; case UPNP_EVENT_RENEWAL_COMPLETE: { struct Upnp_Event_Subscribe *es_event = ( struct Upnp_Event_Subscribe * )Event; SampleUtil_Print( "SID = %s\n", es_event->Sid ); SampleUtil_Print( "ErrCode = %d\n", es_event->ErrCode ); SampleUtil_Print( "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; SampleUtil_Print( "SID = %s\n", es_event->Sid ); SampleUtil_Print( "ErrCode = %d\n", es_event->ErrCode ); SampleUtil_Print( "PublisherURL= %s\n", es_event->PublisherUrl ); SampleUtil_Print( "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; SampleUtil_Print( "SID = %s\n", es_event->Sid ); SampleUtil_Print( "ErrCode = %d\n", es_event->ErrCode ); SampleUtil_Print( "PublisherURL= %s\n", es_event->PublisherUrl ); SampleUtil_Print( "TimeOut = %d\n", es_event->TimeOut ); } break; } SampleUtil_Print ( "----------------------------------------------------------------------\n" ); SampleUtil_Print ( "======================================================================\n\n\n\n" ); ithread_mutex_unlock( &display_mutex ); 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. * * 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 * ********************************************************************************/intSampleUtil_FindAndParseService( IN IXML_Document * DescDoc, IN char *location, IN char *serviceType, OUT char **serviceId, OUT char **eventURL, OUT char **controlURL ){ int i, length, found = 0; int ret; char *tempServiceType = NULL; char *baseURL = NULL; char *base; char *relcontrolURL = NULL, *releventURL = NULL; IXML_NodeList *serviceList = NULL; IXML_Element *service = NULL; baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" ); if( baseURL ) base = baseURL; else base = location; serviceList = SampleUtil_GetFirstServiceList( DescDoc ); length = ixmlNodeList_length( serviceList ); for( i = 0; i < length; i++ ) { service = ( IXML_Element * ) ixmlNodeList_item( serviceList, i ); tempServiceType = SampleUtil_GetFirstElementItem( ( IXML_Element * ) service, "serviceType" ); if( strcmp( tempServiceType, serviceType ) == 0 ) { SampleUtil_Print( "Found service: %s\n", serviceType ); *serviceId = SampleUtil_GetFirstElementItem( service, "serviceId" ); SampleUtil_Print( "serviceId: %s\n", ( *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 ) SampleUtil_Print ( "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 ) SampleUtil_Print ( "Error generating eventURL from %s + %s\n", base, releventURL ); } if( relcontrolURL ) free( relcontrolURL ); if( releventURL ) free( releventURL ); relcontrolURL = releventURL = NULL; found = 1; break; } if( tempServiceType ) free( tempServiceType ); tempServiceType = NULL; } if( tempServiceType ) free( tempServiceType ); if( serviceList ) ixmlNodeList_free( serviceList ); if( baseURL ) free( baseURL ); return ( found );}// printf wrapper for portable codeintuprint1( char *fmt, ... ){ va_list ap; char *buf = NULL; int size; va_start( ap, fmt ); size = vsnprintf( buf, 0, fmt, ap ); va_end( ap ); if( size > 0 ) { buf = ( char * )malloc( size + 1 ); if( vsnprintf( buf, size + 1, fmt, ap ) != size ) { free( buf ); buf = NULL; } } if( buf ) { ithread_mutex_lock( &display_mutex ); if( gPrintFun ) gPrintFun( buf ); ithread_mutex_unlock( &display_mutex ); free( buf ); } return size;}/******************************************************************************** * SampleUtil_Print * * Description: * Provides platform-specific print functionality. This function should be * called when you want to print content suitable for console output (i.e., * in a large text box or on a screen). If your device/operating system is * not supported here, you should add a port. * * Parameters: * Same as printf() * ********************************************************************************/intSampleUtil_Print( char *fmt, ... ){ va_list ap; char buf[200]; int rc; va_start( ap, fmt ); rc = vsnprintf( buf, 200, fmt, ap ); va_end( ap ); ithread_mutex_lock( &display_mutex ); if( gPrintFun ) gPrintFun( buf ); ithread_mutex_unlock( &display_mutex ); return rc;}/******************************************************************************** * SampleUtil_StateUpdate * * Description: * * Parameters: * ********************************************************************************/voidSampleUtil_StateUpdate( const char *varName, const char *varValue, const char *UDN, eventType type ){ if( gStateUpdateFun ) gStateUpdateFun( varName, varValue, UDN, type ); // TBD: Add mutex here?}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -