libUPnP
1.14.20
|
Files | |
file | ssdplib.h |
file | ssdp_ctrlpt.c |
file | ssdp_device.c |
file | ssdp_server.c |
file | SSDPResultDataCallback.h |
SSDPResultData object declararion. | |
Data Structures | |
struct | SsdpEventStruct |
struct | TData |
struct | ssdpsearchreply |
struct | ssdpsearcharg |
struct | ssdpsearchexparg |
struct | ssdp_thread_data |
struct | SSDPSockArray |
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 (void *data) |
Sends a callback to the control point application with a SEARCH result. More... | |
static int | CreateClientRequestPacket (char *RqstBuf, size_t RqstBufSize, int Mx, char *SearchTarget, 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 | 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... | |
void | SSDPResultData_Callback (const SSDPResultData *p) |
Variables | |
enum SsdpSearchType | SsdpEventStruct::RequestType |
int | SsdpEventStruct::ErrCode |
int | SsdpEventStruct::MaxAge |
int | SsdpEventStruct::Mx |
char | SsdpEventStruct::UDN [LINE_SIZE] |
char | SsdpEventStruct::DeviceType [LINE_SIZE] |
char | SsdpEventStruct::ServiceType [LINE_SIZE] |
char | SsdpEventStruct::Location [LINE_SIZE] |
char | SsdpEventStruct::HostAddr [LINE_SIZE] |
char | SsdpEventStruct::Os [LINE_SIZE] |
char | SsdpEventStruct::Ext [LINE_SIZE] |
char | SsdpEventStruct::Date [LINE_SIZE] |
struct sockaddr * | SsdpEventStruct::DestAddr |
void * | SsdpEventStruct::Cookie |
int | TData::Mx |
void * | TData::Cookie |
char * | TData::Data |
struct sockaddr_storage | TData::DestAddr |
int | ssdpsearchreply::MaxAge |
UpnpDevice_Handle | ssdpsearchreply::handle |
struct sockaddr_storage | ssdpsearchreply::dest_addr |
SsdpEvent | ssdpsearchreply::event |
int | ssdpsearcharg::timeoutEventId |
char * | ssdpsearcharg::searchTarget |
void * | ssdpsearcharg::cookie |
enum SsdpSearchType | ssdpsearcharg::requestType |
int | ssdpsearchexparg::handle |
int | ssdpsearchexparg::timeoutEventId |
http_parser_t | ssdp_thread_data::parser |
struct sockaddr_storage | ssdp_thread_data::dest_addr |
SOCKET | gSsdpReqSocket4 = INVALID_SOCKET |
SOCKET | SSDPSockArray::ssdpSock |
int | SSDPSockArray::ssdpReqSock |
static const char | SERVICELIST_STR [] = "serviceList" |
X_USER_AGENT | |
can be overwritten by configure CFLAGS argument. The {\tt 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... | |
int | 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 NO_ERROR_FOUND 0 |
Error codes.
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.
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 | . |
int 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.
References UpnpDiscovery_new().
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.
int SSDPSockArray::ssdpReqSock |
socket for sending search requests and receiving search replies
SOCKET SSDPSockArray::ssdpSock |
socket for incoming advertisments and search requests