|
libUPnP
1.8.4
|
Files | |
| file | ssdplib.h |
| file | ssdp_ctrlpt.c |
| file | ssdp_device.c |
| file | ssdp_ResultData.h |
| SSDPResultData object declararion. | |
| file | ssdp_server.c |
Data Structures | |
| struct | SsdpEventStruct |
| struct | TData |
| struct | ssdpsearchreply |
| struct | ssdpsearcharg |
| struct | ssdpsearchexparg |
| struct | ssdp_thread_data |
| struct | SSDPSockArray |
Macros | |
| #define | BUFSIZE (size_t)2500 |
| #define | SSDP_IP "239.255.255.250" |
| #define | SSDP_IPV6_LINKLOCAL "FF02::C" |
| #define | SSDP_IPV6_SITELOCAL "FF05::C" |
| #define | SSDP_PORT 1900 |
| #define | NUM_TRY 3 |
| #define | THREAD_LIMIT 50 |
| #define | COMMAND_LEN 300 |
| #define | MSGTYPE_SHUTDOWN 0 |
| #define | MSGTYPE_ADVERTISEMENT 1 |
| #define | MSGTYPE_REPLY 2 |
| #define | CLASS SSDPResultData |
| #define | EXPAND_CLASS_MEMBERS(CLASS) |
| #define | MAX_TIME_TOREAD 45 |
Typedefs | |
| typedef enum SsdpSearchType | SType |
Enumerations | |
| enum | SsdpSearchType { SSDP_SERROR = -1, SSDP_ALL, SSDP_ROOTDEVICE, SSDP_DEVICEUDN, SSDP_DEVICETYPE, SSDP_SERVICE } |
| enum | Listener { Idle, Stopping, Running } |
Functions | |
| static void | send_search_result (IN void *data) |
| Sends a callback to the control point application with a SEARCH result. More... | |
| static int | CreateClientRequestPacket (INOUT char *RqstBuf, IN size_t RqstBufSize, IN int Mx, IN char *SearchTarget, IN int AddressFamily) |
| Creates a HTTP search request packet depending on the input parameter. More... | |
| static void | searchExpired (void *arg) |
| static int | NewRequestHandler (struct sockaddr *DestAddr, int NumPacket, char **RqPacket) |
| Works as a request handler which passes the HTTP request string to multicast channel. More... | |
| static int | extractIPv6address (char *url, char *address) |
| static int | isUrlV6UlaGua (char *descdocUrl) |
| static void | CreateServicePacket (int msg_type, const char *nt, char *usn, char *location, int duration, char **packet, int AddressFamily, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates a HTTP request packet. Depending on the input parameter, it either creates a service advertisement request or service shutdown request etc. More... | |
| void | SSDPResultData_Callback (const SSDPResultData *p) |
| void | RequestHandler () |
| static void | free_ssdp_event_handler_data (void *the_data) |
| Frees the ssdp request. More... | |
| static UPNP_INLINE int | valid_ssdp_msg (http_message_t *hmsg) |
| Does some quick checking of the ssdp msg. More... | |
| static UPNP_INLINE int | start_event_handler (void *Data) |
| Parses the message and dispatches it to a handler which handles the ssdp request msg. More... | |
| static void | ssdp_event_handler_thread (void *the_data) |
| This function is a thread that handles SSDP requests. More... | |
| static int | create_ssdp_sock_v4 (SOCKET *ssdpSock) |
| static int | create_ssdp_sock_reqv4 (SOCKET *ssdpReqSock) |
| Creates the SSDP IPv4 socket to be used by the control point. More... | |
Variables | |
| SOCKET | gSsdpReqSocket4 = INVALID_SOCKET |
| static const char | SERVICELIST_STR [] = "serviceList" |
X_USER_AGENT | |
can be overwritten by configure CFLAGS argument. The { X_USER_AGENT} constant specifies the value of the X-User-Agent: HTTP header. The value "redsonic" is needed for the DSM-320. See https://sourceforge.net/forum/message.php?msg_id=3166856 for more information | |
| typedef struct SsdpEventStruct | SsdpEvent |
| typedef void(* | SsdpFunPtr) (SsdpEvent *) |
| typedef struct TData | ThreadData |
| typedef struct ssdpsearchreply | SsdpSearchReply |
| typedef struct ssdpsearcharg | SsdpSearchArg |
| typedef struct ssdpsearchexparg | SsdpSearchExpArg |
| typedef int(* | ParserFun) (char *, SsdpEvent *) |
| SOCKET | gSsdpReqSocket4 |
| #define | X_USER_AGENT "redsonic" |
| #define | NO_ERROR_FOUND 0 |
| #define | E_REQUEST_INVALID -3 |
| #define | E_RES_EXPIRED -4 |
| #define | E_MEM_ALLOC -5 |
| #define | E_HTTP_SYNTEX -6 |
| #define | E_SOCKET -7 |
| #define | RQST_TIMEOUT 20 |
SSDP Server Functions | |
| int | AdvertiseAndReply (int AdFlag, UpnpDevice_Handle Hnd, enum SsdpSearchType SearchType, struct sockaddr *DestAddr, char *DeviceType, char *DeviceUDN, char *ServiceType, int Exp) |
| Sends SSDP advertisements, replies and shutdown messages. More... | |
| int | unique_service_name (char *cmd, SsdpEvent *Evt) |
| Fills the fields of the event structure like DeviceType, Device UDN and Service Type. More... | |
| enum SsdpSearchType | ssdp_request_type1 (char *cmd) |
| This function figures out the type of the SSDP search in the in the request. More... | |
| int | ssdp_request_type (char *cmd, SsdpEvent *Evt) |
| Starts filling the SSDP event structure based upon the request received. More... | |
| void | readFromSSDPSocket (SOCKET socket) |
| This function reads the data from the ssdp socket. More... | |
| int | get_ssdp_sockets (MiniServerSockArray *out) |
| Creates the IPv4 and IPv6 ssdp sockets required by the control point and device operation. More... | |
SSDP Control Point Functions | |
| void | ssdp_handle_ctrlpt_msg (http_message_t *hmsg, struct sockaddr_storage *dest_addr, int timeout) |
| This function handles the ssdp messages from the devices. These messages includes the search replies, advertisement of device coming alive and bye byes. More... | |
| int | SearchByTarget (int Hnd, int Mx, char *St, void *Cookie) |
| Creates and send the search request for a specific URL. More... | |
SSDP Device Functions | |
| void | advertiseAndReplyThread (void *data) |
| Wrapper function to reply the search request coming from the control point. More... | |
| void | ssdp_handle_device_request (http_message_t *hmsg, struct sockaddr_storage *dest_addr) |
| Handles the search request. It does the sanity checks of the request and then schedules a thread to send a random time reply (random within maximum time given by the control point to reply). More... | |
| int | DeviceAdvertisement (char *DevType, int RootDev, char *Udn, char *Location, int Duration, int AddressFamily, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates the device advertisement request based on the input parameter, and send it to the multicast channel. More... | |
| int | SendReply (struct sockaddr *DestAddr, char *DevType, int RootDev, char *Udn, char *Location, int Duration, int ByType, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates the reply packet based on the input parameter, and send it to the client addesss given in its input parameter DestAddr. More... | |
| int | DeviceReply (struct sockaddr *DestAddr, char *DevType, int RootDev, char *Udn, char *Location, int Duration, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates the reply packet based on the input parameter, and send it to the client address given in its input parameter DestAddr. More... | |
| int | ServiceAdvertisement (char *Udn, char *ServType, char *Location, int Duration, int AddressFamily, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates the advertisement packet based on the input parameter, and send it to the multicast channel. More... | |
| int | ServiceReply (struct sockaddr *DestAddr, char *ServType, char *Udn, char *Location, int Duration, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates the advertisement packet based on the input parameter, and send it to the multicast channel. More... | |
| int | ServiceShutdown (char *Udn, char *ServType, char *Location, int Duration, int AddressFamily, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates a HTTP service shutdown request packet and sends it to the multicast channel through RequestHandler. More... | |
| int | DeviceShutdown (char *DevType, int RootDev, char *Udn, char *Location, int Duration, int AddressFamily, int PowerState, int SleepPeriod, int RegistrationState) |
| Creates a HTTP device shutdown request packet and send it to the multicast channel through RequestHandler. More... | |
| #define EXPAND_CLASS_MEMBERS | ( | CLASS | ) |
| #define NO_ERROR_FOUND 0 |
Error codes.
Referenced by ssdp_request_type().
| typedef struct SsdpEventStruct SsdpEvent |
Structure to store the SSDP information
| typedef enum SsdpSearchType SType |
Enumeration to define all different types of ssdp searches
| enum SsdpSearchType |
| int AdvertiseAndReply | ( | int | AdFlag, |
| UpnpDevice_Handle | Hnd, | ||
| enum SsdpSearchType | SearchType, | ||
| struct sockaddr * | DestAddr, | ||
| char * | DeviceType, | ||
| char * | DeviceUDN, | ||
| char * | ServiceType, | ||
| int | Exp | ||
| ) |
Sends SSDP advertisements, replies and shutdown messages.
References UPNP_E_SUCCESS.
Referenced by advertiseAndReplyThread().
| void advertiseAndReplyThread | ( | void * | data | ) |
Wrapper function to reply the search request coming from the control point.
References AdvertiseAndReply().
|
static |
Creates the SSDP IPv4 socket to be used by the control point.
| [out] | ssdpReqSock | SSDP IPv4 request socket to be created. |
Referenced by get_ssdp_sockets().
|
static |
| ssdpSock | [] SSDP IPv4 socket to be created. |
|
static |
Creates a HTTP search request packet depending on the input parameter.
| [in,out] | RqstBuf | Output string in HTTP format. |
| [in] | RqstBufSize | RqstBuf size. |
| [in] | Mx | Search Target. |
| [in] | SearchTarget | Number of seconds to wait to collect all the responses. |
| [in] | AddressFamily | search address family. |
|
static |
Creates a HTTP request packet. Depending on the input parameter, it either creates a service advertisement request or service shutdown request etc.
| [in] | msg_type | type of the message (Search Reply, Advertisement or Shutdown). |
| [in] | nt | ssdp type. |
| [in] | usn | unique service name ( go in the HTTP Header). |
| [in] | location | Location URL. |
| [in] | duration | Service duration in sec. |
| [out] | packet | Output buffer filled with HTTP statement. |
| [in] | AddressFamily | Address family of the HTTP request. |
| [in] | PowerState | PowerState as defined by UPnP Low Power. |
| [in] | SleepPeriod | SleepPeriod as defined by UPnP Low Power. |
| [in] | RegistrationState | RegistrationState as defined by UPnP Low Power. |
References membuffer_init(), and membuffer::size_inc.
| int DeviceAdvertisement | ( | char * | DevType, |
| int | RootDev, | ||
| char * | Udn, | ||
| char * | Location, | ||
| int | Duration, | ||
| int | AddressFamily, | ||
| int | PowerState, | ||
| int | SleepPeriod, | ||
| int | RegistrationState | ||
| ) |
Creates the device advertisement request based on the input parameter, and send it to the multicast channel.
| int DeviceReply | ( | struct sockaddr * | DestAddr, |
| char * | DevType, | ||
| int | RootDev, | ||
| char * | Udn, | ||
| char * | Location, | ||
| int | Duration, | ||
| int | PowerState, | ||
| int | SleepPeriod, | ||
| int | RegistrationState | ||
| ) |
Creates the reply packet based on the input parameter, and send it to the client address given in its input parameter DestAddr.
| int DeviceShutdown | ( | char * | DevType, |
| int | RootDev, | ||
| char * | Udn, | ||
| char * | Location, | ||
| int | Duration, | ||
| int | AddressFamily, | ||
| int | PowerState, | ||
| int | SleepPeriod, | ||
| int | RegistrationState | ||
| ) |
Creates a HTTP device shutdown request packet and send it to the multicast channel through RequestHandler.
|
static |
Referenced by isUrlV6UlaGua().
|
static |
Frees the ssdp request.
| [in] | the_data | ssdp_thread_data structure. This structure contains SSDP request message. |
| int get_ssdp_sockets | ( | MiniServerSockArray * | out | ) |
Creates the IPv4 and IPv6 ssdp sockets required by the control point and device operation.
Creates the SSDP IPv6 socket to be used by the control point.
References create_ssdp_sock_reqv4(), gIF_IPV4, INVALID_SOCKET, MServerSockArray::ssdpReqSock4, MServerSockArray::ssdpReqSock6, and UPNP_E_SUCCESS.
|
static |
References extractIPv6address().
|
static |
Works as a request handler which passes the HTTP request string to multicast channel.
| [in] | DestAddr | Ip address, to send the reply. |
| [in] | NumPacket | Number of packet to be sent. |
| [in] | RqPacket | . |
| void readFromSSDPSocket | ( | SOCKET | socket | ) |
This function reads the data from the ssdp socket.
| int SearchByTarget | ( | int | Hnd, |
| int | Mx, | ||
| char * | St, | ||
| void * | Cookie | ||
| ) |
Creates and send the search request for a specific URL.
This function implements the search request of the discovery phase. A M-SEARCH request is sent on the SSDP channel for both IPv4 and IPv6 addresses. The search target(ST) is required and must be one of the following:
|
static |
Sends a callback to the control point application with a SEARCH result.
| int SendReply | ( | struct sockaddr * | DestAddr, |
| char * | DevType, | ||
| int | RootDev, | ||
| char * | Udn, | ||
| char * | Location, | ||
| int | Duration, | ||
| int | ByType, | ||
| int | PowerState, | ||
| int | SleepPeriod, | ||
| int | RegistrationState | ||
| ) |
Creates the reply packet based on the input parameter, and send it to the client addesss given in its input parameter DestAddr.
References UPNP_E_OUTOF_MEMORY.
| int ServiceAdvertisement | ( | char * | Udn, |
| char * | ServType, | ||
| char * | Location, | ||
| int | Duration, | ||
| int | AddressFamily, | ||
| int | PowerState, | ||
| int | SleepPeriod, | ||
| int | RegistrationState | ||
| ) |
Creates the advertisement packet based on the input parameter, and send it to the multicast channel.
| int ServiceReply | ( | struct sockaddr * | DestAddr, |
| char * | ServType, | ||
| char * | Udn, | ||
| char * | Location, | ||
| int | Duration, | ||
| int | PowerState, | ||
| int | SleepPeriod, | ||
| int | RegistrationState | ||
| ) |
Creates the advertisement packet based on the input parameter, and send it to the multicast channel.
| int ServiceShutdown | ( | char * | Udn, |
| char * | ServType, | ||
| char * | Location, | ||
| int | Duration, | ||
| int | AddressFamily, | ||
| int | PowerState, | ||
| int | SleepPeriod, | ||
| int | RegistrationState | ||
| ) |
Creates a HTTP service shutdown request packet and sends it to the multicast channel through RequestHandler.
|
static |
This function is a thread that handles SSDP requests.
| the_data | [] ssdp_thread_data structure. This structure contains SSDP request message. |
References http_message_t::method, and start_event_handler().
| void ssdp_handle_ctrlpt_msg | ( | http_message_t * | hmsg, |
| struct sockaddr_storage * | dest_addr, | ||
| int | timeout | ||
| ) |
This function handles the ssdp messages from the devices. These messages includes the search replies, advertisement of device coming alive and bye byes.
| void ssdp_handle_device_request | ( | http_message_t * | hmsg, |
| struct sockaddr_storage * | dest_addr | ||
| ) |
Handles the search request. It does the sanity checks of the request and then schedules a thread to send a random time reply (random within maximum time given by the control point to reply).
| int ssdp_request_type | ( | char * | cmd, |
| SsdpEvent * | Evt | ||
| ) |
Starts filling the SSDP event structure based upon the request received.
References NO_ERROR_FOUND, ssdp_request_type1(), SSDP_SERROR, and unique_service_name().
| enum SsdpSearchType ssdp_request_type1 | ( | char * | cmd | ) |
This function figures out the type of the SSDP search in the in the request.
Referenced by ssdp_request_type().
|
static |
Parses the message and dispatches it to a handler which handles the ssdp request msg.
| [in] | Data | ssdp_thread_data structure. This structure contains SSDP request message. |
Referenced by ssdp_event_handler_thread().
| int unique_service_name | ( | char * | cmd, |
| SsdpEvent * | Evt | ||
| ) |
Fills the fields of the event structure like DeviceType, Device UDN and Service Type.
Referenced by ssdp_request_type().
|
static |
Does some quick checking of the ssdp msg.
| [in] | hmsg | ssdp_thread_data structure. This structure contains SSDP request message. |
References http_message_t::method.
1.8.13