📄 gena.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 _GENA_#define _GENA_#include "config.h"#include "service_table.h"#include "miniserver.h"#include "uri.h"#include "upnp.h"#include <time.h>#include "ThreadPool.h"#include <string.h>#include "client_table.h"#include "httpparser.h"#include "sock.h"#ifdef __cplusplus#define EXTERN_C extern "C"#else #ifndef EXTERN_C #define EXTERN_C #endif#endif#define XML_VERSION "<?xml version='1.0' encoding='ISO-8859-1' ?>\n"#define XML_PROPERTYSET_HEADER \ "<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">\n"#define UNABLE_MEMORY "HTTP/1.1 500 Internal Server Error\r\n\r\n"#define UNABLE_SERVICE_UNKNOWN "HTTP/1.1 404 Not Found\r\n\r\n"#define UNABLE_SERVICE_NOT_ACCEPT \ "HTTP/1.1 503 Service Not Available\r\n\r\n"#define NOT_IMPLEMENTED "HTTP/1.1 501 Not Implemented\r\n\r\n"#define BAD_REQUEST "HTTP/1.1 400 Bad Request\r\n\r\n"#define INVALID_NT BAD_CALLBACK#define BAD_CALLBACK "HTTP/1.1 412 Precondition Failed\r\n\r\n" #define HTTP_OK_CRLF "HTTP/1.1 200 OK\r\n\r\n"#define HTTP_OK_STR "HTTP/1.1 200 OK\r\n"#define INVALID_SID BAD_CALLBACK#define MISSING_SID BAD_CALLBACK#define MAX_CONTENT_LENGTH 20#define MAX_SECONDS 10#define MAX_EVENTS 20#define MAX_PORT_SIZE 10#define GENA_E_BAD_RESPONSE UPNP_E_BAD_RESPONSE#define GENA_E_BAD_SERVICE UPNP_E_INVALID_SERVICE#define GENA_E_SUBSCRIPTION_UNACCEPTED UPNP_E_SUBSCRIBE_UNACCEPTED#define GENA_E_BAD_SID UPNP_E_INVALID_SID#define GENA_E_UNSUBSCRIBE_UNACCEPTED UPNP_E_UNSUBSCRIBE_UNACCEPTED#define GENA_E_NOTIFY_UNACCEPTED UPNP_E_NOTIFY_UNACCEPTED#define GENA_E_NOTIFY_UNACCEPTED_REMOVE_SUB -9#define GENA_E_BAD_HANDLE UPNP_E_INVALID_HANDLE#define XML_ERROR -5#define XML_SUCCESS UPNP_E_SUCCESS#define GENA_SUCCESS UPNP_E_SUCCESS#define CALLBACK_SUCCESS 0#define DEFAULT_TIMEOUT 1801extern ithread_mutex_t GlobalClientSubscribeMutex;// Lock the subscription#define SubscribeLock() \ UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ "Trying Subscribe Lock"); \ ithread_mutex_lock(&GlobalClientSubscribeMutex); \ UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ "Subscribe Lock");// Unlock the subscription#define SubscribeUnlock() \ UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ "Trying Subscribe UnLock"); \ ithread_mutex_unlock(&GlobalClientSubscribeMutex); \ UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ "Subscribe UnLock");// Structure to send NOTIFY message to all subscribed control pointstypedef struct NOTIFY_THREAD_STRUCT { char * headers; DOMString propertySet; char * servId; char * UDN; Upnp_SID sid; int eventKey; int *reference_count; UpnpDevice_Handle device_handle;} notify_thread_struct;/************************************************************************* Function : genaCallback * * Parameters: * IN http_parser_t *parser: represents the parse state of the request* IN http_message_t* request: HTTP message containing GENA request* INOUT SOCKINFO *info: Structure containing information about the socket** Description: * This is the callback function called by the miniserver to handle * incoming GENA requests. ** Returns: int* UPNP_E_SUCCESS if successful else appropriate error***************************************************************************/EXTERN_C void genaCallback (IN http_parser_t *parser, IN http_message_t* request, IN SOCKINFO *info);/************************************************************************* Function : genaSubscribe* * Parameters: * IN UpnpClient_Handle client_handle: * IN char * PublisherURL: NULL Terminated, of the form : * "http://134.134.156.80:4000/RedBulb/Event"* INOUT int * TimeOut: requested Duration, if -1, then "infinite".* in the OUT case: actual Duration granted * by Service, -1 for infinite* OUT Upnp_SID out_sid:sid of subscription, memory passed in by caller** Description: * This function subscribes to a PublisherURL ( also mentioned as EventURL* some places). It sends SUBSCRIBE http request to service processes * request. Finally adds a Subscription to * the clients subscription list, if service responds with OK** Returns: int* return UPNP_E_SUCCESS if service response is OK else * returns appropriate error***************************************************************************/#ifdef INCLUDE_CLIENT_APISEXTERN_C int genaSubscribe( UpnpClient_Handle client_handle, char * PublisherURL, int * TimeOut, Upnp_SID out_sid );#endif/************************************************************************* Function : genaUnSubscribe* * Parameters: * IN UpnpClient_Handle client_handle: UPnP client handle* IN SID in_sid: The subscription ID** Description: * This function unsubscribes a SID. It first validates the SID and * client_handle,copies the subscription, sends UNSUBSCRIBE http request * to service processes request and finally removes the subscription** Returns: int* return UPNP_E_SUCCESS if service response is OK else * returns appropriate error***************************************************************************/#ifdef INCLUDE_CLIENT_APISEXTERN_C int genaUnSubscribe( UpnpClient_Handle client_handle, const Upnp_SID in_sid);#endif/************************************************************************* Function : genaUnregisterClient * * Parameters: * IN UpnpClient_Handle client_handle: Handle containing all the control* point related information** Description: * This function unsubcribes all the outstanding subscriptions and cleans* the subscription list. This function is called when control point * unregisters.** Returns: int* return UPNP_E_SUCCESS if successful else returns appropriate error***************************************************************************/#ifdef INCLUDE_CLIENT_APISEXTERN_C int genaUnregisterClient(UpnpClient_Handle client_handle);#endif//server/************************************************************************* Function : genaUnregisterDevice* * Parameters: * IN UpnpDevice_Handle device_handle: Handle of the root device** Description: * This function cleans the service table of the device. ** Returns: int* returns UPNP_E_SUCCESS if successful else returns GENA_E_BAD_HANDLE****************************************************************************/#ifdef INCLUDE_DEVICE_APISEXTERN_C int genaUnregisterDevice(UpnpDevice_Handle device_handle);#endif/************************************************************************* Function : genaRenewSubscription* * Parameters: * IN UpnpClient_Handle client_handle: Client handle* IN const Upnp_SID in_sid: subscription ID* INOUT int * TimeOut: requested Duration, if -1, then "infinite".* in the OUT case: actual Duration granted * by Service, -1 for infinite** Description: * This function renews a SID. It first validates the SID and * client_handle and copies the subscription. It sends RENEW * (modified SUBSCRIBE) http request to service and processes* the response.** Returns: int* return UPNP_E_SUCCESS if service response is OK else * returns appropriate error***************************************************************************/#ifdef INCLUDE_CLIENT_APISEXTERN_C int genaRenewSubscription( IN UpnpClient_Handle client_handle, IN const Upnp_SID in_sid, OUT int * TimeOut);#endif/***************************************************************************** Function : genaNotifyAll** Parameters :* IN UpnpDevice_Handle device_handle : Device handle* IN char *UDN : Device udn* IN char *servId : Service ID* IN char **VarNames : array of varible names* IN char **VarValues : array of variable values* IN int var_count : number of variables** Description : This function sends a notification to all the subscribed* control points** Return : int** Note : This function is similar to the genaNotifyAllExt. The only difference* is it takes event variable array instead of xml document.****************************************************************************/#ifdef INCLUDE_DEVICE_APISEXTERN_C int genaNotifyAll( UpnpDevice_Handle device_handle, char *UDN, char *servId, char **VarNames, char **VarValues, int var_count);#endif/***************************************************************************** Function : genaNotifyAllExt** Parameters :* IN UpnpDevice_Handle device_handle : Device handle* IN char *UDN : Device udn* IN char *servId : Service ID* IN IXML_Document *PropSet : XML document Event varible property set** Description : This function sends a notification to all the subscribed* control points** Return : int** Note : This function is similar to the genaNotifyAll. the only difference* is it takes the document instead of event variable array****************************************************************************/#ifdef INCLUDE_DEVICE_APISEXTERN_C int genaNotifyAllExt( UpnpDevice_Handle device_handle, char *UDN, char *servId, IN IXML_Document *PropSet);#endif/***************************************************************************** Function : genaInitNotify** Parameters :* IN UpnpDevice_Handle device_handle : Device handle* IN char *UDN : Device udn* IN char *servId : Service ID* IN char **VarNames : Array of variable names* IN char **VarValues : Array of variable values* IN int var_count : array size* IN Upnp_SID sid : subscription ID** Description : This function sends the intial state table dump to * newly subscribed control point. ** Return : int* returns GENA_E_SUCCESS if successful else returns appropriate error* * Note : No other event will be sent to this control point before the * intial state table dump.****************************************************************************/#ifdef INCLUDE_DEVICE_APISEXTERN_C int genaInitNotify(IN UpnpDevice_Handle device_handle, IN char *UDN, IN char *servId, IN char **VarNames, IN char **VarValues, IN int var_count, IN Upnp_SID sid);#endif/***************************************************************************** Function : genaInitNotifyExt** Parameters :* IN UpnpDevice_Handle device_handle : Device handle* IN char *UDN : Device udn* IN char *servId : Service ID* IN IXML_Document *PropSet : Document of the state table* IN Upnp_SID sid : subscription ID** Description : This function is similar to the genaInitNofity. The only * difference is that it takes the xml document for the state table and * sends the intial state table dump to newly subscribed control point. ** Return : int* returns GENA_E_SUCCESS if successful else returns appropriate error* * Note : No other event will be sent to this control point before the * intial state table dump.****************************************************************************/#ifdef INCLUDE_DEVICE_APISEXTERN_C int genaInitNotifyExt( IN UpnpDevice_Handle device_handle, IN char *UDN, IN char *servId, IN IXML_Document *PropSet, IN Upnp_SID sid);#endif/************************************************************************* Function : error_respond * * Parameters: * IN SOCKINFO *info: Structure containing information about the socket* IN int error_code: error code that will be in the GENA response* IN http_message_t* hmsg: GENA request Packet ** Description: * This function send an error message to the control point in the case* incorrect GENA requests.** Returns: int* UPNP_E_SUCCESS if successful else appropriate error***************************************************************************/void error_respond( IN SOCKINFO *info, IN int error_code, IN http_message_t* hmsg );#endif // GENA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -