Manage Eventing with GENA, the General Event Notification Architecture. More...
Include dependency graph for gena.hpp:
This graph shows which files directly or indirectly include this file: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 417 of file gena_ctrlpt.cpp.
Here is the caller graph for this function:| int clientSubscribeMutexDestroy | ( | ) |
Destroy the client subsribe mutex.
Definition at line 429 of file gena_ctrlpt.cpp.
Here is the caller graph for this function:| 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.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 519 of file gena_ctrlpt.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 474 of file gena_ctrlpt.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 433 of file gena_ctrlpt.cpp.
Here is the call graph for this function:| int genaUnregisterDevice | ( | UpnpDevice_Handle | device_handle | ) |
Cleans the service table of the device.
| [in] | device_handle | Handle of the root device |
Definition at line 798 of file gena_device.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 616 of file gena_ctrlpt.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 937 of file gena_device.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 908 of file gena_device.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 839 of file gena_device.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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 873 of file gena_device.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:| 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.
Here is the call graph for this function:
Here is the caller graph for this function: