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

📄 sample_util.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 2 页
字号:
            }            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 + -