From 0a074d1989f195895e8895a0d359ce9dfcc7a907 Mon Sep 17 00:00:00 2001 From: Marcelo Roberto Jimenez Date: Mon, 10 Dec 2007 22:56:56 +0000 Subject: [PATCH] Merge of trunk into branch 1.6.x. git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@263 119443c7-1b9e-41f8-b6fc-b9c35fce742c --- ChangeLog | 20 +- THANKS | 2 + upnp/src/api/upnpapi.c | 15 +- upnp/src/genlib/miniserver/miniserver.c | 2 + upnp/src/genlib/net/http/webserver.c | 664 ++++++++++++------------ upnp/src/inc/miniserver.h | 220 ++++---- upnp/src/ssdp/ssdp_server.c | 371 +++++++------ 7 files changed, 651 insertions(+), 643 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4ef9d5f..847618f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,15 +2,23 @@ Version 1.6.2 ******************************************************************************* +2007-12-10 Marcelo Jimenez + * Fixed a compilation error due to a missing #ifdef in + upnp/src/genlib/miniserver/miniserver.c. Thanks to Eugene Christensen. + +2007-11-12 Marcelo Jimenez + * "make check" was failing because ixml/test/test_document.sh did not + have the executable flag set. Thanks to Steve Bresson. + +2007-11-12 Marcelo Jimenez + * Fixed a memory leak in upnpapi.c to delete gMiniServerThreadPool in + the call to UpnpFinish(). Thanks to Fabrice Fontaine. + 2007-11-09 Marcelo Jimenez * Added a isleep() call to the error handler of select() in RunMiniServer(), so that it does not take 100% cpu in case select() fails repeatedly. -2007-11-12 Marcelo Jimenez - * "make check" was failing because ixml/test/test_document.sh did not - have the executable flag set. Thanks to Steve Bresson. - ******************************************************************************* Version 1.6.1 ******************************************************************************* @@ -129,6 +137,10 @@ Version 1.6.0 an interface change in the library and the minor library version was bumped. Also, the libtool library numbers were changed accordingly. +******************************************************************************* +Version 1.4.7 +******************************************************************************* + 2007-05-26 Marcelo Jimenez * Added support for the Basic Device (http://www.upnp.org/standardizeddcps/basic.asp) as suggested by diff --git a/THANKS b/THANKS index 78ff04d..3a2c575 100644 --- a/THANKS +++ b/THANKS @@ -16,6 +16,8 @@ exempt of errors. - Erik Johansson - Eric Tanguy - Erwan Velu +- Eugene Christensen +- Fabrice Fontaine - Fredrik Svensson - Glen Masgai - Jiri Zouhar diff --git a/upnp/src/api/upnpapi.c b/upnp/src/api/upnpapi.c index 99d6f98..e7e8626 100644 --- a/upnp/src/api/upnpapi.c +++ b/upnp/src/api/upnpapi.c @@ -92,11 +92,9 @@ CLIENTONLY( ithread_mutex_t GlobalClientSubscribeMutex; ) TimerThread gTimerThread; - ThreadPool gRecvThreadPool; - ThreadPool gSendThreadPool; - - ThreadPool gMiniServerThreadPool; + ThreadPool gRecvThreadPool; + ThreadPool gMiniServerThreadPool; //Flag to indicate the state of web server WebServerState bWebServerState = WEB_SERVER_DISABLED; @@ -415,8 +413,9 @@ UpnpFinish() UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "UpnpFinish : UpnpSdkInit is ONE\n" ); } - PrintThreadPoolStats(&gRecvThreadPool, __FILE__, __LINE__, "Recv Thread Pool"); PrintThreadPoolStats(&gSendThreadPool, __FILE__, __LINE__, "Send Thread Pool"); + PrintThreadPoolStats(&gRecvThreadPool, __FILE__, __LINE__, "Recv Thread Pool"); + PrintThreadPoolStats(&gMiniServerThreadPool, __FILE__, __LINE__, "MiniServer Thread Pool"); #ifdef INCLUDE_DEVICE_APIS if( GetDeviceHandleInfo( &device_handle, &temp ) == HND_DEVICE ) @@ -435,11 +434,13 @@ UpnpFinish() web_server_destroy(); #endif - ThreadPoolShutdown(&gSendThreadPool); + ThreadPoolShutdown(&gMiniServerThreadPool); ThreadPoolShutdown(&gRecvThreadPool); + ThreadPoolShutdown(&gSendThreadPool); - PrintThreadPoolStats(&gRecvThreadPool, __FILE__, __LINE__, "Recv Thread Pool"); PrintThreadPoolStats(&gSendThreadPool, __FILE__, __LINE__, "Send Thread Pool"); + PrintThreadPoolStats(&gRecvThreadPool, __FILE__, __LINE__, "Recv Thread Pool"); + PrintThreadPoolStats(&gMiniServerThreadPool, __FILE__, __LINE__, "MiniServer Thread Pool"); #ifdef INCLUDE_CLIENT_APIS ithread_mutex_destroy(&GlobalClientSubscribeMutex); diff --git a/upnp/src/genlib/miniserver/miniserver.c b/upnp/src/genlib/miniserver/miniserver.c index 5f08443..be8e979 100644 --- a/upnp/src/genlib/miniserver/miniserver.c +++ b/upnp/src/genlib/miniserver/miniserver.c @@ -115,11 +115,13 @@ SetHTTPGetCallback( MiniServerCallback callback ) * * Return: void ************************************************************************/ +#ifdef INCLUDE_DEVICE_APIS void SetSoapCallback( MiniServerCallback callback ) { gSoapCallback = callback; } +#endif /* INCLUDE_DEVICE_APIS */ /************************************************************************ * Function: SetGenaCallback diff --git a/upnp/src/genlib/net/http/webserver.c b/upnp/src/genlib/net/http/webserver.c index 692992e..f57db13 100644 --- a/upnp/src/genlib/net/http/webserver.c +++ b/upnp/src/genlib/net/http/webserver.c @@ -29,10 +29,10 @@ // /////////////////////////////////////////////////////////////////////////// -/************************************************************************ -* Purpose: This file defines the Web Server and has functions to carry out -* operations of the Web Server. -************************************************************************/ +/****************************************************************************** + * Purpose: This file defines the Web Server and has functions to carry out + * operations of the Web Server. + ******************************************************************************/ #include "config.h" #include @@ -64,8 +64,12 @@ /* Response Types */ -enum resp_type { RESP_FILEDOC, RESP_XMLDOC, RESP_HEADERS, RESP_WEBDOC, - RESP_POST }; +enum resp_type { + RESP_FILEDOC, + RESP_XMLDOC, + RESP_HEADERS, + RESP_WEBDOC, + RESP_POST }; // mapping of file extension to content-type of document struct document_type_t { @@ -95,18 +99,18 @@ static const char *gMediaTypes[] = { */ // index into 'gMediaTypes' -#define AUDIO_STR "\1" -#define VIDEO_STR "\2" -#define IMAGE_STR "\3" -#define APPLICATION_STR "\4" -#define TEXT_STR "\5" +#define AUDIO_STR "\1" +#define VIDEO_STR "\2" +#define IMAGE_STR "\3" +#define APPLICATION_STR "\4" +#define TEXT_STR "\5" // int index -#define APPLICATION_INDEX 4 -#define TEXT_INDEX 5 +#define APPLICATION_INDEX 4 +#define TEXT_INDEX 5 // general -#define NUM_MEDIA_TYPES 69 +#define NUM_MEDIA_TYPES 69 #define NUM_HTTP_HEADER_NAMES 33 // sorted by file extension; must have 'NUM_MEDIA_TYPES' extensions @@ -182,12 +186,9 @@ static const char *gEncodedMediaTypes = "zip\0" APPLICATION_STR "zip\0" "\0"; // *** end *** -/***********************************************************************/ -/* +/************************************************************************ module variables - Globals, static and externs - */ - -/***********************************************************************/ +************************************************************************/ static struct document_type_t gMediaTypeList[NUM_MEDIA_TYPES]; membuffer gDocumentRootDir; // a local dir which serves as webserver root static struct xml_alias_t gAliasDoc; // XML document @@ -195,16 +196,16 @@ static ithread_mutex_t gWebMutex; extern str_int_entry Http_Header_Names[NUM_HTTP_HEADER_NAMES]; /************************************************************************ -* Function: has_xml_content_type -* -* Parameters: -* none -* -* Description: decodes list and stores it in gMediaTypeList -* -* Returns: -* void -************************************************************************/ + * Function: has_xml_content_type + * + * Parameters: + * none + * + * Description: decodes list and stores it in gMediaTypeList + * + * Returns: + * void + ************************************************************************/ static UPNP_INLINE void media_list_init( void ) { @@ -229,20 +230,20 @@ media_list_init( void ) } /************************************************************************ -* Function: has_xml_content_type -* -* Parameters: -* IN const char* extension ; -* OUT const char** con_type, -* OUT const char** con_subtype -* -* Description: Based on the extension, returns the content type and -* content subtype -* -* Returns: -* 0 on success; -* -1 on error -************************************************************************/ + * Function: has_xml_content_type + * + * Parameters: + * IN const char* extension ; + * OUT const char** con_type, + * OUT const char** con_subtype + * + * Description: Based on the extension, returns the content type and + * content subtype + * + * Returns: + * 0 on success; + * -1 on error + ************************************************************************/ static UPNP_INLINE int search_extension( IN const char *extension, OUT const char **con_type, @@ -276,20 +277,20 @@ search_extension( IN const char *extension, } /************************************************************************ -* Function: get_content_type -* -* Parameters: -* IN const char* filename, -* OUT DOMString* content_type -* -* Description: Based on the extension, clones an XML string based on -* type and content subtype. If content type and sub type are not -* found, unknown types are used -* -* Returns: -* 0 - On Sucess -* UPNP_E_OUTOF_MEMORY - on memory allocation failures -************************************************************************/ + * Function: get_content_type + * + * Parameters: + * IN const char* filename, + * OUT DOMString* content_type + * + * Description: Based on the extension, clones an XML string based on + * type and content subtype. If content type and sub type are not + * found, unknown types are used + * + * Returns: + * 0 - On Sucess + * UPNP_E_OUTOF_MEMORY - on memory allocation failures + ************************************************************************/ UPNP_INLINE int get_content_type( IN const char *filename, OUT DOMString * content_type ) @@ -337,17 +338,17 @@ get_content_type( IN const char *filename, } /************************************************************************ -* Function: glob_alias_init -* -* Parameters: -* none -* -* Description: Initialize the global XML document. Allocate buffers -* for the XML document -* -* Returns: -* void -************************************************************************/ + * Function: glob_alias_init + * + * Parameters: + * none + * + * Description: Initialize the global XML document. Allocate buffers + * for the XML document + * + * Returns: + * void + ************************************************************************/ static UPNP_INLINE void glob_alias_init( void ) { @@ -360,16 +361,16 @@ glob_alias_init( void ) } /************************************************************************ -* Function: is_valid_alias -* -* Parameters: -* IN const struct xml_alias_t* alias ; XML alias object -* -* Description: Check for the validity of the XML object buffer -* -* Returns: -* BOOLEAN -************************************************************************/ + * Function: is_valid_alias + * + * Parameters: + * IN const struct xml_alias_t* alias ; XML alias object + * + * Description: Check for the validity of the XML object buffer + * + * Returns: + * BOOLEAN + ************************************************************************/ static UPNP_INLINE xboolean is_valid_alias( IN const struct xml_alias_t *alias ) { @@ -377,17 +378,17 @@ is_valid_alias( IN const struct xml_alias_t *alias ) } /************************************************************************ -* Function: alias_grab -* -* Parameters: -* OUT struct xml_alias_t* alias ; XML alias object -* -* Description: Copy the contents of the global XML document into the -* local OUT parameter -* -* Returns: -* void -************************************************************************/ + * Function: alias_grab + * + * Parameters: + * OUT struct xml_alias_t* alias ; XML alias object + * + * Description: Copy the contents of the global XML document into the + * local OUT parameter + * + * Returns: + * void + ************************************************************************/ static void alias_grab( OUT struct xml_alias_t *alias ) { @@ -402,17 +403,17 @@ alias_grab( OUT struct xml_alias_t *alias ) } /************************************************************************ -* Function: alias_release -* -* Parameters: -* IN struct xml_alias_t* alias ; XML alias object -* -* Description: Release the XML document referred to by the IN parameter -* Free the allocated buffers associated with this object -* -* Returns: -* void -************************************************************************/ + * Function: alias_release + * + * Parameters: + * IN struct xml_alias_t* alias ; XML alias object + * + * Description: Release the XML document referred to by the IN parameter + * Free the allocated buffers associated with this object + * + * Returns: + * void + ************************************************************************/ static void alias_release( IN struct xml_alias_t *alias ) { @@ -436,24 +437,24 @@ alias_release( IN struct xml_alias_t *alias ) } /************************************************************************ -* Function: web_server_set_alias -* -* Parameters: -* alias_name: webserver name of alias; created by caller and freed by -* caller (doesn't even have to be malloc()d .) -* alias_content: the xml doc; this is allocated by the caller; and -* freed by the web server -* alias_content_length: length of alias body in bytes -* last_modified: time when the contents of alias were last -* changed (local time) -* -* Description: Replaces current alias with the given alias. To remove -* the current alias, set alias_name to NULL. -* -* Returns: -* 0 - OK -* UPNP_E_OUTOF_MEMORY: note: alias_content is not freed here -************************************************************************/ + * Function: web_server_set_alias + * + * Parameters: + * alias_name: webserver name of alias; created by caller and freed by + * caller (doesn't even have to be malloc()d .) + * alias_content: the xml doc; this is allocated by the caller; and + * freed by the web server + * alias_content_length: length of alias body in bytes + * last_modified: time when the contents of alias were last + * changed (local time) + * + * Description: Replaces current alias with the given alias. To remove + * the current alias, set alias_name to NULL. + * + * Returns: + * 0 - OK + * UPNP_E_OUTOF_MEMORY: note: alias_content is not freed here + ************************************************************************/ int web_server_set_alias( IN const char *alias_name, IN const char *alias_content, @@ -516,19 +517,19 @@ web_server_set_alias( IN const char *alias_name, } /************************************************************************ -* Function: web_server_init -* -* Parameters: -* none -* -* Description: Initilialize the different documents. Initialize the -* memory for root directory for web server. Call to initialize global -* XML document. Sets bWebServerState to WEB_SERVER_ENABLED -* -* Returns: -* 0 - OK -* UPNP_E_OUTOF_MEMORY: note: alias_content is not freed here -************************************************************************/ + * Function: web_server_init + * + * Parameters: + * none + * + * Description: Initilialize the different documents. Initialize the + * memory for root directory for web server. Call to initialize global + * XML document. Sets bWebServerState to WEB_SERVER_ENABLED + * + * Returns: + * 0 - OK + * UPNP_E_OUTOF_MEMORY: note: alias_content is not freed here + ************************************************************************/ int web_server_init( void ) { @@ -552,18 +553,18 @@ web_server_init( void ) } /************************************************************************ -* Function: web_server_destroy -* -* Parameters: -* none -* -* Description: Release memory allocated for the global web server root -* directory and the global XML document -* Resets the flag bWebServerState to WEB_SERVER_DISABLED -* -* Returns: -* void -************************************************************************/ + * Function: web_server_destroy + * + * Parameters: + * none + * + * Description: Release memory allocated for the global web server root + * directory and the global XML document + * Resets the flag bWebServerState to WEB_SERVER_DISABLED + * + * Returns: + * void + ************************************************************************/ void web_server_destroy( void ) { @@ -584,23 +585,22 @@ web_server_destroy( void ) } /************************************************************************ -* Function: get_file_info -* -* Parameters: -* IN const char* filename ; Filename having the description document -* OUT struct File_Info * info ; File information object having file -* attributes such as filelength, when was -* the file last modified, whether a file -* or a directory and whether the file or -* directory is readable. -* -* Description: Release memory allocated for the global web server root -* directory and the global XML document -* Resets the flag bWebServerState to WEB_SERVER_DISABLED -* -* Returns: -* int -************************************************************************/ + * Function: get_file_info + * + * Parameters: + * IN const char* filename ; Filename having the description document + * OUT struct File_Info * info ; File information object having file + * attributes such as filelength, when was the file last + * modified, whether a file or a directory and whether the + * file or directory is readable. + * + * Description: Release memory allocated for the global web server root + * directory and the global XML document + * Resets the flag bWebServerState to WEB_SERVER_DISABLED + * + * Returns: + * int + ************************************************************************/ static int get_file_info( IN const char *filename, OUT struct File_Info *info ) @@ -647,19 +647,19 @@ get_file_info( IN const char *filename, } /************************************************************************ -* Function: web_server_set_root_dir -* -* Parameters: -* IN const char* root_dir ; String having the root directory for the -* document -* -* Description: Assign the path specfied by the IN const char* root_dir -* parameter to the global Document root directory. Also check for -* path names ending in '/' -* -* Returns: -* int -************************************************************************/ + * Function: web_server_set_root_dir + * + * Parameters: + * IN const char* root_dir ; String having the root directory for the + * document + * + * Description: Assign the path specfied by the IN const char* root_dir + * parameter to the global Document root directory. Also check for + * path names ending in '/' + * + * Returns: + * int + ************************************************************************/ int web_server_set_root_dir( IN const char *root_dir ) { @@ -682,24 +682,23 @@ web_server_set_root_dir( IN const char *root_dir ) } /************************************************************************ -* Function: get_alias -* -* Parameters: -* IN const char* request_file ; request file passed in to be compared with -* OUT struct xml_alias_t* alias ; xml alias object which has a file name -* stored -* OUT struct File_Info * info ; File information object which will be -* filled up if the file comparison -* succeeds -* -* Description: Compare the files names between the one on the XML alias -* the one passed in as the input parameter. If equal extract file -* information -* -* Returns: -* TRUE - On Success -* FALSE if request is not an alias -************************************************************************/ + * Function: get_alias + * + * Parameters: + * IN const char* request_file ; request file passed in to be compared with + * OUT struct xml_alias_t* alias ; xml alias object which has a file name + * stored + * OUT struct File_Info * info ; File information object which will be + * filled up if the file comparison succeeds + * + * Description: Compare the files names between the one on the XML alias + * the one passed in as the input parameter. If equal extract file + * information + * + * Returns: + * TRUE - On Success + * FALSE if request is not an alias + ************************************************************************/ static UPNP_INLINE xboolean get_alias( IN const char *request_file, OUT struct xml_alias_t *alias, @@ -720,17 +719,17 @@ get_alias( IN const char *request_file, } /************************************************************************ -* Function: isFileInVirtualDir -* -* Parameters: -* IN char *filePath ; directory path to be tested for virtual directory -* -* Description: Compares filePath with paths from the list of virtual -* directory lists -* -* Returns: -* BOOLEAN -************************************************************************/ + * Function: isFileInVirtualDir + * + * Parameters: + * IN char *filePath ; directory path to be tested for virtual directory + * + * Description: Compares filePath with paths from the list of virtual + * directory lists + * + * Returns: + * BOOLEAN + ************************************************************************/ int isFileInVirtualDir( IN char *filePath ) { @@ -757,16 +756,16 @@ isFileInVirtualDir( IN char *filePath ) } /************************************************************************ -* Function: ToUpperCase -* -* Parameters: -* INOUT char * Str ; Input string to be converted -* -* Description: Converts input string to upper case -* -* Returns: -* int -************************************************************************/ + * Function: ToUpperCase + * + * Parameters: + * INOUT char * Str ; Input string to be converted + * + * Description: Converts input string to upper case + * + * Returns: + * int + ************************************************************************/ int ToUpperCase( char *Str ) { @@ -779,17 +778,17 @@ ToUpperCase( char *Str ) } /************************************************************************ -* Function: StrStr -* -* Parameters: -* IN char * S1 ; Input string -* IN char * S2 ; Input sub-string -* -* Description: Finds a substring from a string -* -* Returns: -* char * ptr - pointer to the first occurence of S2 in S1 -************************************************************************/ + * Function: StrStr + * + * Parameters: + * IN char * S1 ; Input string + * IN char * S2 ; Input sub-string + * + * Description: Finds a substring from a string + * + * Returns: + * char * ptr - pointer to the first occurence of S2 in S1 + ************************************************************************/ char * StrStr( char *S1, char *S2 ) @@ -829,17 +828,17 @@ StrStr( char *S1, } /************************************************************************ -* Function: StrTok -* -* Parameters: -* IN char ** Src ; String containing the token -* IN char * del ; Set of delimiter characters -* -* Description: Finds next token in a string -* -* Returns: -* char * ptr - pointer to the first occurence of S2 in S1 -************************************************************************/ + * Function: StrTok + * + * Parameters: + * IN char ** Src ; String containing the token + * IN char * del ; Set of delimiter characters + * + * Description: Finds next token in a string + * + * Returns: + * char * ptr - pointer to the first occurence of S2 in S1 + ************************************************************************/ char * StrTok( char **Src, char *Del ) @@ -863,18 +862,18 @@ StrTok( char **Src, } /************************************************************************ -* Function: GetNextRange -* -* Parameters: -* IN char ** SrcRangeStr ; string containing the token / range -* OUT int * FirstByte ; gets the first byte of the token -* OUT int * LastByte ; gets the last byte of the token -* -* Description: Returns a range of integers from a sring -* -* Returns: int ; -* always returns 1; -************************************************************************/ + * Function: GetNextRange + * + * Parameters: + * IN char ** SrcRangeStr ; string containing the token / range + * OUT int * FirstByte ; gets the first byte of the token + * OUT int * LastByte ; gets the last byte of the token + * + * Description: Returns a range of integers from a string + * + * Returns: int ; + * always returns 1; + ************************************************************************/ int GetNextRange( char **SrcRangeStr, off_t *FirstByte, @@ -924,23 +923,23 @@ GetNextRange( char **SrcRangeStr, } /************************************************************************ -* Function: CreateHTTPRangeResponseHeader -* -* Parameters: -* char * ByteRangeSpecifier ; String containing the range -* long FileLength ; Length of the file -* OUT struct SendInstruction * Instr ; SendInstruction object where the -* range operations will be stored -* -* Description: Fills in the Offset, read size and contents to send out -* as an HTTP Range Response -* -* Returns: -* HTTP_BAD_REQUEST -* UPNP_E_OUTOF_MEMORY -* HTTP_REQUEST_RANGE_NOT_SATISFIABLE -* HTTP_OK -************************************************************************/ + * Function: CreateHTTPRangeResponseHeader + * + * Parameters: + * char * ByteRangeSpecifier ; String containing the range + * long FileLength ; Length of the file + * OUT struct SendInstruction * Instr ; SendInstruction object + * where the range operations will be stored + * + * Description: Fills in the Offset, read size and contents to send out + * as an HTTP Range Response + * + * Returns: + * HTTP_BAD_REQUEST + * UPNP_E_OUTOF_MEMORY + * HTTP_REQUEST_RANGE_NOT_SATISFIABLE + * HTTP_OK + ************************************************************************/ int CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier, off_t FileLength, @@ -1036,24 +1035,24 @@ CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier, } /************************************************************************ -* Function: CheckOtherHTTPHeaders -* -* Parameters: -* IN http_message_t * Req ; HTTP Request message -* OUT struct SendInstruction * RespInstr ; Send Instruction object to -* data for the response -* int FileSize ; Size of the file containing the request document -* -* Description: Get header id from the request parameter and take -* appropriate action based on the ids. -* as an HTTP Range Response -* -* Returns: -* HTTP_BAD_REQUEST -* UPNP_E_OUTOF_MEMORY -* HTTP_REQUEST_RANGE_NOT_SATISFIABLE -* HTTP_OK -************************************************************************/ + * Function: CheckOtherHTTPHeaders + * + * Parameters: + * IN http_message_t * Req ; HTTP Request message + * OUT struct SendInstruction * RespInstr ; Send Instruction object to + * data for the response + * int FileSize ; Size of the file containing the request document + * + * Description: Get header id from the request parameter and take + * appropriate action based on the ids. + * as an HTTP Range Response + * + * Returns: + * HTTP_BAD_REQUEST + * UPNP_E_OUTOF_MEMORY + * HTTP_REQUEST_RANGE_NOT_SATISFIABLE + * HTTP_OK + ************************************************************************/ int CheckOtherHTTPHeaders( IN http_message_t * Req, OUT struct SendInstruction *RespInstr, @@ -1167,27 +1166,27 @@ CheckOtherHTTPHeaders( IN http_message_t * Req, } /************************************************************************ -* Function: process_request -* -* Parameters: -* IN http_message_t *req ; HTTP Request message -* OUT enum resp_type *rtype ; Tpye of response -* OUT membuffer *headers ; -* OUT membuffer *filename ; Get filename from request document -* OUT struct xml_alias_t *alias ; Xml alias document from the -* request document, -* OUT struct SendInstruction * RespInstr ; Send Instruction object -* where the response is set up. -* -* Description: Processes the request and returns the result in the OUT -* parameters -* -* Returns: -* HTTP_BAD_REQUEST -* UPNP_E_OUTOF_MEMORY -* HTTP_REQUEST_RANGE_NOT_SATISFIABLE -* HTTP_OK -************************************************************************/ + * Function: process_request + * + * Parameters: + * IN http_message_t *req ; HTTP Request message + * OUT enum resp_type *rtype ; Tpye of response + * OUT membuffer *headers ; + * OUT membuffer *filename ; Get filename from request document + * OUT struct xml_alias_t *alias ; Xml alias document from the + * request document, + * OUT struct SendInstruction * RespInstr ; Send Instruction object + * where the response is set up. + * + * Description: Processes the request and returns the result in the OUT + * parameters + * + * Returns: + * HTTP_BAD_REQUEST + * UPNP_E_OUTOF_MEMORY + * HTTP_REQUEST_RANGE_NOT_SATISFIABLE + * HTTP_OK + ************************************************************************/ static int process_request( IN http_message_t * req, OUT enum resp_type *rtype, @@ -1495,23 +1494,23 @@ process_request( IN http_message_t * req, } /************************************************************************ -* Function: http_RecvPostMessage -* -* Parameters: -* http_parser_t* parser ; HTTP Parser object -* IN SOCKINFO *info ; Socket Information object -* char * filename ; File where received data is copied to -* struct SendInstruction * Instr ; Send Instruction object which gives -* information whether the file is a virtual file or not. -* -* Description: Receives the HTTP post message -* -* Returns: -* HTTP_INTERNAL_SERVER_ERROR -* HTTP_UNAUTHORIZED -* HTTP_REQUEST_RANGE_NOT_SATISFIABLE -* HTTP_OK -************************************************************************/ + * Function: http_RecvPostMessage + * + * Parameters: + * http_parser_t* parser ; HTTP Parser object + * IN SOCKINFO *info ; Socket Information object + * char * filename ; File where received data is copied to + * struct SendInstruction * Instr ; Send Instruction object which gives + * information whether the file is a virtual file or not. + * + * Description: Receives the HTTP post message + * + * Returns: + * HTTP_INTERNAL_SERVER_ERROR + * HTTP_UNAUTHORIZED + * HTTP_REQUEST_RANGE_NOT_SATISFIABLE + * HTTP_OK + ************************************************************************/ int http_RecvPostMessage( http_parser_t * parser, IN SOCKINFO * info, @@ -1659,19 +1658,19 @@ http_RecvPostMessage( http_parser_t * parser, } /************************************************************************ -* Function: web_server_callback -* -* Parameters: -* IN http_parser_t *parser ; HTTP Parser Object -* INOUT http_message_t* req ; HTTP Message request -* IN SOCKINFO *info ; Socket information object -* -* Description: main entry point into web server; -* handles HTTP GET and HEAD requests -* -* Returns: -* void -************************************************************************/ + * Function: web_server_callback + * + * Parameters: + * IN http_parser_t *parser ; HTTP Parser Object + * INOUT http_message_t* req ; HTTP Message request + * IN SOCKINFO *info ; Socket information object + * + * Description: main entry point into web server; + * handles HTTP GET and HEAD requests + * + * Returns: + * void + ************************************************************************/ void web_server_callback( IN http_parser_t * parser, INOUT http_message_t * req, @@ -1764,3 +1763,4 @@ web_server_callback( IN http_parser_t * parser, membuffer_destroy( &headers ); membuffer_destroy( &filename ); } + diff --git a/upnp/src/inc/miniserver.h b/upnp/src/inc/miniserver.h index fbe9faf..ab1229a 100644 --- a/upnp/src/inc/miniserver.h +++ b/upnp/src/inc/miniserver.h @@ -1,154 +1,150 @@ -/////////////////////////////////////////////////////////////////////////// -// -// 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. -// -/////////////////////////////////////////////////////////////////////////// +/************************************************************************ + * + * 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 MINISERVER_H #define MINISERVER_H + #include "sock.h" #include "httpparser.h" + extern SOCKET gMiniServerStopSock; + typedef struct MServerSockArray { - int miniServerSock; //socket for listening for miniserver - //requests - int miniServerStopSock; //socket for stopping miniserver - int ssdpSock; //socket for incoming advertisments and search requests + /* socket for listening for miniserver requests */ + int miniServerSock; + /* socket for stopping miniserver */ + int miniServerStopSock; + /* socket for incoming advertisments and search requests */ + int ssdpSock; - int stopPort; - int miniServerPort; + int stopPort; + int miniServerPort; - CLIENTONLY(int ssdpReqSock;) //socket for sending search - //requests and receiving - // search replies - + /* socket for sending search requests and receiving search replies */ + CLIENTONLY(int ssdpReqSock;) } MiniServerSockArray; -//typedef void (*MiniServerCallback) ( const char* document, int sockfd ); -typedef void (*MiniServerCallback) ( IN http_parser_t *parser, - IN http_message_t* request, - IN SOCKINFO *info ); +typedef void (*MiniServerCallback)( + IN http_parser_t *parser, + IN http_message_t* request, + IN SOCKINFO *info ); + #ifdef __cplusplus extern "C" { #endif /************************************************************************ -* Function : SetHTTPGetCallback -* -* Parameters : -* MiniServerCallback callback ; - HTTP Callback to be invoked -* -* Description : Set HTTP Get Callback -* -* Return : void -* -* Note : -************************************************************************/ + * Function: SetHTTPGetCallback + * + * Parameters: + * MiniServerCallback callback; - HTTP Callback to be invoked + * + * Description: Set HTTP Get Callback + * + * Return: void + ************************************************************************/ void SetHTTPGetCallback( MiniServerCallback callback ); /************************************************************************ -* Function : SetSoapCallback -* -* Parameters : -* MiniServerCallback callback ; - SOAP Callback to be invoked -* -* Description : Set SOAP Callback -* -* Return : void -* -* Note : -************************************************************************/ + * Function: SetSoapCallback + * + * Parameters: + * MiniServerCallback callback; - SOAP Callback to be invoked + * + * Description: Set SOAP Callback + * + * Return: void + ************************************************************************/ #ifdef INCLUDE_DEVICE_APIS void SetSoapCallback( MiniServerCallback callback ); -#else +#else /* INCLUDE_DEVICE_APIS */ static inline void SetSoapCallback( MiniServerCallback callback ) {} -#endif +#endif /* INCLUDE_DEVICE_APIS */ /************************************************************************ -* Function : SetGenaCallback -* -* Parameters : -* MiniServerCallback callback ; - GENA Callback to be invoked -* -* Description : Set GENA Callback -* -* Return : void -* -* Note : -************************************************************************/ + * Function: SetGenaCallback + * + * Parameters: + * MiniServerCallback callback; - GENA Callback to be invoked + * + * D6escription: Set GENA Callback + * + * Return: void + ************************************************************************/ void SetGenaCallback( MiniServerCallback callback ); /************************************************************************ -* Function : StartMiniServer -* -* Parameters : -* unsigned short listen_port ; Port on which the server listens for -* incoming connections -* -* Description : Initialize the sockets functionality for the -* Miniserver. Initialize a thread pool job to run the MiniServer -* and the job to the thread pool. If listen port is 0, port is -* dynamically picked -* -* Use timer mechanism to start the MiniServer, failure to meet the -* allowed delay aborts the attempt to launch the MiniServer. -* -* Return : int ; -* Actual port socket is bound to - On Success: -* A negative number UPNP_E_XXX - On Error -* Note : -************************************************************************/ + * Function: StartMiniServer + * + * Parameters: + * unsigned short listen_port ; Port on which the server listens for + * incoming connections + * + * Description: Initialize the sockets functionality for the + * Miniserver. Initialize a thread pool job to run the MiniServer + * and the job to the thread pool. If listen port is 0, port is + * dynamically picked + * + * Use timer mechanism to start the MiniServer, failure to meet the + * allowed delay aborts the attempt to launch the MiniServer. + * + * Return: int; + * Actual port socket is bound to - On Success: + * A negative number UPNP_E_XXX - On Error + ************************************************************************/ int StartMiniServer( unsigned short listen_port ); /************************************************************************ -* Function : StopMiniServer -* -* Parameters : -* void ; -* -* Description : Stop and Shutdown the MiniServer and free socket -* resources. -* -* Return : int ; -* Always returns 0 -* -* Note : -************************************************************************/ -int StopMiniServer( void ); + * Function: StopMiniServer + * + * Parameters: + * void; + * + * Description: Stop and Shutdown the MiniServer and free socket resources. + * + * Return : int; + * Always returns 0 + ************************************************************************/ +int StopMiniServer(); #ifdef __cplusplus } /* extern C */ #endif + #endif /* MINISERVER_H */ + diff --git a/upnp/src/ssdp/ssdp_server.c b/upnp/src/ssdp/ssdp_server.c index bc2300f..081485a 100644 --- a/upnp/src/ssdp/ssdp_server.c +++ b/upnp/src/ssdp/ssdp_server.c @@ -43,56 +43,54 @@ #include "httpreadwrite.h" #ifdef WIN32 - #include - #include - #include "unixutil.h" + #include + #include + #include "unixutil.h" #endif #define MAX_TIME_TOREAD 45 -CLIENTONLY( SOCKET gSsdpReqSocket = 0; - ) +CLIENTONLY( SOCKET gSsdpReqSocket = 0; ) - void RequestHandler( ); - Event ErrotEvt; +void RequestHandler(); +Event ErrotEvt; - enum Listener { Idle, Stopping, Running }; +enum Listener { Idle, Stopping, Running }; - unsigned short ssdpStopPort; +unsigned short ssdpStopPort; - struct SSDPSockArray { - int ssdpSock; //socket for incoming advertisments and search requests - CLIENTONLY( int ssdpReqSock; - ) //socket for sending search - //requests and receiving - // search replies - }; +struct SSDPSockArray { + // socket for incoming advertisments and search requests + int ssdpSock; + // socket for sending search requests and receiving search replies + CLIENTONLY( int ssdpReqSock; ) +}; #ifdef INCLUDE_DEVICE_APIS #if EXCLUDE_SSDP == 0 /************************************************************************ -* Function : AdvertiseAndReply -* -* Parameters: -* IN int AdFlag: -* -1 = Send shutdown, -* 0 = send reply, -* 1 = Send Advertisement -* IN UpnpDevice_Handle Hnd: Device handle -* IN enum SsdpSearchType SearchType:Search type for sending replies -* IN struct sockaddr_in *DestAddr:Destination address -* IN char *DeviceType:Device type -* IN char *DeviceUDN:Device UDN -* IN char *ServiceType:Service type -* IN int Exp:Advertisement age -* -* Description: -* This function sends SSDP advertisements, replies and shutdown messages. -* -* Returns: int -* UPNP_E_SUCCESS if successful else appropriate error -***************************************************************************/ + * Function : AdvertiseAndReply + * + * Parameters: + * IN int AdFlag: + * -1 = Send shutdown, + * 0 = send reply, + * 1 = Send Advertisement + * IN UpnpDevice_Handle Hnd: Device handle + * IN enum SsdpSearchType SearchType:Search type for sending replies + * IN struct sockaddr_in *DestAddr:Destination address + * IN char *DeviceType:Device type + * IN char *DeviceUDN:Device UDN + * IN char *ServiceType:Service type + * IN int Exp:Advertisement age + * + * Description: + * This function sends SSDP advertisements, replies and shutdown messages. + * + * Returns: int + * UPNP_E_SUCCESS if successful else appropriate error + ***************************************************************************/ int AdvertiseAndReply( IN int AdFlag, IN UpnpDevice_Handle Hnd, IN enum SsdpSearchType SearchType, @@ -129,7 +127,6 @@ int AdvertiseAndReply( IN int AdFlag, return UPNP_E_INVALID_HANDLE; } defaultExp = SInfo->MaxAge; - nodeList = NULL; //get server info @@ -398,21 +395,21 @@ int AdvertiseAndReply( IN int AdFlag, } /****************** End of AdvertiseAndReply *********************/ -#endif -#endif +#endif /* EXCLUDE_SSDP == 0 */ +#endif /* INCLUDE_DEVICE_APIS */ /************************************************************************ -* Function : Make_Socket_NoBlocking -* -* Parameters: -* IN int sock: socket -* -* Description: -* This function makes socket non-blocking. -* -* Returns: int -* 0 if successful else -1 -***************************************************************************/ + * Function : Make_Socket_NoBlocking + * + * Parameters: + * IN int sock: socket + * + * Description: + * This function makes socket non-blocking. + * + * Returns: int + * 0 if successful else -1 + ***************************************************************************/ int Make_Socket_NoBlocking( int sock ) { @@ -431,20 +428,20 @@ Make_Socket_NoBlocking( int sock ) } /************************************************************************ -* Function : unique_service_name -* -* Parameters: -* IN char *cmd: Service Name string -* OUT SsdpEvent *Evt: The SSDP event structure partially filled -* by all the function. -* -* Description: -* This function fills the fields of the event structure like DeviceType, -* Device UDN and Service Type -* -* Returns: int -* 0 if successful else -1 -***************************************************************************/ + * Function : unique_service_name + * + * Parameters: + * IN char *cmd: Service Name string + * OUT SsdpEvent *Evt: The SSDP event structure partially filled + * by all the function. + * + * Description: + * This function fills the fields of the event structure like DeviceType, + * Device UDN and Service Type + * + * Returns: int + * 0 if successful else -1 + ***************************************************************************/ int unique_service_name( IN char *cmd, IN SsdpEvent * Evt ) @@ -526,18 +523,18 @@ unique_service_name( IN char *cmd, } /************************************************************************ -* Function : ssdp_request_type1 -* -* Parameters: -* IN char *cmd: command came in the ssdp request -* -* Description: -* This function figures out the type of the SSDP search in the -* in the request. -* -* Returns: enum SsdpSearchType -* return appropriate search type else returns SSDP_ERROR -***************************************************************************/ + * Function : ssdp_request_type1 + * + * Parameters: + * IN char *cmd: command came in the ssdp request + * + * Description: + * This function figures out the type of the SSDP search in the + * in the request. + * + * Returns: enum SsdpSearchType + * return appropriate search type else returns SSDP_ERROR + ***************************************************************************/ enum SsdpSearchType ssdp_request_type1( IN char *cmd ) { @@ -562,20 +559,20 @@ ssdp_request_type1( IN char *cmd ) } /************************************************************************ -* Function : ssdp_request_type -* -* Parameters: -* IN char *cmd: command came in the ssdp request -* OUT SsdpEvent *Evt: The event structure partially filled by -* this function. -* -* Description: -* This function starts filling the SSDP event structure based upon the -* request received. -* -* Returns: int -* 0 on success; -1 on error -***************************************************************************/ + * Function : ssdp_request_type + * + * Parameters: + * IN char *cmd: command came in the ssdp request + * OUT SsdpEvent *Evt: The event structure partially filled by + * this function. + * + * Description: + * This function starts filling the SSDP event structure based upon the + * request received. + * + * Returns: int + * 0 on success; -1 on error + ***************************************************************************/ int ssdp_request_type( IN char *cmd, OUT SsdpEvent * Evt ) @@ -593,18 +590,18 @@ ssdp_request_type( IN char *cmd, } /************************************************************************ -* Function : free_ssdp_event_handler_data -* -* Parameters: -* IN void *the_data: ssdp_thread_data structure. This structure contains -* SSDP request message. -* -* Description: -* This function frees the ssdp request -* -* Returns: VOID -* -***************************************************************************/ + * Function : free_ssdp_event_handler_data + * + * Parameters: + * IN void *the_data: ssdp_thread_data structure. This structure contains + * SSDP request message. + * + * Description: + * This function frees the ssdp request + * + * Returns: VOID + * + ***************************************************************************/ static void free_ssdp_event_handler_data( void *the_data ) { @@ -620,18 +617,18 @@ free_ssdp_event_handler_data( void *the_data ) } /************************************************************************ -* Function : valid_ssdp_msg -* -* Parameters: -* IN void *the_data: ssdp_thread_data structure. This structure contains -* SSDP request message. -* -* Description: -* This function do some quick checking of the ssdp msg -* -* Returns: xboolean -* returns TRUE if msg is valid else FALSE -***************************************************************************/ + * Function : valid_ssdp_msg + * + * Parameters: + * IN void *the_data: ssdp_thread_data structure. This structure contains + * SSDP request message. + * + * Description: + * This function do some quick checking of the ssdp msg + * + * Returns: xboolean + * returns TRUE if msg is valid else FALSE + ***************************************************************************/ static UPNP_INLINE xboolean valid_ssdp_msg( IN http_message_t * hmsg ) { @@ -661,19 +658,19 @@ valid_ssdp_msg( IN http_message_t * hmsg ) } /************************************************************************ -* Function : start_event_handler -* -* Parameters: -* IN void *the_data: ssdp_thread_data structure. This structure contains -* SSDP request message. -* -* Description: -* This function parses the message and dispatches it to a handler -* which handles the ssdp request msg -* -* Returns: int -* 0 if successful -1 if error -***************************************************************************/ + * Function : start_event_handler + * + * Parameters: + * IN void *the_data: ssdp_thread_data structure. This structure contains + * SSDP request message. + * + * Description: + * This function parses the message and dispatches it to a handler + * which handles the ssdp request msg + * + * Returns: int + * 0 if successful -1 if error + ***************************************************************************/ static UPNP_INLINE int start_event_handler( void *Data ) { @@ -713,18 +710,18 @@ start_event_handler( void *Data ) } /************************************************************************ -* Function : ssdp_event_handler_thread -* -* Parameters: -* IN void *the_data: ssdp_thread_data structure. This structure contains -* SSDP request message. -* -* Description: -* This function is a thread that handles SSDP requests. -* -* Returns: void -* -***************************************************************************/ + * Function : ssdp_event_handler_thread + * + * Parameters: + * IN void *the_data: ssdp_thread_data structure. This structure contains + * SSDP request message. + * + * Description: + * This function is a thread that handles SSDP requests. + * + * Returns: void + * + ***************************************************************************/ static void ssdp_event_handler_thread( void *the_data ) { @@ -737,8 +734,7 @@ ssdp_event_handler_thread( void *the_data ) // send msg to device or ctrlpt if( ( hmsg->method == HTTPMETHOD_NOTIFY ) || ( hmsg->request_method == HTTPMETHOD_MSEARCH ) ) { - CLIENTONLY( ssdp_handle_ctrlpt_msg( hmsg, &data->dest_addr, - FALSE, NULL );); + CLIENTONLY( ssdp_handle_ctrlpt_msg( hmsg, &data->dest_addr, FALSE, NULL );) } else { ssdp_handle_device_request( hmsg, &data->dest_addr ); } @@ -748,17 +744,17 @@ ssdp_event_handler_thread( void *the_data ) } /************************************************************************ -* Function : readFromSSDPSocket -* -* Parameters: -* IN SOCKET socket: SSDP socket -* -* Description: -* This function reads the data from the ssdp socket. -* -* Returns: void -* -***************************************************************************/ + * Function : readFromSSDPSocket + * + * Parameters: + * IN SOCKET socket: SSDP socket + * + * Description: + * This function reads the data from the ssdp socket. + * + * Returns: void + * + ***************************************************************************/ void readFromSSDPSocket( SOCKET socket ) { @@ -845,32 +841,31 @@ readFromSSDPSocket( SOCKET socket ) } /************************************************************************ -* Function : get_ssdp_sockets -* -* Parameters: -* OUT MiniServerSockArray *out: Arrays of SSDP sockets -* -* Description: -* This function creates the ssdp sockets. It set their option to listen -* for multicast traffic. -* -* Returns: int -* return UPNP_E_SUCCESS if successful else returns appropriate error -***************************************************************************/ + * Function : get_ssdp_sockets + * + * Parameters: + * OUT MiniServerSockArray *out: Arrays of SSDP sockets + * + * Description: + * This function creates the ssdp sockets. It set their option to listen + * for multicast traffic. + * + * Returns: int + * return UPNP_E_SUCCESS if successful else returns appropriate error + ***************************************************************************/ int get_ssdp_sockets( MiniServerSockArray * out ) { - SOCKET ssdpSock; - - CLIENTONLY( SOCKET ssdpReqSock; ) int onOff = 1; u_char ttl = 4; struct ip_mreq ssdpMcastAddr; struct sockaddr_in ssdpAddr; int option = 1; struct in_addr addr; + SOCKET ssdpSock; +#if INCLUDE_CLIENT_APIS + SOCKET ssdpReqSock; -CLIENTONLY( if( ( ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) == UPNP_INVALID_SOCKET ) { UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, @@ -880,15 +875,15 @@ CLIENTONLY( setsockopt( ssdpReqSock, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof( ttl ) ); // just do it, regardless if fails or not. Make_Socket_NoBlocking( ssdpReqSock ); - gSsdpReqSocket = ssdpReqSock; ) -// END CLIENTONLY + gSsdpReqSocket = ssdpReqSock; +#endif /* INCLUDE_CLIENT_APIS */ if( ( ssdpSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) == UPNP_INVALID_SOCKET ) { UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, "Error in socket operation !!!\n" ); - CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) ); - CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); + CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) + CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) return UPNP_E_OUTOF_SOCKET; } @@ -898,26 +893,26 @@ CLIENTONLY( UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, "Error in set reuse addr !!!\n" ); - CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) ); - CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); + CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) + CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) shutdown( ssdpSock, SD_BOTH ); UpnpCloseSocket( ssdpSock ); return UPNP_E_SOCKET_ERROR; } - #ifdef __FreeBSD__ +#ifdef __FreeBSD__ if( setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEPORT, ( char * )&onOff, sizeof( onOff ) ) != 0 ) { UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, "Error in set reuse port !!!\n" ); - CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) ); - CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); + CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) + CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) shutdown( ssdpSock, SD_BOTH ); UpnpCloseSocket( ssdpSock ); return UPNP_E_SOCKET_ERROR; } - #endif +#endif /* __FreeBSD__ */ memset( ( void * )&ssdpAddr, 0, sizeof( struct sockaddr_in ) ); ssdpAddr.sin_family = AF_INET; @@ -931,8 +926,8 @@ CLIENTONLY( "Error in binding !!!\n" ); shutdown( ssdpSock, SD_BOTH ); UpnpCloseSocket( ssdpSock ); - CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) ); - CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); + CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) + CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) return UPNP_E_SOCKET_BIND; } @@ -945,9 +940,9 @@ CLIENTONLY( SSDP, __FILE__, __LINE__, "Error in joining" " multicast group !!!\n" ); shutdown( ssdpSock, SD_BOTH ); - CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) ); + CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) UpnpCloseSocket( ssdpSock ); - CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); + CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) return UPNP_E_SOCKET_ERROR; } @@ -961,7 +956,7 @@ CLIENTONLY( /* This is probably not a critical error, so let's continue. */ } - // result is not checked becuase it will fail in WinMe and Win9x. + /* result is not checked becuase it will fail in WinMe and Win9x. */ setsockopt( ssdpSock, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof( ttl ) ); if( setsockopt( ssdpSock, SOL_SOCKET, SO_BROADCAST, @@ -970,16 +965,16 @@ CLIENTONLY( SSDP, __FILE__, __LINE__, "Error in setting broadcast !!!\n" ); shutdown( ssdpSock, SD_BOTH ); - CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) ); + CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) UpnpCloseSocket( ssdpSock ); - CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); + CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) return UPNP_E_NETWORK_ERROR; } - CLIENTONLY( out->ssdpReqSock = ssdpReqSock; ); + CLIENTONLY( out->ssdpReqSock = ssdpReqSock; ) out->ssdpSock = ssdpSock; return UPNP_E_SUCCESS; } -#endif // EXCLUDE_SSDP +#endif /* EXCLUDE_SSDP */