📄 service_table.h
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2000-2003 Intel Corporation // All rights reserved. //// Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: //// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither name of Intel Corporation nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission.// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE./////////////////////////////////////////////////////////////////////////////#ifndef _SERVICE_TABLE#define _SERVICE_TABLE#ifdef __cplusplusextern "C" {#endif#include "config.h"#include "uri.h"#include "ixml.h"#include "upnp.h"#include <stdio.h>//#include <malloc.h>#include <time.h>#define SID_SIZE 41#ifdef INCLUDE_DEVICE_APIStypedef struct SUBSCRIPTION { Upnp_SID sid; int eventKey; int ToSendEventKey; time_t expireTime; int active; URL_list DeliveryURLs; struct SUBSCRIPTION *next;} subscription;typedef struct SERVICE_INFO { DOMString serviceType; DOMString serviceId; char *SCPDURL ; char *controlURL; char *eventURL; DOMString UDN; int active; int TotalSubscriptions; subscription *subscriptionList; struct SERVICE_INFO *next;} service_info;typedef struct SERVICE_TABLE { DOMString URLBase; service_info *serviceList; service_info *endServiceList;} service_table;/* Functions for Subscriptions *//************************************************************************* Function : copy_subscription** Parameters :* subscription *in ; Source subscription* subscription *out ; Destination subscription** Description : Makes a copy of the subscription** Return : int ;* HTTP_SUCCESS - On Sucess** Note :************************************************************************/int copy_subscription(subscription *in, subscription *out);/************************************************************************* Function : RemoveSubscriptionSID** Parameters :* Upnp_SID sid ; subscription ID* service_info * service ; service object providing the list of* subscriptions** Description : Remove the subscription represented by the* const Upnp_SID sid parameter from the service table and update * the service table.** Return : void ;** Note :************************************************************************/void RemoveSubscriptionSID(Upnp_SID sid, service_info * service);/************************************************************************* Function : GetSubscriptionSID** Parameters :* Upnp_SID sid ; subscription ID* service_info * service ; service object providing the list of* subscriptions** Description : Return the subscription from the service table * that matches const Upnp_SID sid value. ** Return : subscription * - Pointer to the matching subscription * node;** Note :************************************************************************/subscription * GetSubscriptionSID(Upnp_SID sid,service_info * service); //returns a pointer to the subscription with the SID, NULL if not foundsubscription * CheckSubscriptionSID(Upnp_SID sid,service_info * service);//returns a pointer to the first subscriptionsubscription * GetFirstSubscription(service_info *service);/************************************************************************* Function : GetNextSubscription** Parameters :* service_info * service ; service object providing the list of* subscriptions* subscription *current ; current subscription object** Description : Get current and valid subscription from the service * table.** Return : subscription * - Pointer to the next subscription node;** Note :************************************************************************/ subscription * GetNextSubscription(service_info * service, subscription *current);/************************************************************************* Function : freeSubscription** Parameters :* subscription * sub ; subscription to be freed** Description : Free's the memory allocated for storing the URL of * the subscription.** Return : void ;** Note :************************************************************************/void freeSubscription(subscription * sub);/************************************************************************* Function : freeSubscriptionList** Parameters :* subscription * head ; head of the subscription list** Description : Free's memory allocated for all the subscriptions * in the service table. ** Return : void ;** Note :************************************************************************/void freeSubscriptionList(subscription * head);/************************************************************************* Function : FindServiceId** Parameters :* service_table *table ; service table* const char * serviceId ;string representing the service id * to be found among those in the table * const char * UDN ; string representing the UDN * to be found among those in the table ** Description : Traverses through the service table and returns a * pointer to the service node that matches a known service id * and a known UDN** Return : service_info * - pointer to the matching service_info node;** Note :************************************************************************/service_info *FindServiceId( service_table * table, const char * serviceId, const char * UDN);/************************************************************************* Function : FindServiceEventURLPath** Parameters :* service_table *table ; service table* char * eventURLPath ; event URL path used to find a service * from the table ** Description : Traverses the service table and finds the node whose* event URL Path matches a know value ** Return : service_info * - pointer to the service list node from the * service table whose event URL matches a known event URL;** Note :************************************************************************/service_info * FindServiceEventURLPath( service_table *table, char * eventURLPath );/************************************************************************* 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, const char * controlURLPath);/************************************************************************* Function : printService** Parameters :* service_info *service ;Service whose information is to be printed* Upnp_LogLevel 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 :************************************************************************/#ifdef DEBUGvoid printService( service_info *service, Upnp_LogLevel level, Dbg_Module module);#elsestatic UPNP_INLINE void printService( service_info *service, Upnp_LogLevel level, Dbg_Module module) {}#endif/************************************************************************* Function : printServiceList** Parameters :* service_info *service ; Service whose information is to be printed* Upnp_LogLevel 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 :************************************************************************/#ifdef DEBUGvoid printServiceList( service_info *service, Upnp_LogLevel level, Dbg_Module module);#elsestatic UPNP_INLINE void printServiceList( service_info *service, Upnp_LogLevel level, Dbg_Module module) {}#endif/************************************************************************* Function : printServiceTable** Parameters :* service_table * table ; Service table to be printed* Upnp_LogLevel 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 :************************************************************************/#ifdef DEBUGvoid printServiceTable( service_table *table, Upnp_LogLevel level, Dbg_Module module);#elsestatic UPNP_INLINE void printServiceTable( service_table *table, Upnp_LogLevel level, Dbg_Module module) {}#endif/************************************************************************* 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);/************************************************************************* 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 :************************************************************************/void freeServiceList(service_info * head);/************************************************************************* 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 :************************************************************************/void freeServiceTable(service_table * table);/************************************************************************* Function : removeServiceTable** Parameters :* IXML_Node *node ; XML node information* service_table *in ; service table from which services will be * removed** Description : This function assumes that services for a particular * root device are placed linearly in the service table, and in the * order in which they are found in the description document* all services for this root device are removed from the list** Return : int ;** Note :************************************************************************/int removeServiceTable(IXML_Node *node, service_table *in);/************************************************************************* Function : addServiceTable** Parameters :* IXML_Node *node ; XML node information * service_table *in ; service table that will be initialized with * services* const char *DefaultURLBase ; Default base URL on which the URL * will be returned to the service list.** Description : Add Service to the table.** Return : int ;** Note :************************************************************************/int addServiceTable(IXML_Node *node, service_table *in, const char *DefaultURLBase);/************************************************************************* Function : getServiceTable** Parameters :* IXML_Node *node ; XML node information* service_table *out ; output parameter which will contain the * service list and URL * const char *DefaultURLBase ; Default base URL on which the URL * will be returned.** Description : Retrieve service from the table** Return : int ;** Note :************************************************************************/int getServiceTable(IXML_Node *node, service_table * out, const char * DefaultURLBase);/* Misc helper functions *//************************************************************************* 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************************************************************************/DOMString getElementValue(IXML_Node *node);/************************************************************************* 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 :************************************************************************/int getSubElement(const char *element_name, IXML_Node *node, IXML_Node **out);#endif /* INCLUDE_DEVICE_APIS */#ifdef __cplusplus}#endif#endif /* _SERVICE_TABLE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -