Manage Eventing with GENA, the General Event Notification Architecture. More...
Go to the source code of this file.
Classes | |
struct | NOTIFY_THREAD_STRUCT |
Macros | |
#define | XML_VERSION "<?xml version='1.0' encoding='ISO-8859-1' ?>\n" |
XML version comment. Not used because it is not interoperable with other UPnP vendors. | |
#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 1801 |
Typedefs | |
typedef struct NOTIFY_THREAD_STRUCT | notify_thread_struct |
Functions | |
int | clientSubscribeMutexInit () |
Initialize the client subsribe mutex. | |
int | clientSubscribeMutexDestroy () |
Destroy the client subsribe mutex. | |
void | genaCallback (http_parser_t *parser, http_message_t *request, SOCKINFO *info) |
This is the callback function called by the miniserver to handle incoming GENA requests. | |
int | genaSubscribe (UpnpClient_Handle client_handle, const UpnpString *PublisherURL, int *TimeOut, UpnpString *out_sid) |
This function subscribes to a PublisherURL (also mentioned as EventURL in some places). | |
int | genaUnSubscribe (UpnpClient_Handle client_handle, const UpnpString *in_sid) |
Unsubscribes a SID. | |
int | genaUnregisterClient (UpnpClient_Handle client_handle) |
Unsubcribes all the outstanding subscriptions and cleans the subscription list. | |
int | genaUnregisterDevice (UpnpDevice_Handle device_handle) |
Cleans the service table of the device. | |
int | genaRenewSubscription (UpnpClient_Handle client_handle, const UpnpString *in_sid, int *TimeOut) |
Renews a SID. | |
int | genaNotifyAll (UpnpDevice_Handle device_handle, char *UDN, char *servId, char **VarNames, char **VarValues, int var_count) |
Sends a notification to all the subscribed control points. | |
int | genaNotifyAllExt (UpnpDevice_Handle device_handle, char *UDN, char *servId, IXML_Document *PropSet) |
Sends a notification to all the subscribed control points. | |
int | genaInitNotify (UpnpDevice_Handle device_handle, char *UDN, char *servId, char **VarNames, char **VarValues, int var_count, const Upnp_SID sid) |
Sends the intial state table dump to newly subscribed control point. | |
int | genaInitNotifyExt (UpnpDevice_Handle device_handle, char *UDN, char *servId, IXML_Document *PropSet, const Upnp_SID sid) |
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. | |
void | error_respond (SOCKINFO *info, int error_code, http_message_t *hmsg) |
Sends an error message to the control point in the case of incorrect GENA requests. | |
Manage Eventing with GENA, the General Event Notification Architecture.
Definition in file gena.hpp.
struct NOTIFY_THREAD_STRUCT |
Structure to send NOTIFY message to all subscribed control points
Class Members | ||
---|---|---|
char * | headers |
Member of notify thread structure |
DOMString | propertySet |
Member of notify thread structure |
char * | servId |
Member of notify thread structure |
char * | UDN |
Member of notify thread structure |
Upnp_SID | sid |
Member of notify thread structure |
time_t | ctime |
Member of notify thread structure |
int * | reference_count |
Member of notify thread structure |
UpnpDevice_Handle | device_handle |
Member of notify thread structure |
#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 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_SUCCESS UPNP_E_SUCCESS |
#define GENA_SUCCESS UPNP_E_SUCCESS |
#define DEFAULT_TIMEOUT 1801 |
typedef struct NOTIFY_THREAD_STRUCT notify_thread_struct |
Structure to send NOTIFY message to all subscribed control points
int clientSubscribeMutexInit | ( | ) |
Initialize the client subsribe mutex.
Definition at line 415 of file gena_ctrlpt.cpp.
int clientSubscribeMutexDestroy | ( | ) |
Destroy the client subsribe mutex.
Definition at line 427 of file gena_ctrlpt.cpp.
void genaCallback | ( | http_parser_t * | parser, |
http_message_t * | request, | ||
SOCKINFO * | info | ||
) |
This is the callback function called by the miniserver to handle incoming GENA requests.
\ returns UPNP_E_SUCCESS if successful, otherwise appropriate error code.
[in] | parser | Represents the parse state of the request |
[in] | request | HTTP message containing GENA request |
[in,out] | info | Structure containing information about the socket |
Definition at line 58 of file gena_callback2.cpp.
int genaSubscribe | ( | UpnpClient_Handle | client_handle, |
const UpnpString * | PublisherURL, | ||
int * | TimeOut, | ||
UpnpString * | out_sid | ||
) |
This function subscribes to a PublisherURL (also mentioned as EventURL in 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.
[in] | client_handle | The client handle. |
[in] | PublisherURL | Of the form: "http://134.134.156.80:4000/RedBulb/Event" |
[in,out] | TimeOut | requested Duration:
|
[out] | out_sid | sid of subscription, memory passed in by caller. |
Definition at line 517 of file gena_ctrlpt.cpp.
int genaUnSubscribe | ( | UpnpClient_Handle | client_handle, |
const UpnpString * | in_sid | ||
) |
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.
[in] | client_handle | UPnP client handle. |
[in] | in_sid | The subscription ID. |
Definition at line 472 of file gena_ctrlpt.cpp.
int genaUnregisterClient | ( | UpnpClient_Handle | client_handle | ) |
Unsubcribes all the outstanding subscriptions and cleans the subscription list.
This function is called when control point unregisters.
[in] | client_handle | Handle containing all the control point related information. |
Definition at line 431 of file gena_ctrlpt.cpp.
int genaUnregisterDevice | ( | UpnpDevice_Handle | device_handle | ) |
Cleans the service table of the device.
[in] | device_handle | Handle of the root device |
Definition at line 887 of file gena_device.cpp.
int genaRenewSubscription | ( | UpnpClient_Handle | client_handle, |
const UpnpString * | in_sid, | ||
int * | TimeOut | ||
) |
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.
[in] | client_handle | Client handle. |
[in] | in_sid | Subscription ID. |
[in,out] | TimeOut | requested Duration, if -1, then "infinite". In the OUT case: actual Duration granted by Service, -1 for infinite. |
Definition at line 614 of file gena_ctrlpt.cpp.
int genaNotifyAll | ( | UpnpDevice_Handle | device_handle, |
char * | UDN, | ||
char * | servId, | ||
char ** | VarNames, | ||
char ** | VarValues, | ||
int | var_count | ||
) |
Sends a notification to all the subscribed control points.
[in] | device_handle | Device handle. |
[in] | UDN | Device udn. |
[in] | servId | Service ID. |
[in] | VarNames | Array of varible names. |
[in] | VarValues | Array of variable values. |
[in] | var_count | Number of variables. |
Definition at line 1026 of file gena_device.cpp.
int genaNotifyAllExt | ( | UpnpDevice_Handle | device_handle, |
char * | UDN, | ||
char * | servId, | ||
IXML_Document * | PropSet | ||
) |
Sends a notification to all the subscribed control points.
[in] | device_handle | Device handle. |
[in] | UDN | Device udn. |
[in] | servId | Service ID. |
[in] | PropSet | XML document Event varible property set. |
Definition at line 997 of file gena_device.cpp.
int genaInitNotify | ( | UpnpDevice_Handle | device_handle, |
char * | UDN, | ||
char * | servId, | ||
char ** | VarNames, | ||
char ** | VarValues, | ||
int | var_count, | ||
const Upnp_SID | sid | ||
) |
Sends the intial state table dump to newly subscribed control point.
[in] | device_handle | Device handle. |
[in] | UDN | Device udn. |
[in] | servId | Service ID. |
[in] | VarNames | Array of variable names. |
[in] | VarValues | Array of variable values. |
[in] | var_count | Array size. |
[in] | sid | Subscription ID. |
Definition at line 928 of file gena_device.cpp.
int genaInitNotifyExt | ( | UpnpDevice_Handle | device_handle, |
char * | UDN, | ||
char * | servId, | ||
IXML_Document * | PropSet, | ||
const Upnp_SID | sid | ||
) |
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.
[in] | device_handle | Device handle. |
[in] | UDN | Device udn. |
[in] | servId | Service ID. |
[in] | PropSet | Document of the state table. |
[in] | sid | subscription ID. |
Definition at line 962 of file gena_device.cpp.
void error_respond | ( | SOCKINFO * | info, |
int | error_code, | ||
http_message_t * | hmsg | ||
) |
Sends an error message to the control point in the case of incorrect GENA requests.
\ return UPNP_E_SUCCESS if successful, otherwise appropriate error code.
[in] | info | Structure containing information about the socket. |
[in] | error_code | error code that will be in the GENA response. |
[in] | hmsg | GENA request Packet. |
Definition at line 47 of file gena_callback2.cpp.