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

📄 service_table.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 3 页
字号:
/*************************************************************************	Function :	FindServiceControlURLPath**	Parameters :*		service_table * table ;	service table*		char * controlURLPath ;	control URL path used to find a service *								from the table  **	Description :	Traverses the service table and finds the node whose*		control URL Path matches a know value **	Return : service_info * - pointer to the service list node from the *		service table whose control URL Path matches a known value;**	Note :************************************************************************/service_info *FindServiceControlURLPath( service_table * table,                           char *controlURLPath ){    service_info *finger = NULL;    uri_type parsed_url;    uri_type parsed_url_in;    if( ( table )        &&        ( parse_uri          ( controlURLPath, strlen( controlURLPath ),            &parsed_url_in ) ) ) {        finger = table->serviceList;        while( finger ) {            if( finger->controlURL )                if( ( parse_uri                      ( finger->controlURL, strlen( finger->controlURL ),                        &parsed_url ) ) ) {                    if( !token_cmp                        ( &parsed_url.pathquery,                          &parsed_url_in.pathquery ) )                        return finger;                }            finger = finger->next;        }    }    return NULL;}/*************************************************************************	Function :	printService**	Parameters :*		service_info *service ;Service whose information is to be printed*		Dbg_Level level ; Debug level specified to the print function*		Dbg_Module module ;	Debug module specified to the print function**	Description :	For debugging purposes prints information from the *		service passed into the function.**	Return : void ;**	Note :************************************************************************/DBGONLY( void printService( service_info * service, Dbg_Level level,                            Dbg_Module module ) {         if( service ) {         if( service->serviceType )         UpnpPrintf( level, module, __FILE__, __LINE__,                     "serviceType: %s\n", service->serviceType );         if( service->serviceId )         UpnpPrintf( level, module, __FILE__, __LINE__, "serviceId: %s\n",                     service->serviceId ); if( service->SCPDURL )         UpnpPrintf( level, module, __FILE__, __LINE__, "SCPDURL: %s\n",                     service->SCPDURL ); if( service->controlURL )         UpnpPrintf( level, module, __FILE__, __LINE__, "controlURL: %s\n",                     service->controlURL ); if( service->eventURL )         UpnpPrintf( level, module, __FILE__, __LINE__, "eventURL: %s\n",                     service->eventURL ); if( service->UDN )         UpnpPrintf( level, module, __FILE__, __LINE__, "UDN: %s\n\n",                     service->UDN ); if( service->active )         UpnpPrintf( level, module, __FILE__, __LINE__,                     "Service is active\n" );         else         UpnpPrintf( level, module, __FILE__, __LINE__,                     "Service is inactive\n" );}         } )/*************************************************************************	Function :	printServiceList**	Parameters :*		service_info *service ;	Service whose information is to be printed*		Dbg_Level level ;	Debug level specified to the print function*		Dbg_Module module ;	Debug module specified to the print function**	Description :	For debugging purposes prints information of each *		service from the service table passed into the function.**	Return : void ;**	Note :************************************************************************/    DBGONLY( void printServiceList( service_info * service,                                    Dbg_Level level,                                    Dbg_Module module ) {             while( service ) {             if( service->serviceType )             UpnpPrintf( level, module, __FILE__, __LINE__,                         "serviceType: %s\n", service->serviceType );             if( service->serviceId )             UpnpPrintf( level, module, __FILE__, __LINE__,                         "serviceId: %s\n", service->serviceId );             if( service->SCPDURL )             UpnpPrintf( level, module, __FILE__, __LINE__,                         "SCPDURL: %s\n", service->SCPDURL );             if( service->controlURL )             UpnpPrintf( level, module, __FILE__, __LINE__,                         "controlURL: %s\n", service->controlURL );             if( service->eventURL )             UpnpPrintf( level, module, __FILE__, __LINE__,                         "eventURL: %s\n", service->eventURL );             if( service->UDN )             UpnpPrintf( level, module, __FILE__, __LINE__, "UDN: %s\n\n",                         service->UDN ); if( service->active )             UpnpPrintf( level, module, __FILE__, __LINE__,                         "Service is active\n" );             else             UpnpPrintf( level, module, __FILE__, __LINE__,                         "Service is inactive\n" );             service = service->next;}             } )/*************************************************************************	Function :	printServiceTable**	Parameters :*		service_table * table ;	Service table to be printed*		Dbg_Level level ;	Debug level specified to the print function*		Dbg_Module module ;	Debug module specified to the print function**	Description :	For debugging purposes prints the URL base of the table*		and information of each service from the service table passed into *		the function.**	Return : void ;**	Note :************************************************************************/    DBGONLY( void printServiceTable( service_table * table,                                     Dbg_Level level,                                     Dbg_Module module ) {             UpnpPrintf( level, module, __FILE__, __LINE__,                         "URL_BASE: %s\n", table->URLBase );             UpnpPrintf( level, module, __FILE__, __LINE__,                         "Services: \n" );             printServiceList( table->serviceList, level, module );} )/*************************************************************************	Function :	freeService**	Parameters :*		service_info *in ;	service information that is to be freed**	Description :	Free's memory allocated for the various components *		of the service entry in the service table.**	Return : void ;**	Note :************************************************************************/     void freeService( service_info * in ){    if( in ) {        if( in->serviceType )            ixmlFreeDOMString( in->serviceType );        if( in->serviceId )            ixmlFreeDOMString( in->serviceId );        if( in->SCPDURL )            free( in->SCPDURL );        if( in->controlURL )            free( in->controlURL );        if( in->eventURL )            free( in->eventURL );        if( in->UDN )            ixmlFreeDOMString( in->UDN );        if( in->subscriptionList )            freeSubscriptionList( in->subscriptionList );        in->TotalSubscriptions = 0;        free( in );    }}/*************************************************************************	Function :	freeServiceList**	Parameters :*		service_info * head ;	Head of the service list to be freed**	Description :	Free's memory allocated for the various components *		of each service entry in the service table.**	Return : void ;**	Note :************************************************************************/voidfreeServiceList( service_info * head ){    service_info *next = NULL;    while( head ) {        if( head->serviceType )            ixmlFreeDOMString( head->serviceType );        if( head->serviceId )            ixmlFreeDOMString( head->serviceId );        if( head->SCPDURL )            free( head->SCPDURL );        if( head->controlURL )            free( head->controlURL );        if( head->eventURL )            free( head->eventURL );        if( head->UDN )            ixmlFreeDOMString( head->UDN );        if( head->subscriptionList )            freeSubscriptionList( head->subscriptionList );        head->TotalSubscriptions = 0;        next = head->next;        free( head );        head = next;    }}/*************************************************************************	Function :	freeServiceTable**	Parameters :*		service_table * table ;	Service table whose memory needs to be *								freed**	Description : Free's dynamic memory in table.*		(does not free table, only memory within the structure)**	Return : void ;**	Note :************************************************************************/voidfreeServiceTable( service_table * table ){    ixmlFreeDOMString( table->URLBase );    freeServiceList( table->serviceList );    table->serviceList = NULL;    table->endServiceList = NULL;}/*************************************************************************	Function :	getElementValue**	Parameters :*		IXML_Node *node ;	Input node which provides the list of child *							nodes**	Description :	Returns the clone of the element value**	Return : DOMString ;**	Note : value must be freed with DOMString_free************************************************************************/DOMStringgetElementValue( IXML_Node * node ){    IXML_Node *child = ( IXML_Node * ) ixmlNode_getFirstChild( node );    DOMString temp = NULL;    if( ( child != 0 ) && ( ixmlNode_getNodeType( child ) == eTEXT_NODE ) ) {        temp = ixmlNode_getNodeValue( child );        return ixmlCloneDOMString( temp );    } else {        return NULL;    }}/*************************************************************************	Function :	getSubElement**	Parameters :*		const char *element_name ;	sub element name to be searched for*		IXML_Node *node ;	Input node which provides the list of child *							nodes*		IXML_Node **out ;	Ouput node to which the matched child node is*							returned.**	Description :	Traverses through a list of XML nodes to find the *		node with the known element name.**	Return : int ;*		1 - On Success*		0 - On Failure**	Note :************************************************************************/intgetSubElement( const char *element_name,               IXML_Node * node,               IXML_Node ** out ){    const DOMString NodeName = NULL;    int found = 0;    IXML_Node *child = ( IXML_Node * ) ixmlNode_getFirstChild( node );    ( *out ) = NULL;    while( ( child != NULL ) && ( !found ) ) {        switch ( ixmlNode_getNodeType( child ) ) {            case eELEMENT_NODE:                NodeName = ixmlNode_getNodeName( child );                if( !strcmp( NodeName, element_name ) ) {                    ( *out ) = child;                    found = 1;                    return found;                }                break;            default:                break;        }        child = ( IXML_Node * ) ixmlNode_getNextSibling( child );    }    return found;}/*************************************************************************	Function :	getServiceList**	Parameters :*		IXML_Node *node ;	XML node information*		service_info **end ; service added is returned to the output*							parameter*		char * URLBase ;	provides Base URL to resolve relative URL **	Description :	Returns pointer to service info after getting the *		sub-elements of the service info. **	Return : service_info * - pointer to the service info node ;**	Note :************************************************************************/service_info *getServiceList( IXML_Node * node,                service_info ** end,                char *URLBase ){    IXML_Node *serviceList = NULL;    IXML_Node *current_service = NULL;    IXML_Node *UDN = NULL;    IXML_Node *serviceType = NULL;    IXML_Node *serviceId = NULL;    IXML_Node *SCPDURL = NULL;    IXML_Node *controlURL = NULL;    IXML_Node *eventURL = NULL;    DOMString tempDOMString = NULL;

⌨️ 快捷键说明

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