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

📄 gena.h

📁 原来由英特尔制定的UPnP SDK的
💻 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 + -