- Fixed a bug in UpnpPrintf, function could call va_start() and return
befor calling va_end(). - Removed all uses of the DBGONLY(x) macro. A static inline empty function now is used and the compiler takes care of optimizing it out. git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/trunk@185 119443c7-1b9e-41f8-b6fc-b9c35fce742c
This commit is contained in:
parent
4ceb6c67d1
commit
2c1dba2942
44
ChangeLog
44
ChangeLog
@ -1,6 +1,14 @@
|
|||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.7
|
Version 1.4.7
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
|
2007-05-17 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
|
* Removed all uses of the DBGONLY(x) macro. A static inline empty
|
||||||
|
function now is used and the compiler takes care of optimizing it out.
|
||||||
|
|
||||||
|
2007-05-17 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
|
* Fixed a bug in UpnpPrintf, function could call va_start() and return
|
||||||
|
befor calling va_end().
|
||||||
|
|
||||||
2007-05-15 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
2007-05-15 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
* EXPORT_SPEC missing on some declarations in ixml/inc/ixml.h.
|
* EXPORT_SPEC missing on some declarations in ixml/inc/ixml.h.
|
||||||
@ -31,16 +39,16 @@ Version 1.4.7
|
|||||||
tarball and executes upnp_tv_device from its creation directory,
|
tarball and executes upnp_tv_device from its creation directory,
|
||||||
there will be no error -108 for not finding directory web.
|
there will be no error -108 for not finding directory web.
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.6
|
Version 1.4.6
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2007-04-19 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
2007-04-19 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
* Fix for freebsd host_os in configure.ac.
|
* Fix for freebsd host_os in configure.ac.
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.5
|
Version 1.4.5
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2007-04-19 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
2007-04-19 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
* Case insensitive comparison in raw_find_str() (httpparser.c) as
|
* Case insensitive comparison in raw_find_str() (httpparser.c) as
|
||||||
@ -66,9 +74,9 @@ Version 1.4.5
|
|||||||
(int instead of size_t) in combination with format "b" and "Q".
|
(int instead of size_t) in combination with format "b" and "Q".
|
||||||
The attached patch should fix this.
|
The attached patch should fix this.
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.4
|
Version 1.4.4
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2007-04-06 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
2007-04-06 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
* SF Tracker [ 1695399 ] Typo in util.h
|
* SF Tracker [ 1695399 ] Typo in util.h
|
||||||
@ -103,9 +111,9 @@ Version 1.4.4
|
|||||||
Please note, that I enabled some extra debugging lines that were commented,
|
Please note, that I enabled some extra debugging lines that were commented,
|
||||||
in order to get more information. See attached files.
|
in order to get more information. See attached files.
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.3
|
Version 1.4.3
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2007-03-13 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
2007-03-13 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
* SF Tracker [ 1663004 ] Compile on Cygwin
|
* SF Tracker [ 1663004 ] Compile on Cygwin
|
||||||
@ -140,9 +148,9 @@ Version 1.4.3
|
|||||||
|
|
||||||
* Fixed nasty segmentation fault bug on membuffer.c.
|
* Fixed nasty segmentation fault bug on membuffer.c.
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.2
|
Version 1.4.2
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2007-02-09 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
2007-02-09 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||||
|
|
||||||
@ -244,9 +252,9 @@ Version 1.4.2
|
|||||||
* support for large files (>2 GBytes) added
|
* support for large files (>2 GBytes) added
|
||||||
|
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.1
|
Version 1.4.1
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2006-07-07 Oxy <virtual_worlds(at)gmx.de>
|
2006-07-07 Oxy <virtual_worlds(at)gmx.de>
|
||||||
|
|
||||||
@ -277,9 +285,9 @@ Version 1.4.1
|
|||||||
* Patch to fix memory leaks and reasons for crashes added (thanks
|
* Patch to fix memory leaks and reasons for crashes added (thanks
|
||||||
to loigu)
|
to loigu)
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
Version 1.4.0
|
Version 1.4.0
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2006-05-26 Oxy <virtual_worlds(at)gmx.de>
|
2006-05-26 Oxy <virtual_worlds(at)gmx.de>
|
||||||
|
|
||||||
@ -305,9 +313,9 @@ Version 1.4.0
|
|||||||
|
|
||||||
* Bugfix for M-Search packet
|
* Bugfix for M-Search packet
|
||||||
|
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
FORK FROM DEAD libupnp
|
FORK FROM DEAD libupnp
|
||||||
*************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
2006-04-29 Rémi Turboult <r3mi(at)users.sourceforge.net>
|
2006-04-29 Rémi Turboult <r3mi(at)users.sourceforge.net>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* autoconfig.h. Generated by configure. */
|
/* autoconfig.h. Generated from autoconfig.h.in by configure. */
|
||||||
/* autoconfig.h.in. Generated from configure.ac by autoheader. */
|
/* autoconfig.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
/* Define to 1 to compile debug code */
|
/* Define to 1 to compile debug code */
|
||||||
@ -19,15 +19,18 @@
|
|||||||
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
|
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
|
||||||
#define HAVE_FSEEKO 1
|
#define HAVE_FSEEKO 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ftime' function. */
|
||||||
|
#define HAVE_FTIME 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
#define HAVE_INTTYPES_H 1
|
#define HAVE_INTTYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `compat' library (-lcompat). */
|
||||||
|
/* #undef HAVE_LIBCOMPAT */
|
||||||
|
|
||||||
/* Define to 1 if you have the <limits.h> header file. */
|
/* Define to 1 if you have the <limits.h> header file. */
|
||||||
#define HAVE_LIMITS_H 1
|
#define HAVE_LIMITS_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <malloc.h> header file. */
|
|
||||||
#define HAVE_MALLOC_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
#define HAVE_MEMORY_H 1
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
@ -92,19 +95,19 @@
|
|||||||
#define PACKAGE "libupnp"
|
#define PACKAGE "libupnp"
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
#define PACKAGE_BUGREPORT "virtual_worlds@gmx.de"
|
#define PACKAGE_BUGREPORT "mroberto@users.sourceforge.net"
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
/* Define to the full name of this package. */
|
||||||
#define PACKAGE_NAME "libupnp"
|
#define PACKAGE_NAME "libupnp"
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
/* Define to the full name and version of this package. */
|
||||||
#define PACKAGE_STRING "libupnp 1.4.0"
|
#define PACKAGE_STRING "libupnp 1.4.7"
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#define PACKAGE_TARNAME "libupnp"
|
#define PACKAGE_TARNAME "libupnp"
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#define PACKAGE_VERSION "1.4.0"
|
#define PACKAGE_VERSION "1.4.7"
|
||||||
|
|
||||||
/* Define to necessary symbol if this constant uses a non-standard name on
|
/* Define to necessary symbol if this constant uses a non-standard name on
|
||||||
your system. */
|
your system. */
|
||||||
@ -135,27 +138,30 @@
|
|||||||
#define UPNP_VERSION_MINOR 4
|
#define UPNP_VERSION_MINOR 4
|
||||||
|
|
||||||
/* see upnpconfig.h */
|
/* see upnpconfig.h */
|
||||||
#define UPNP_VERSION_PATCH 0
|
#define UPNP_VERSION_PATCH 7
|
||||||
|
|
||||||
/* see upnpconfig.h */
|
/* see upnpconfig.h */
|
||||||
#define UPNP_VERSION_STRING "1.4.0"
|
#define UPNP_VERSION_STRING "1.4.7"
|
||||||
|
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
#define VERSION "1.4.0"
|
#define VERSION "1.4.7"
|
||||||
|
|
||||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
/* File Offset size */
|
||||||
#define _FILE_OFFSET_BITS 64
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
|
||||||
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
|
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
|
||||||
/* #undef _LARGEFILE_SOURCE */
|
/* #undef _LARGEFILE_SOURCE */
|
||||||
|
|
||||||
/* Define for large files, on AIX-style hosts. */
|
/* Large files support */
|
||||||
/* #undef _LARGE_FILES */
|
#define _LARGE_FILE_SOURCE
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
/* #undef const */
|
/* #undef const */
|
||||||
|
|
||||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
/* Define to `long int' if <sys/types.h> does not define. */
|
||||||
|
/* #undef off_t */
|
||||||
|
|
||||||
|
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||||
/* #undef size_t */
|
/* #undef size_t */
|
||||||
|
|
||||||
/* Substitute for socklen_t */
|
/* Substitute for socklen_t */
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
|
|
||||||
#include "autoconfig.h"
|
#include "autoconfig.h"
|
||||||
|
|
||||||
#define MAX_JOBS_TOTAL 10
|
|
||||||
|
|
||||||
/** @name Compile time configuration options
|
/** @name Compile time configuration options
|
||||||
* The Linux SDK for UPnP Devices contains some compile-time parameters
|
* The Linux SDK for UPnP Devices contains some compile-time parameters
|
||||||
@ -96,6 +95,17 @@
|
|||||||
#define MAX_THREADS 12
|
#define MAX_THREADS 12
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
/** @name MAX_JOBS_TOTAL
|
||||||
|
* The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs
|
||||||
|
* that can be queued. If this limit is reached further jobs will be thrown
|
||||||
|
* to avoid memory exhaustion. The default value 100.
|
||||||
|
* (Added by Axis.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
//@{
|
||||||
|
#define MAX_JOBS_TOTAL 100
|
||||||
|
//@}
|
||||||
|
|
||||||
/** @name DEFAULT_SOAP_CONTENT_LENGTH
|
/** @name DEFAULT_SOAP_CONTENT_LENGTH
|
||||||
* SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.
|
* SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.
|
||||||
* This prevents devices that have a misbehaving web server to send
|
* This prevents devices that have a misbehaving web server to send
|
||||||
@ -294,27 +304,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @name DBGONLY
|
|
||||||
The {\bf DBGONLY} macro allows code to be marked so that it
|
|
||||||
is only included in the DEBUG build and not the release. To
|
|
||||||
use this macro, put the code inside of the parentheses:
|
|
||||||
|
|
||||||
{\tt DBGONLY(int i;)}
|
|
||||||
|
|
||||||
This will cause a declaration of the integer {\tt i} only
|
|
||||||
in the debug build.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#ifdef DEBUG
|
|
||||||
#define DBGONLY(x) x
|
|
||||||
#else
|
|
||||||
#define DBGONLY(x)
|
|
||||||
#endif
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#undef EXCLUDE_WEB_SERVER
|
#undef EXCLUDE_WEB_SERVER
|
||||||
#undef EXCLUDE_MINISERVER
|
#undef EXCLUDE_MINISERVER
|
||||||
#ifdef INTERNAL_WEB_SERVER
|
#ifdef INTERNAL_WEB_SERVER
|
||||||
@ -358,4 +347,3 @@
|
|||||||
//@}
|
//@}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* upnp/inc/upnpconfig.h. Generated by configure. */
|
/* upnp/inc/upnpconfig.h. Generated from upnpconfig.h.in by configure. */
|
||||||
// -*- C -*-
|
// -*- C -*-
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
@ -40,7 +40,7 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/** The library version (string) e.g. "1.3.0" */
|
/** The library version (string) e.g. "1.3.0" */
|
||||||
#define UPNP_VERSION_STRING "1.4.0"
|
#define UPNP_VERSION_STRING "1.4.7"
|
||||||
|
|
||||||
/** Major version of the library */
|
/** Major version of the library */
|
||||||
#define UPNP_VERSION_MAJOR 1
|
#define UPNP_VERSION_MAJOR 1
|
||||||
@ -49,7 +49,7 @@
|
|||||||
#define UPNP_VERSION_MINOR 4
|
#define UPNP_VERSION_MINOR 4
|
||||||
|
|
||||||
/** Patch version of the library */
|
/** Patch version of the library */
|
||||||
#define UPNP_VERSION_PATCH 0
|
#define UPNP_VERSION_PATCH 7
|
||||||
|
|
||||||
/** The library version (numeric) e.g. 10300 means version 1.3.0 */
|
/** The library version (numeric) e.g. 10300 means version 1.3.0 */
|
||||||
#define UPNP_VERSION \
|
#define UPNP_VERSION \
|
||||||
@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
/** Defined to 1 if the library has been compiled with DEBUG enabled
|
/** Defined to 1 if the library has been compiled with DEBUG enabled
|
||||||
* (i.e. configure --enable-debug) : <upnp/upnpdebug.h> file is available */
|
* (i.e. configure --enable-debug) : <upnp/upnpdebug.h> file is available */
|
||||||
#undef UPNP_HAVE_DEBUG
|
/* #undef UPNP_HAVE_DEBUG */
|
||||||
|
|
||||||
|
|
||||||
/** Defined to 1 if the library has been compiled with client API enabled
|
/** Defined to 1 if the library has been compiled with client API enabled
|
||||||
|
@ -82,15 +82,6 @@ typedef enum priority {LOW_PRIORITY,
|
|||||||
#define DEBUG 1
|
#define DEBUG 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//DEBUGGING
|
|
||||||
#ifndef WIN32
|
|
||||||
#ifdef DEBUG
|
|
||||||
#define DBGONLY(x) x
|
|
||||||
#else
|
|
||||||
#define DBGONLY(x)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "LinkedList.h"
|
#include "LinkedList.h"
|
||||||
#include <sys/timeb.h>
|
#include <sys/timeb.h>
|
||||||
#include "FreeList.h"
|
#include "FreeList.h"
|
||||||
|
@ -52,9 +52,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "ixml.h"
|
#include "ixml.h"
|
||||||
#include "upnpconfig.h"
|
#include "upnpconfig.h"
|
||||||
#if UPNP_HAVE_DEBUG
|
|
||||||
#include "upnpdebug.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -489,6 +486,8 @@
|
|||||||
#define INOUT
|
#define INOUT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "upnpdebug.h"
|
||||||
|
|
||||||
enum UpnpOpenFileMode{UPNP_READ, UPNP_WRITE};
|
enum UpnpOpenFileMode{UPNP_READ, UPNP_WRITE};
|
||||||
|
|
||||||
/// @name Constants, Structures, and Types
|
/// @name Constants, Structures, and Types
|
||||||
|
@ -33,11 +33,9 @@
|
|||||||
#ifndef UPNP_DEBUG_H
|
#ifndef UPNP_DEBUG_H
|
||||||
#define UPNP_DEBUG_H
|
#define UPNP_DEBUG_H
|
||||||
|
|
||||||
|
#include "upnp.h"
|
||||||
#include "upnpconfig.h"
|
#include "upnpconfig.h"
|
||||||
|
|
||||||
// Function declarations only if debug compiled into the library
|
|
||||||
#if UPNP_HAVE_DEBUG
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -70,7 +68,17 @@ extern "C" {
|
|||||||
* \end{itemize}
|
* \end{itemize}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum Upnp_Module {SSDP,SOAP,GENA,TPOOL,MSERV,DOM,API, HTTP} Dbg_Module;
|
typedef enum Upnp_Module {
|
||||||
|
SSDP,
|
||||||
|
SOAP,
|
||||||
|
GENA,
|
||||||
|
TPOOL,
|
||||||
|
MSERV,
|
||||||
|
DOM,
|
||||||
|
API,
|
||||||
|
HTTP
|
||||||
|
} Dbg_Module;
|
||||||
|
|
||||||
//@{
|
//@{
|
||||||
typedef enum Upnp_LogLevel_e {
|
typedef enum Upnp_LogLevel_e {
|
||||||
UPNP_CRITICAL,
|
UPNP_CRITICAL,
|
||||||
@ -102,7 +110,11 @@ typedef enum Upnp_LogLevel_e {
|
|||||||
* -1 : If fails
|
* -1 : If fails
|
||||||
* UPNP_E_SUCCESS : if success
|
* UPNP_E_SUCCESS : if success
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
int UpnpInitLog();
|
int UpnpInitLog();
|
||||||
|
#else
|
||||||
|
static inline int UpnpInitLog() { return UPNP_E_SUCCESS; }
|
||||||
|
#endif
|
||||||
|
|
||||||
// for backward compatibility
|
// for backward compatibility
|
||||||
#define InitLog UpnpInitLog
|
#define InitLog UpnpInitLog
|
||||||
@ -111,13 +123,17 @@ int UpnpInitLog();
|
|||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Function : UpnpSetLogLevel
|
* Function : UpnpSetLogLevel
|
||||||
*
|
*
|
||||||
* Parameters: void
|
* Parameters: Upnp_LogLevel log_level
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* This functions set the log level (see {\tt Upnp_LogLevel}
|
* This functions set the log level (see {\tt Upnp_LogLevel}
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
void UpnpSetLogLevel (Upnp_LogLevel);
|
#ifdef DEBUG
|
||||||
|
void UpnpSetLogLevel(Upnp_LogLevel log_level);
|
||||||
|
#else
|
||||||
|
static inline void UpnpSetLogLevel(Upnp_LogLevel log_level) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -129,7 +145,11 @@ void UpnpSetLogLevel (Upnp_LogLevel);
|
|||||||
* This functions closes the log files
|
* This functions closes the log files
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
void UpnpCloseLog();
|
void UpnpCloseLog();
|
||||||
|
#else
|
||||||
|
static inline void UpnpCloseLog() {}
|
||||||
|
#endif
|
||||||
|
|
||||||
// for backward compatibility
|
// for backward compatibility
|
||||||
#define CloseLog UpnpCloseLog
|
#define CloseLog UpnpCloseLog
|
||||||
@ -149,7 +169,15 @@ void UpnpCloseLog();
|
|||||||
* per the requested banner
|
* per the requested banner
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
void UpnpSetLogFileNames (const char* ErrFileName, const char* InfoFileName);
|
#ifdef DEBUG
|
||||||
|
void UpnpSetLogFileNames(
|
||||||
|
const char *ErrFileName,
|
||||||
|
const char *InfoFileName);
|
||||||
|
#else
|
||||||
|
static inline void UpnpSetLogFileNames(
|
||||||
|
const char *ErrFileName,
|
||||||
|
const char *InfoFileName) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
// for backward compatibility
|
// for backward compatibility
|
||||||
#define SetLogFileNames UpnpSetLogFileNames
|
#define SetLogFileNames UpnpSetLogFileNames
|
||||||
@ -171,12 +199,45 @@ void UpnpSetLogFileNames (const char* ErrFileName, const char* InfoFileName);
|
|||||||
* NULL : if the module is turn off for debug
|
* NULL : if the module is turn off for debug
|
||||||
* else returns the right file descriptor
|
* else returns the right file descriptor
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module);
|
FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module);
|
||||||
|
#else
|
||||||
|
static inline FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// for backward compatibility
|
// for backward compatibility
|
||||||
#define GetDebugFile UpnpGetDebugFile
|
#define GetDebugFile UpnpGetDebugFile
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Function : DebugAtThisLevel
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* IN Dbg_Level DLevel: The level of the debug logging. It will decide
|
||||||
|
* whether debug statement will go to standard output,
|
||||||
|
* or any of the log files.
|
||||||
|
* IN Dbg_Module Module: debug will go in the name of this module
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This functions returns true if debug output should be done in this
|
||||||
|
* module.
|
||||||
|
*
|
||||||
|
* Returns: int
|
||||||
|
***************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
|
int DebugAtThisLevel(
|
||||||
|
IN Upnp_LogLevel DLevel,
|
||||||
|
IN Dbg_Module Module);
|
||||||
|
#else
|
||||||
|
static inline int DebugAtThisLevel(
|
||||||
|
IN Upnp_LogLevel DLevel,
|
||||||
|
IN Dbg_Module Module) { return 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Function : UpnpPrintf
|
* Function : UpnpPrintf
|
||||||
*
|
*
|
||||||
@ -198,6 +259,7 @@ FILE* UpnpGetDebugFile (Upnp_LogLevel level, Dbg_Module module);
|
|||||||
* debug statement is coming
|
* debug statement is coming
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
void UpnpPrintf (Upnp_LogLevel DLevel, Dbg_Module Module,
|
void UpnpPrintf (Upnp_LogLevel DLevel, Dbg_Module Module,
|
||||||
const char* DbgFileName, int DbgLineNo,
|
const char* DbgFileName, int DbgLineNo,
|
||||||
const char* FmtStr,
|
const char* FmtStr,
|
||||||
@ -206,6 +268,15 @@ void UpnpPrintf (Upnp_LogLevel DLevel, Dbg_Module Module,
|
|||||||
__attribute__((format (__printf__, 5, 6)))
|
__attribute__((format (__printf__, 5, 6)))
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
#else
|
||||||
|
static inline void UpnpPrintf(
|
||||||
|
Upnp_LogLevel DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
const char* DbgFileName,
|
||||||
|
int DbgLineNo,
|
||||||
|
const char* FmtStr,
|
||||||
|
...) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -222,8 +293,19 @@ void UpnpPrintf (Upnp_LogLevel DLevel, Dbg_Module Module,
|
|||||||
* per the requested banner
|
* per the requested banner
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
void UpnpDisplayBanner (FILE *fd,
|
#ifdef DEBUG
|
||||||
const char** lines, size_t size, int starlength);
|
void UpnpDisplayBanner(
|
||||||
|
FILE *fd,
|
||||||
|
const char **lines,
|
||||||
|
size_t size,
|
||||||
|
int starlength);
|
||||||
|
#else
|
||||||
|
static inline void UpnpDisplayBanner(
|
||||||
|
FILE *fd,
|
||||||
|
const char **lines,
|
||||||
|
size_t size,
|
||||||
|
int starlength) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -240,19 +322,23 @@ void UpnpDisplayBanner (FILE *fd,
|
|||||||
* debug statement is coming to the log file
|
* debug statement is coming to the log file
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
void UpnpDisplayFileAndLine (FILE *fd, const char *DbgFileName, int DbgLineNo);
|
#ifdef DEBUG
|
||||||
|
void UpnpDisplayFileAndLine(
|
||||||
|
FILE *fd,
|
||||||
|
const char *DbgFileName,
|
||||||
|
int DbgLineNo);
|
||||||
|
#else
|
||||||
|
static inline void UpnpDisplayFileAndLine(
|
||||||
|
FILE *fd,
|
||||||
|
const char *DbgFileName,
|
||||||
|
int DbgLineNo) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // UPNP_HAVE_DEBUG
|
|
||||||
|
|
||||||
#endif // UPNP_DEBUG_H
|
#endif // UPNP_DEBUG_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -200,12 +200,11 @@ int UpnpInit( IN const char *HostIP,
|
|||||||
|
|
||||||
srand( time( NULL ) ); // needed by SSDP or other parts
|
srand( time( NULL ) ); // needed by SSDP or other parts
|
||||||
|
|
||||||
DBGONLY( if( InitLog( ) != UPNP_E_SUCCESS )
|
if( UpnpInitLog() != UPNP_E_SUCCESS ) {
|
||||||
return UPNP_E_INIT_FAILED; );
|
return UPNP_E_INIT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Inside UpnpInit \n" );
|
||||||
( UPNP_INFO, API, __FILE__, __LINE__, "Inside UpnpInit \n" );
|
|
||||||
)
|
|
||||||
// initialize mutex
|
// initialize mutex
|
||||||
#ifdef __CYGWIN__
|
#ifdef __CYGWIN__
|
||||||
/* On Cygwin, pthread_mutex_init() fails without this memset. */
|
/* On Cygwin, pthread_mutex_init() fails without this memset. */
|
||||||
@ -281,9 +280,8 @@ int UpnpInit( IN const char *HostIP,
|
|||||||
}
|
}
|
||||||
#if EXCLUDE_MINISERVER == 0
|
#if EXCLUDE_MINISERVER == 0
|
||||||
if( ( retVal = StartMiniServer( DestPort ) ) <= 0 ) {
|
if( ( retVal = StartMiniServer( DestPort ) ) <= 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
"Miniserver failed to start" );
|
"Miniserver failed to start" );
|
||||||
)
|
|
||||||
UpnpFinish();
|
UpnpFinish();
|
||||||
UpnpSdkInit = 0;
|
UpnpSdkInit = 0;
|
||||||
if( retVal != -1 )
|
if( retVal != -1 )
|
||||||
@ -304,19 +302,17 @@ int UpnpInit( IN const char *HostIP,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Host Ip: %s Host Port: %d\n", LOCAL_HOST,
|
"Host Ip: %s Host Port: %d\n", LOCAL_HOST,
|
||||||
LOCAL_PORT ) );
|
LOCAL_PORT );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Exiting UpnpInit \n" );
|
||||||
( UPNP_INFO, API, __FILE__, __LINE__, "Exiting UpnpInit \n" );
|
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
} /***************** end of UpnpInit ******************/
|
} /***************** end of UpnpInit ******************/
|
||||||
|
|
||||||
DBGONLY(
|
#ifdef DEBUG
|
||||||
static void
|
static void
|
||||||
PrintThreadPoolStats (const char* DbgFileName, int DbgLineNo,
|
PrintThreadPoolStats (const char* DbgFileName, int DbgLineNo,
|
||||||
const char* msg, const ThreadPoolStats* const stats)
|
const char* msg, const ThreadPoolStats* const stats)
|
||||||
@ -337,7 +333,8 @@ PrintThreadPoolStats (const char* DbgFileName, int DbgLineNo,
|
|||||||
stats->avgWaitHQ, stats->avgWaitMQ, stats->avgWaitLQ,
|
stats->avgWaitHQ, stats->avgWaitMQ, stats->avgWaitLQ,
|
||||||
stats->maxThreads, stats->totalWorkTime,
|
stats->maxThreads, stats->totalWorkTime,
|
||||||
stats->totalIdleTime );
|
stats->totalIdleTime );
|
||||||
})
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -366,8 +363,9 @@ UpnpFinish( )
|
|||||||
)
|
)
|
||||||
struct Handle_Info *temp;
|
struct Handle_Info *temp;
|
||||||
|
|
||||||
DBGONLY( ThreadPoolStats stats;
|
#ifdef DEBUG
|
||||||
)
|
ThreadPoolStats stats;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// WSACleanup( );
|
// WSACleanup( );
|
||||||
@ -376,18 +374,21 @@ UpnpFinish( )
|
|||||||
if( UpnpSdkInit != 1 )
|
if( UpnpSdkInit != 1 )
|
||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
|
||||||
"Inside UpnpFinish : UpnpSdkInit is :%d:\n",
|
|
||||||
UpnpSdkInit ); if( UpnpSdkInit == 1 ) {
|
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"UpnpFinish : UpnpSdkInit is ONE\n" );}
|
"Inside UpnpFinish : UpnpSdkInit is :%d:\n",
|
||||||
|
UpnpSdkInit );
|
||||||
|
#ifdef DEBUG
|
||||||
|
if( UpnpSdkInit == 1 ) {
|
||||||
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
|
"UpnpFinish : UpnpSdkInit is ONE\n" );
|
||||||
|
}
|
||||||
ThreadPoolGetStats( &gRecvThreadPool, &stats );
|
ThreadPoolGetStats( &gRecvThreadPool, &stats );
|
||||||
PrintThreadPoolStats (__FILE__, __LINE__,
|
PrintThreadPoolStats (__FILE__, __LINE__,
|
||||||
"Recv Thread Pool", &stats);
|
"Recv Thread Pool", &stats);
|
||||||
ThreadPoolGetStats( &gSendThreadPool, &stats );
|
ThreadPoolGetStats( &gSendThreadPool, &stats );
|
||||||
PrintThreadPoolStats (__FILE__, __LINE__,
|
PrintThreadPoolStats (__FILE__, __LINE__,
|
||||||
"Send Thread Pool", &stats);
|
"Send Thread Pool", &stats);
|
||||||
)
|
#endif
|
||||||
#ifdef INCLUDE_DEVICE_APIS
|
#ifdef INCLUDE_DEVICE_APIS
|
||||||
if( GetDeviceHandleInfo( &device_handle, &temp ) == HND_DEVICE )
|
if( GetDeviceHandleInfo( &device_handle, &temp ) == HND_DEVICE )
|
||||||
UpnpUnRegisterRootDevice( device_handle );
|
UpnpUnRegisterRootDevice( device_handle );
|
||||||
@ -406,12 +407,20 @@ UpnpFinish( )
|
|||||||
web_server_destroy();
|
web_server_destroy();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
ThreadPoolShutdown( &gSendThreadPool );
|
ThreadPoolShutdown( &gSendThreadPool );
|
||||||
ThreadPoolShutdown( &gRecvThreadPool );
|
ThreadPoolShutdown( &gRecvThreadPool );
|
||||||
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Exiting UpnpFinish : UpnpSdkInit is :%d:\n", UpnpSdkInit ); ThreadPoolGetStats( &gRecvThreadPool, &stats ); PrintThreadPoolStats ( __FILE__, __LINE__, "Recv Thread Pool", &stats); ThreadPoolGetStats( &gSendThreadPool, &stats ); PrintThreadPoolStats (__FILE__, __LINE__, "Send Thread Pool", &stats); ) // DBGONLY
|
"Exiting UpnpFinish : UpnpSdkInit is :%d:\n",
|
||||||
DBGONLY( CloseLog( );
|
UpnpSdkInit );
|
||||||
);
|
ThreadPoolGetStats( &gRecvThreadPool, &stats );
|
||||||
|
PrintThreadPoolStats( __FILE__, __LINE__,
|
||||||
|
"Recv Thread Pool", &stats);
|
||||||
|
ThreadPoolGetStats( &gSendThreadPool, &stats );
|
||||||
|
PrintThreadPoolStats(__FILE__, __LINE__,
|
||||||
|
"Send Thread Pool", &stats);
|
||||||
|
CloseLog();
|
||||||
|
#endif
|
||||||
|
|
||||||
CLIENTONLY( ithread_mutex_destroy( &GlobalClientSubscribeMutex );
|
CLIENTONLY( ithread_mutex_destroy( &GlobalClientSubscribeMutex );
|
||||||
)
|
)
|
||||||
@ -522,16 +531,14 @@ UpnpAddRootDevice( IN const char *DescURL,
|
|||||||
if( addServiceTable
|
if( addServiceTable
|
||||||
( ( IXML_Node * ) temp, &HInfo->ServiceTable, DescURL ) ) {
|
( ( IXML_Node * ) temp, &HInfo->ServiceTable, DescURL ) ) {
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"UpnpAddRootDevice: GENA Service Table \n" );
|
"UpnpAddRootDevice: GENA Service Table \n" );
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Here are the known services: \n" );
|
"Here are the known services: \n" );
|
||||||
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"\nUpnpAddRootDevice: No Eventing Support Found \n" );
|
"\nUpnpAddRootDevice: No Eventing Support Found \n" );
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ixmlDocument_free( temp );
|
ixmlDocument_free( temp );
|
||||||
@ -579,9 +586,8 @@ UpnpRegisterRootDevice( IN const char *DescUrl,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpRegisterRootDevice \n" );
|
"Inside UpnpRegisterRootDevice \n" );
|
||||||
)
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
|
|
||||||
if( UpnpSdkDeviceRegistered ) {
|
if( UpnpSdkDeviceRegistered ) {
|
||||||
@ -607,9 +613,8 @@ UpnpRegisterRootDevice( IN const char *DescUrl,
|
|||||||
}
|
}
|
||||||
HandleTable[*Hnd] = HInfo;
|
HandleTable[*Hnd] = HInfo;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Root device URL is %s\n", DescUrl );
|
"Root device URL is %s\n", DescUrl );
|
||||||
)
|
|
||||||
|
|
||||||
HInfo->aliasInstalled = 0;
|
HInfo->aliasInstalled = 0;
|
||||||
HInfo->HType = HND_DEVICE;
|
HInfo->HType = HND_DEVICE;
|
||||||
@ -636,12 +641,11 @@ UpnpRegisterRootDevice( IN const char *DescUrl,
|
|||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice: Valid Description\n" );
|
"UpnpRegisterRootDevice: Valid Description\n" );
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice: DescURL : %s\n",
|
"UpnpRegisterRootDevice: DescURL : %s\n",
|
||||||
HInfo->DescURL );
|
HInfo->DescURL );
|
||||||
)
|
|
||||||
|
|
||||||
HInfo->DeviceList =
|
HInfo->DeviceList =
|
||||||
ixmlDocument_getElementsByTagName( HInfo->DescDocument, "device" );
|
ixmlDocument_getElementsByTagName( HInfo->DescDocument, "device" );
|
||||||
@ -650,9 +654,8 @@ UpnpRegisterRootDevice( IN const char *DescUrl,
|
|||||||
ixmlDocument_free( HInfo->DescDocument );
|
ixmlDocument_free( HInfo->DescDocument );
|
||||||
FreeHandle( *Hnd );
|
FreeHandle( *Hnd );
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice: No devices found for RootDevice\n" );
|
"UpnpRegisterRootDevice: No devices found for RootDevice\n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_DESC;
|
return UPNP_E_INVALID_DESC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -665,42 +668,37 @@ UpnpRegisterRootDevice( IN const char *DescUrl,
|
|||||||
ixmlDocument_free( HInfo->DescDocument );
|
ixmlDocument_free( HInfo->DescDocument );
|
||||||
FreeHandle( *Hnd );
|
FreeHandle( *Hnd );
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice: No services found for RootDevice\n" );
|
"UpnpRegisterRootDevice: No services found for RootDevice\n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_DESC;
|
return UPNP_E_INVALID_DESC;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice: Gena Check\n" );
|
"UpnpRegisterRootDevice: Gena Check\n" );
|
||||||
)
|
|
||||||
//*******************************
|
//*******************************
|
||||||
// GENA SET UP
|
// GENA SET UP
|
||||||
//*******************************
|
//*******************************
|
||||||
if( getServiceTable( ( IXML_Node * ) HInfo->DescDocument,
|
if( getServiceTable( ( IXML_Node * ) HInfo->DescDocument,
|
||||||
&HInfo->ServiceTable, HInfo->DescURL ) ) {
|
&HInfo->ServiceTable, HInfo->DescURL ) ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice: GENA Service Table \n" );
|
"UpnpRegisterRootDevice: GENA Service Table \n" );
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Here are the known services: \n" );
|
"Here are the known services: \n" );
|
||||||
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
CLIENTONLY( ListDestroy( &HInfo->SsdpSearchList, 0 ) );
|
CLIENTONLY( ListDestroy( &HInfo->SsdpSearchList, 0 ) );
|
||||||
FreeHandle( *Hnd );
|
FreeHandle( *Hnd );
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"\nUpnpRegisterRootDevice: Errors retrieving service table \n" );
|
"\nUpnpRegisterRootDevice: Errors retrieving service table \n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_DESC;
|
return UPNP_E_INVALID_DESC;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpnpSdkDeviceRegistered = 1;
|
UpnpSdkDeviceRegistered = 1;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Exiting RegisterRootDevice Successfully\n" );
|
"Exiting RegisterRootDevice Successfully\n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -753,19 +751,17 @@ UpnpRemoveRootDevice( IN const char *DescURL,
|
|||||||
|
|
||||||
if( removeServiceTable( ( IXML_Node * ) temp, &HInfo->ServiceTable ) ) {
|
if( removeServiceTable( ( IXML_Node * ) temp, &HInfo->ServiceTable ) ) {
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"UpnpRemoveRootDevice: GENA Service Table \n" );
|
"UpnpRemoveRootDevice: GENA Service Table \n" );
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Here are the known services: \n" );
|
"Here are the known services: \n" );
|
||||||
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"\nUpnpRemoveRootDevice: No Services Removed\n" );
|
"\nUpnpRemoveRootDevice: No Services Removed\n" );
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Here are the known services: \n" );
|
"Here are the known services: \n" );
|
||||||
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
printServiceTable( &HInfo->ServiceTable, UPNP_INFO, API );
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
@ -813,9 +809,8 @@ UpnpUnRegisterRootDevice( IN UpnpDevice_Handle Hnd )
|
|||||||
}
|
}
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpUnRegisterRootDevice \n" );
|
"Inside UpnpUnRegisterRootDevice \n" );
|
||||||
)
|
|
||||||
#if EXCLUDE_GENA == 0
|
#if EXCLUDE_GENA == 0
|
||||||
if( genaUnregisterDevice( Hnd ) != UPNP_E_SUCCESS )
|
if( genaUnregisterDevice( Hnd ) != UPNP_E_SUCCESS )
|
||||||
return UPNP_E_INVALID_HANDLE;
|
return UPNP_E_INVALID_HANDLE;
|
||||||
@ -856,9 +851,8 @@ UpnpUnRegisterRootDevice( IN UpnpDevice_Handle Hnd )
|
|||||||
UpnpSdkDeviceRegistered = 0;
|
UpnpSdkDeviceRegistered = 0;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpUnRegisterRootDevice \n" );
|
"Exiting UpnpUnRegisterRootDevice \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -1167,9 +1161,8 @@ UpnpRegisterRootDevice2( IN Upnp_DescType descriptionType,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpRegisterRootDevice2 \n" );
|
"Inside UpnpRegisterRootDevice2 \n" );
|
||||||
)
|
|
||||||
|
|
||||||
if( Hnd == NULL || Fun == NULL ) {
|
if( Hnd == NULL || Fun == NULL ) {
|
||||||
return UPNP_E_INVALID_PARAM;
|
return UPNP_E_INVALID_PARAM;
|
||||||
@ -1223,12 +1216,11 @@ UpnpRegisterRootDevice2( IN Upnp_DescType descriptionType,
|
|||||||
HInfo->MaxSubscriptions = UPNP_INFINITE;
|
HInfo->MaxSubscriptions = UPNP_INFINITE;
|
||||||
HInfo->MaxSubscriptionTimeOut = UPNP_INFINITE;
|
HInfo->MaxSubscriptionTimeOut = UPNP_INFINITE;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice2: Valid Description\n" );
|
"UpnpRegisterRootDevice2: Valid Description\n" );
|
||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice2: DescURL : %s\n",
|
"UpnpRegisterRootDevice2: DescURL : %s\n",
|
||||||
HInfo->DescURL );
|
HInfo->DescURL );
|
||||||
)
|
|
||||||
|
|
||||||
HInfo->DeviceList =
|
HInfo->DeviceList =
|
||||||
ixmlDocument_getElementsByTagName( HInfo->DescDocument, "device" );
|
ixmlDocument_getElementsByTagName( HInfo->DescDocument, "device" );
|
||||||
@ -1238,9 +1230,8 @@ UpnpRegisterRootDevice2( IN Upnp_DescType descriptionType,
|
|||||||
ixmlDocument_free( HInfo->DescDocument );
|
ixmlDocument_free( HInfo->DescDocument );
|
||||||
FreeHandle( *Hnd );
|
FreeHandle( *Hnd );
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice2: No devices found for RootDevice\n" );
|
"UpnpRegisterRootDevice2: No devices found for RootDevice\n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_DESC;
|
return UPNP_E_INVALID_DESC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1254,37 +1245,32 @@ UpnpRegisterRootDevice2( IN Upnp_DescType descriptionType,
|
|||||||
ixmlDocument_free( HInfo->DescDocument );
|
ixmlDocument_free( HInfo->DescDocument );
|
||||||
FreeHandle( *Hnd );
|
FreeHandle( *Hnd );
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice2: No services found for RootDevice\n" );
|
"UpnpRegisterRootDevice2: No services found for RootDevice\n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_DESC;
|
return UPNP_E_INVALID_DESC;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice2: Gena Check\n" );
|
"UpnpRegisterRootDevice2: Gena Check\n" );
|
||||||
)
|
|
||||||
//*******************************
|
//*******************************
|
||||||
//GENA SET UP
|
//GENA SET UP
|
||||||
//*******************************
|
//*******************************
|
||||||
if( getServiceTable( ( IXML_Node * ) HInfo->DescDocument,
|
if( getServiceTable( ( IXML_Node * ) HInfo->DescDocument,
|
||||||
&HInfo->ServiceTable, HInfo->DescURL ) ) {
|
&HInfo->ServiceTable, HInfo->DescURL ) ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"UpnpRegisterRootDevice2: GENA Service Table \n" );
|
"UpnpRegisterRootDevice2: GENA Service Table \n" );
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
CLIENTONLY( ListDestroy( &HInfo->SsdpSearchList, 0 ) );
|
CLIENTONLY( ListDestroy( &HInfo->SsdpSearchList, 0 ) );
|
||||||
FreeHandle( *Hnd );
|
FreeHandle( *Hnd );
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"\nUpnpRegisterRootDevice: Errors retrieving service table \n" );
|
"\nUpnpRegisterRootDevice: Errors retrieving service table \n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_DESC;
|
return UPNP_E_INVALID_DESC;
|
||||||
}
|
}
|
||||||
UpnpSdkDeviceRegistered = 1;
|
UpnpSdkDeviceRegistered = 1;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting RegisterRootDevice2 Successfully\n" );
|
"Exiting RegisterRootDevice2 Successfully\n" );
|
||||||
)
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
} /****************** End of UpnpRegisterRootDevice2 *********************/
|
} /****************** End of UpnpRegisterRootDevice2 *********************/
|
||||||
@ -1323,9 +1309,8 @@ UpnpRegisterClient( IN Upnp_FunPtr Fun,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpRegisterClient \n" );
|
"Inside UpnpRegisterClient \n" );
|
||||||
)
|
|
||||||
|
|
||||||
if( Fun == NULL || Hnd == NULL ) {
|
if( Fun == NULL || Hnd == NULL ) {
|
||||||
return UPNP_E_INVALID_PARAM;
|
return UPNP_E_INVALID_PARAM;
|
||||||
@ -1366,9 +1351,8 @@ UpnpRegisterClient( IN Upnp_FunPtr Fun,
|
|||||||
|
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpRegisterClient \n" );
|
"Exiting UpnpRegisterClient \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -1403,9 +1387,8 @@ UpnpUnRegisterClient( IN UpnpClient_Handle Hnd )
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpUnRegisterClient \n" );
|
"Inside UpnpUnRegisterClient \n" );
|
||||||
)
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( !UpnpSdkClientRegistered ) {
|
if( !UpnpSdkClientRegistered ) {
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
@ -1438,9 +1421,8 @@ UpnpUnRegisterClient( IN UpnpClient_Handle Hnd )
|
|||||||
FreeHandle( Hnd );
|
FreeHandle( Hnd );
|
||||||
UpnpSdkClientRegistered = 0;
|
UpnpSdkClientRegistered = 0;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpUnRegisterClient \n" );
|
"Exiting UpnpUnRegisterClient \n" );
|
||||||
)
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
} /****************** End of UpnpUnRegisterClient *********************/
|
} /****************** End of UpnpUnRegisterClient *********************/
|
||||||
@ -1483,9 +1465,8 @@ UpnpSendAdvertisement( IN UpnpDevice_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSendAdvertisement \n" );
|
"Inside UpnpSendAdvertisement \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
||||||
@ -1554,8 +1535,8 @@ UpnpSendAdvertisement( IN UpnpDevice_Handle Hnd,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSendAdvertisement \n" ); )
|
"Exiting UpnpSendAdvertisement \n" );
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -1595,9 +1576,8 @@ UpnpSearchAsync( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSearchAsync \n" );
|
"Inside UpnpSearchAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -1617,9 +1597,8 @@ UpnpSearchAsync( IN UpnpClient_Handle Hnd,
|
|||||||
|
|
||||||
//HandleUnlock();
|
//HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSearchAsync \n" );
|
"Exiting UpnpSearchAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -1659,9 +1638,8 @@ UpnpSetMaxSubscriptions( IN UpnpDevice_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSetMaxSubscriptions \n" );
|
"Inside UpnpSetMaxSubscriptions \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( ( ( MaxSubscriptions != UPNP_INFINITE )
|
if( ( ( MaxSubscriptions != UPNP_INFINITE )
|
||||||
@ -1673,9 +1651,8 @@ UpnpSetMaxSubscriptions( IN UpnpDevice_Handle Hnd,
|
|||||||
SInfo->MaxSubscriptions = MaxSubscriptions;
|
SInfo->MaxSubscriptions = MaxSubscriptions;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSetMaxSubscriptions \n" );
|
"Exiting UpnpSetMaxSubscriptions \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -1710,9 +1687,8 @@ UpnpSetMaxSubscriptionTimeOut( IN UpnpDevice_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSetMaxSubscriptionTimeOut \n" );
|
"Inside UpnpSetMaxSubscriptionTimeOut \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
|
|
||||||
@ -1726,9 +1702,8 @@ UpnpSetMaxSubscriptionTimeOut( IN UpnpDevice_Handle Hnd,
|
|||||||
SInfo->MaxSubscriptionTimeOut = MaxSubscriptionTimeOut;
|
SInfo->MaxSubscriptionTimeOut = MaxSubscriptionTimeOut;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSetMaxSubscriptionTimeOut \n" );
|
"Exiting UpnpSetMaxSubscriptionTimeOut \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -1777,9 +1752,8 @@ UpnpSubscribeAsync( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSubscribeAsync \n" );
|
"Inside UpnpSubscribeAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -1820,9 +1794,8 @@ UpnpSubscribeAsync( IN UpnpClient_Handle Hnd,
|
|||||||
TPJobSetPriority( &job, MED_PRIORITY );
|
TPJobSetPriority( &job, MED_PRIORITY );
|
||||||
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSubscribeAsync \n" );
|
"Exiting UpnpSubscribeAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -1864,9 +1837,8 @@ UpnpSubscribe( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSubscribe \n" );
|
"Inside UpnpSubscribe \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -1888,9 +1860,8 @@ UpnpSubscribe( IN UpnpClient_Handle Hnd,
|
|||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
RetVal = genaSubscribe( Hnd, EvtUrl, TimeOut, SubsId );
|
RetVal = genaSubscribe( Hnd, EvtUrl, TimeOut, SubsId );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSubscribe \n" );
|
"Exiting UpnpSubscribe \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return RetVal;
|
return RetVal;
|
||||||
|
|
||||||
@ -1926,9 +1897,8 @@ UpnpUnSubscribe( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpUnSubscribe \n" );
|
"Inside UpnpUnSubscribe \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -1942,9 +1912,8 @@ UpnpUnSubscribe( IN UpnpClient_Handle Hnd,
|
|||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
RetVal = genaUnSubscribe( Hnd, SubsId );
|
RetVal = genaUnSubscribe( Hnd, SubsId );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpUnSubscribe \n" );
|
"Exiting UpnpUnSubscribe \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return RetVal;
|
return RetVal;
|
||||||
|
|
||||||
@ -1987,9 +1956,8 @@ UpnpUnSubscribeAsync( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpUnSubscribeAsync \n" );
|
"Inside UpnpUnSubscribeAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -2022,9 +1990,8 @@ UpnpUnSubscribeAsync( IN UpnpClient_Handle Hnd,
|
|||||||
TPJobSetPriority( &job, MED_PRIORITY );
|
TPJobSetPriority( &job, MED_PRIORITY );
|
||||||
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpUnSubscribeAsync \n" );
|
"Exiting UpnpUnSubscribeAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -2063,9 +2030,8 @@ UpnpRenewSubscription( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpRenewSubscription \n" );
|
"Inside UpnpRenewSubscription \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -2083,9 +2049,8 @@ UpnpRenewSubscription( IN UpnpClient_Handle Hnd,
|
|||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
RetVal = genaRenewSubscription( Hnd, SubsId, TimeOut );
|
RetVal = genaRenewSubscription( Hnd, SubsId, TimeOut );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpRenewSubscription \n" );
|
"Exiting UpnpRenewSubscription \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return RetVal;
|
return RetVal;
|
||||||
|
|
||||||
@ -2131,9 +2096,8 @@ UpnpRenewSubscriptionAsync( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpRenewSubscriptionAsync \n" );
|
"Inside UpnpRenewSubscriptionAsync \n" );
|
||||||
)
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
@ -2172,9 +2136,8 @@ UpnpRenewSubscriptionAsync( IN UpnpClient_Handle Hnd,
|
|||||||
TPJobSetPriority( &job, MED_PRIORITY );
|
TPJobSetPriority( &job, MED_PRIORITY );
|
||||||
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpRenewSubscriptionAsync \n" );
|
"Exiting UpnpRenewSubscriptionAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -2227,9 +2190,8 @@ UpnpNotify( IN UpnpDevice_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpNotify \n" );
|
"Inside UpnpNotify \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
||||||
@ -2253,9 +2215,8 @@ UpnpNotify( IN UpnpDevice_Handle Hnd,
|
|||||||
retVal =
|
retVal =
|
||||||
genaNotifyAll( Hnd, DevID, ServName, VarName, NewVal, cVariables );
|
genaNotifyAll( Hnd, DevID, ServName, VarName, NewVal, cVariables );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpNotify \n" );
|
"Exiting UpnpNotify \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -2300,9 +2261,8 @@ UpnpNotifyExt( IN UpnpDevice_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpNotify \n" );
|
"Inside UpnpNotify \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
||||||
@ -2321,9 +2281,8 @@ UpnpNotifyExt( IN UpnpDevice_Handle Hnd,
|
|||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
retVal = genaNotifyAllExt( Hnd, DevID, ServName, PropSet );
|
retVal = genaNotifyAllExt( Hnd, DevID, ServName, PropSet );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpNotify \n" );
|
"Exiting UpnpNotify \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -2379,9 +2338,8 @@ UpnpAcceptSubscription( IN UpnpDevice_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpAcceptSubscription \n" );
|
"Inside UpnpAcceptSubscription \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
||||||
@ -2410,9 +2368,8 @@ UpnpAcceptSubscription( IN UpnpDevice_Handle Hnd,
|
|||||||
genaInitNotify( Hnd, DevID, ServName, VarName, NewVal, cVariables,
|
genaInitNotify( Hnd, DevID, ServName, VarName, NewVal, cVariables,
|
||||||
SubsId );
|
SubsId );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpAcceptSubscription \n" );
|
"Exiting UpnpAcceptSubscription \n" );
|
||||||
)
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
} /***************** End of UpnpAcceptSubscription *********************/
|
} /***************** End of UpnpAcceptSubscription *********************/
|
||||||
@ -2457,9 +2414,8 @@ UpnpAcceptSubscriptionExt( IN UpnpDevice_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpAcceptSubscription \n" );
|
"Inside UpnpAcceptSubscription \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
||||||
@ -2487,9 +2443,8 @@ UpnpAcceptSubscriptionExt( IN UpnpDevice_Handle Hnd,
|
|||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
retVal = genaInitNotifyExt( Hnd, DevID, ServName, PropSet, SubsId );
|
retVal = genaInitNotifyExt( Hnd, DevID, ServName, PropSet, SubsId );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpAcceptSubscription \n" );
|
"Exiting UpnpAcceptSubscription \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -2551,11 +2506,11 @@ UpnpSendAction( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSendAction \n" );
|
"Inside UpnpSendAction \n" );
|
||||||
)
|
if(DevUDN_const !=NULL) {
|
||||||
if(DevUDN_const !=NULL)
|
UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"non NULL DevUDN is ignored\n");
|
||||||
DBGONLY(UpnpPrintf(UPNP_ALL,API,__FILE__,__LINE__,"non NULL DevUDN is ignored\n"););
|
}
|
||||||
DevUDN_const = NULL;
|
DevUDN_const = NULL;
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
@ -2577,9 +2532,8 @@ UpnpSendAction( IN UpnpClient_Handle Hnd,
|
|||||||
|
|
||||||
retVal = SoapSendAction( ActionURL, ServiceType, Action, RespNodePtr );
|
retVal = SoapSendAction( ActionURL, ServiceType, Action, RespNodePtr );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSendAction \n" );
|
"Exiting UpnpSendAction \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -2634,9 +2588,8 @@ UpnpSendActionEx( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSendActionEx \n" );
|
"Inside UpnpSendActionEx \n" );
|
||||||
)
|
|
||||||
|
|
||||||
if( Header == NULL ) {
|
if( Header == NULL ) {
|
||||||
retVal = UpnpSendAction( Hnd, ActionURL_const, ServiceType_const,
|
retVal = UpnpSendAction( Hnd, ActionURL_const, ServiceType_const,
|
||||||
@ -2661,9 +2614,8 @@ UpnpSendActionEx( IN UpnpClient_Handle Hnd,
|
|||||||
retVal = SoapSendActionEx( ActionURL, ServiceType, Header,
|
retVal = SoapSendActionEx( ActionURL, ServiceType, Header,
|
||||||
Action, RespNodePtr );
|
Action, RespNodePtr );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSendAction \n" );
|
"Exiting UpnpSendAction \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -2718,9 +2670,8 @@ UpnpSendActionAsync( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSendActionAsync \n" );
|
"Inside UpnpSendActionAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -2774,9 +2725,8 @@ UpnpSendActionAsync( IN UpnpClient_Handle Hnd,
|
|||||||
TPJobSetPriority( &job, MED_PRIORITY );
|
TPJobSetPriority( &job, MED_PRIORITY );
|
||||||
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSendActionAsync \n" );
|
"Exiting UpnpSendActionAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -2833,9 +2783,8 @@ UpnpSendActionExAsync( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpSendActionExAsync \n" );
|
"Inside UpnpSendActionExAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
if( Header == NULL ) {
|
if( Header == NULL ) {
|
||||||
retVal = UpnpSendActionAsync( Hnd, ActionURL_const,
|
retVal = UpnpSendActionAsync( Hnd, ActionURL_const,
|
||||||
@ -2912,9 +2861,8 @@ UpnpSendActionExAsync( IN UpnpClient_Handle Hnd,
|
|||||||
TPJobSetPriority( &job, MED_PRIORITY );
|
TPJobSetPriority( &job, MED_PRIORITY );
|
||||||
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpSendActionAsync \n" );
|
"Exiting UpnpSendActionAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -2956,9 +2904,8 @@ UpnpGetServiceVarStatusAsync( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpGetServiceVarStatusAsync \n" );
|
"Inside UpnpGetServiceVarStatusAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -2994,9 +2941,8 @@ UpnpGetServiceVarStatusAsync( IN UpnpClient_Handle Hnd,
|
|||||||
|
|
||||||
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
ThreadPoolAdd( &gSendThreadPool, &job, NULL );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpGetServiceVarStatusAsync \n" );
|
"Exiting UpnpGetServiceVarStatusAsync \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
@ -3038,9 +2984,8 @@ UpnpGetServiceVarStatus( IN UpnpClient_Handle Hnd,
|
|||||||
return UPNP_E_FINISH;
|
return UPNP_E_FINISH;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpGetServiceVarStatus \n" );
|
"Inside UpnpGetServiceVarStatus \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_CLIENT ) {
|
||||||
@ -3060,9 +3005,8 @@ UpnpGetServiceVarStatus( IN UpnpClient_Handle Hnd,
|
|||||||
retVal = SoapGetServiceVarStatus( ActionURL, VarName, &StVarPtr );
|
retVal = SoapGetServiceVarStatus( ActionURL, VarName, &StVarPtr );
|
||||||
*StVar = StVarPtr;
|
*StVar = StVarPtr;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpGetServiceVarStatus \n" );
|
"Exiting UpnpGetServiceVarStatus \n" );
|
||||||
)
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
||||||
@ -3339,16 +3283,13 @@ UpnpDownloadXmlDoc( const char *url,
|
|||||||
|
|
||||||
ret_code = UpnpDownloadUrlItem( url, &xml_buf, content_type );
|
ret_code = UpnpDownloadUrlItem( url, &xml_buf, content_type );
|
||||||
if( ret_code != UPNP_E_SUCCESS ) {
|
if( ret_code != UPNP_E_SUCCESS ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
"retCode: %d\n", ret_code );
|
"retCode: %d\n", ret_code );
|
||||||
)
|
|
||||||
return ret_code;
|
return ret_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( strncasecmp( content_type, "text/xml", strlen( "text/xml" ) ) ) {
|
if( strncasecmp( content_type, "text/xml", strlen( "text/xml" ) ) ) {
|
||||||
DBGONLY(
|
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Not text/xml\n" );
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Not text/xml\n" );
|
||||||
)
|
|
||||||
// Linksys WRT54G router returns
|
// Linksys WRT54G router returns
|
||||||
// "CONTENT-TYPE: application/octet-stream".
|
// "CONTENT-TYPE: application/octet-stream".
|
||||||
// Let's be nice to Linksys and try to parse document anyway.
|
// Let's be nice to Linksys and try to parse document anyway.
|
||||||
@ -3364,16 +3305,16 @@ UpnpDownloadXmlDoc( const char *url,
|
|||||||
free( xml_buf );
|
free( xml_buf );
|
||||||
|
|
||||||
if( ret_code != IXML_SUCCESS ) {
|
if( ret_code != IXML_SUCCESS ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
"Invalid desc\n" );
|
"Invalid desc\n" );
|
||||||
)
|
|
||||||
if( ret_code == IXML_INSUFFICIENT_MEMORY ) {
|
if( ret_code == IXML_INSUFFICIENT_MEMORY ) {
|
||||||
return UPNP_E_OUTOF_MEMORY;
|
return UPNP_E_OUTOF_MEMORY;
|
||||||
} else {
|
} else {
|
||||||
return UPNP_E_INVALID_DESC;
|
return UPNP_E_INVALID_DESC;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DBGONLY( xml_buf = ixmlPrintNode( ( IXML_Node * ) * xmlDoc );
|
#ifdef DEBUG
|
||||||
|
xml_buf = ixmlPrintNode( ( IXML_Node * ) * xmlDoc );
|
||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Printing the Parsed xml document \n %s\n",
|
"Printing the Parsed xml document \n %s\n",
|
||||||
xml_buf );
|
xml_buf );
|
||||||
@ -3381,7 +3322,8 @@ UpnpDownloadXmlDoc( const char *url,
|
|||||||
"****************** END OF Parsed XML Doc *****************\n" );
|
"****************** END OF Parsed XML Doc *****************\n" );
|
||||||
ixmlFreeDOMString( xml_buf );
|
ixmlFreeDOMString( xml_buf );
|
||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpDownloadXmlDoc\n" ); )
|
"Exiting UpnpDownloadXmlDoc\n" );
|
||||||
|
#endif
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -3410,9 +3352,8 @@ void
|
|||||||
UpnpThreadDistribution( struct UpnpNonblockParam *Param )
|
UpnpThreadDistribution( struct UpnpNonblockParam *Param )
|
||||||
{
|
{
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside UpnpThreadDistribution \n" );
|
"Inside UpnpThreadDistribution \n" );
|
||||||
)
|
|
||||||
|
|
||||||
switch ( Param->FunName ) {
|
switch ( Param->FunName ) {
|
||||||
#if EXCLUDE_GENA == 0
|
#if EXCLUDE_GENA == 0
|
||||||
@ -3500,9 +3441,8 @@ free( Param ); break;}
|
|||||||
break;
|
break;
|
||||||
} // end of switch(Param->FunName)
|
} // end of switch(Param->FunName)
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting UpnpThreadDistribution \n" );
|
"Exiting UpnpThreadDistribution \n" );
|
||||||
)
|
|
||||||
|
|
||||||
} /****************** End of UpnpThreadDistribution *********************/
|
} /****************** End of UpnpThreadDistribution *********************/
|
||||||
#endif
|
#endif
|
||||||
@ -3662,26 +3602,20 @@ GetHandleInfo( UpnpClient_Handle Hnd,
|
|||||||
struct Handle_Info ** HndInfo )
|
struct Handle_Info ** HndInfo )
|
||||||
{
|
{
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"GetHandleInfo: Handle is %d\n", Hnd );
|
"GetHandleInfo: Handle is %d\n", Hnd );
|
||||||
)
|
|
||||||
|
|
||||||
if( Hnd < 1 || Hnd >= NUM_HANDLE ) {
|
if( Hnd < 1 || Hnd >= NUM_HANDLE ) {
|
||||||
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
|
||||||
"GetHandleInfo : Handle out of range\n" );
|
"GetHandleInfo : Handle out of range\n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_HANDLE;
|
return UPNP_E_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
if( HandleTable[Hnd] != NULL ) {
|
if( HandleTable[Hnd] != NULL ) {
|
||||||
|
|
||||||
*HndInfo = ( struct Handle_Info * )HandleTable[Hnd];
|
*HndInfo = ( struct Handle_Info * )HandleTable[Hnd];
|
||||||
return ( ( struct Handle_Info * )*HndInfo )->HType;
|
return ( ( struct Handle_Info * )*HndInfo )->HType;
|
||||||
}
|
}
|
||||||
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
|
||||||
"GetHandleInfo : exiting\n" );
|
"GetHandleInfo : exiting\n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_INVALID_HANDLE;
|
return UPNP_E_INVALID_HANDLE;
|
||||||
|
|
||||||
@ -3703,9 +3637,8 @@ int
|
|||||||
FreeHandle( int Upnp_Handle )
|
FreeHandle( int Upnp_Handle )
|
||||||
{
|
{
|
||||||
if( Upnp_Handle < 1 || Upnp_Handle >= NUM_HANDLE ) {
|
if( Upnp_Handle < 1 || Upnp_Handle >= NUM_HANDLE ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
"FreeHandleInfo : Handle out of range\n" );
|
"FreeHandleInfo : Handle out of range\n" );
|
||||||
)
|
|
||||||
return UPNP_E_INVALID_HANDLE;
|
return UPNP_E_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3736,7 +3669,7 @@ int PrintHandleInfo( IN UpnpClient_Handle Hnd )
|
|||||||
struct Handle_Info * HndInfo;
|
struct Handle_Info * HndInfo;
|
||||||
if (HandleTable[Hnd] != NULL) {
|
if (HandleTable[Hnd] != NULL) {
|
||||||
HndInfo = HandleTable[Hnd];
|
HndInfo = HandleTable[Hnd];
|
||||||
DBGONLY(
|
#ifdef DEBUG
|
||||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Printing information for Handle_%d\n", Hnd);
|
"Printing information for Handle_%d\n", Hnd);
|
||||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
@ -3746,7 +3679,7 @@ int PrintHandleInfo( IN UpnpClient_Handle Hnd )
|
|||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"DescURL_%s\n", HndInfo->DescURL );
|
"DescURL_%s\n", HndInfo->DescURL );
|
||||||
)
|
)
|
||||||
)
|
#endif
|
||||||
} else {
|
} else {
|
||||||
return UPNP_E_INVALID_HANDLE;
|
return UPNP_E_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
@ -3775,12 +3708,10 @@ void printNodes( IXML_Node * tmpRoot, int depth )
|
|||||||
NodeType = ixmlNode_getNodeType(ChildNode1);
|
NodeType = ixmlNode_getNodeType(ChildNode1);
|
||||||
NodeValue = ixmlNode_getNodeValue(ChildNode1);
|
NodeValue = ixmlNode_getNodeValue(ChildNode1);
|
||||||
NodeName = ixmlNode_getNodeName(ChildNode1);
|
NodeName = ixmlNode_getNodeName(ChildNode1);
|
||||||
DBGONLY(
|
|
||||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"DEPTH-%2d-IXML_Node Type %d, "
|
"DEPTH-%2d-IXML_Node Type %d, "
|
||||||
"IXML_Node Name: %s, IXML_Node Value: %s\n",
|
"IXML_Node Name: %s, IXML_Node Value: %s\n",
|
||||||
depth, NodeType, NodeName, NodeValue);
|
depth, NodeType, NodeName, NodeValue);
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3839,9 +3770,8 @@ void printNodes( IXML_Node * tmpRoot, int depth )
|
|||||||
|
|
||||||
// Create an unbound datagram socket to do the SIOCGIFADDR ioctl on.
|
// Create an unbound datagram socket to do the SIOCGIFADDR ioctl on.
|
||||||
if( ( LocalSock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP ) ) < 0 ) {
|
if( ( LocalSock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP ) ) < 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Can't create addrlist socket\n" );
|
"Can't create addrlist socket\n" );
|
||||||
)
|
|
||||||
return UPNP_E_INIT;
|
return UPNP_E_INIT;
|
||||||
}
|
}
|
||||||
// Get the interface configuration information...
|
// Get the interface configuration information...
|
||||||
@ -3850,9 +3780,8 @@ void printNodes( IXML_Node * tmpRoot, int depth )
|
|||||||
nResult = ioctl( LocalSock, SIOCGIFCONF, &ifConf );
|
nResult = ioctl( LocalSock, SIOCGIFCONF, &ifConf );
|
||||||
|
|
||||||
if( nResult < 0 ) {
|
if( nResult < 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"DiscoverInterfaces: SIOCGIFCONF returned error\n" );
|
"DiscoverInterfaces: SIOCGIFCONF returned error\n" );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_INIT;
|
return UPNP_E_INIT;
|
||||||
}
|
}
|
||||||
@ -3866,11 +3795,9 @@ void printNodes( IXML_Node * tmpRoot, int depth )
|
|||||||
// See if this is the sort of interface we want to deal with.
|
// See if this is the sort of interface we want to deal with.
|
||||||
strcpy( ifReq.ifr_name, pifReq->ifr_name );
|
strcpy( ifReq.ifr_name, pifReq->ifr_name );
|
||||||
if( ioctl( LocalSock, SIOCGIFFLAGS, &ifReq ) < 0 ) {
|
if( ioctl( LocalSock, SIOCGIFFLAGS, &ifReq ) < 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Can't get interface flags for %s:\n",
|
"Can't get interface flags for %s:\n",
|
||||||
ifReq.ifr_name );
|
ifReq.ifr_name );
|
||||||
)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// Skip loopback, point-to-point and down interfaces,
|
// Skip loopback, point-to-point and down interfaces,
|
||||||
// except don't skip down interfaces
|
// except don't skip down interfaces
|
||||||
@ -3899,10 +3826,9 @@ void printNodes( IXML_Node * tmpRoot, int depth )
|
|||||||
|
|
||||||
strncpy( out, inet_ntoa( LocalAddr.sin_addr ), LINE_SIZE );
|
strncpy( out, inet_ntoa( LocalAddr.sin_addr ), LINE_SIZE );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside getlocalhostname : after strncpy %s\n",
|
"Inside getlocalhostname : after strncpy %s\n",
|
||||||
out );
|
out );
|
||||||
)
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ UpnpInitLog( )
|
|||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Function : UpnpSetLogLevel
|
* Function : UpnpSetLogLevel
|
||||||
*
|
*
|
||||||
* Parameters: void
|
* Parameters: Upnp_LogLevel log_level
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* This functions set the log level (see {\tt Upnp_LogLevel}
|
* This functions set the log level (see {\tt Upnp_LogLevel}
|
||||||
@ -152,6 +152,42 @@ UpnpCloseLog( )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Function : DebugAtThisLevel
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* IN Dbg_Level DLevel: The level of the debug logging. It will decide
|
||||||
|
* whether debug statement will go to standard output,
|
||||||
|
* or any of the log files.
|
||||||
|
* IN Dbg_Module Module: debug will go in the name of this module
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This functions returns true if debug output should be done in this
|
||||||
|
* module.
|
||||||
|
*
|
||||||
|
* Returns: int
|
||||||
|
***************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
|
int DebugAtThisLevel(
|
||||||
|
IN Upnp_LogLevel DLevel,
|
||||||
|
IN Dbg_Module Module)
|
||||||
|
{
|
||||||
|
int ret = g_log_level >= DLevel;
|
||||||
|
ret &=
|
||||||
|
DEBUG_ALL ||
|
||||||
|
(Module == SSDP && DEBUG_SSDP ) ||
|
||||||
|
(Module == SOAP && DEBUG_SOAP ) ||
|
||||||
|
(Module == GENA && DEBUG_GENA ) ||
|
||||||
|
(Module == TPOOL && DEBUG_TPOOL) ||
|
||||||
|
(Module == MSERV && DEBUG_MSERV) ||
|
||||||
|
(Module == DOM && DEBUG_DOM ) ||
|
||||||
|
(Module == HTTP && DEBUG_HTTP );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Function : UpnpPrintf
|
* Function : UpnpPrintf
|
||||||
*
|
*
|
||||||
@ -173,64 +209,46 @@ UpnpCloseLog( )
|
|||||||
* statement is coming
|
* statement is coming
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
DBGONLY( void UpnpPrintf( IN Upnp_LogLevel DLevel,
|
#ifdef DEBUG
|
||||||
|
void UpnpPrintf(
|
||||||
|
IN Upnp_LogLevel DLevel,
|
||||||
IN Dbg_Module Module,
|
IN Dbg_Module Module,
|
||||||
IN const char *DbgFileName,
|
IN const char *DbgFileName,
|
||||||
IN int DbgLineNo,
|
IN int DbgLineNo,
|
||||||
IN const char *FmtStr,
|
IN const char *FmtStr,
|
||||||
... ) {
|
... )
|
||||||
|
{
|
||||||
va_list ArgList;
|
va_list ArgList;
|
||||||
|
|
||||||
|
if (!DebugAtThisLevel(DLevel, Module)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ithread_mutex_lock(&GlobalDebugMutex);
|
||||||
va_start(ArgList, FmtStr);
|
va_start(ArgList, FmtStr);
|
||||||
if( g_log_level < DLevel ) return; if( DEBUG_ALL == 0 ) {
|
if (!DEBUG_TARGET) {
|
||||||
switch ( Module ) {
|
if( DbgFileName ) {
|
||||||
case SSDP:
|
UpnpDisplayFileAndLine(stdout, DbgFileName, DbgLineNo);
|
||||||
if( DEBUG_SSDP == 1 ) break;
|
|
||||||
else
|
|
||||||
return; case SOAP:
|
|
||||||
if( DEBUG_SOAP == 1 ) break;
|
|
||||||
else
|
|
||||||
return; case GENA:
|
|
||||||
if( DEBUG_GENA == 1 ) break;
|
|
||||||
else
|
|
||||||
return; case TPOOL:
|
|
||||||
if( DEBUG_TPOOL == 1 ) break;
|
|
||||||
else
|
|
||||||
return; case MSERV:
|
|
||||||
if( DEBUG_MSERV == 1 ) break;
|
|
||||||
else
|
|
||||||
return; case DOM:
|
|
||||||
if( DEBUG_DOM == 1 ) break;
|
|
||||||
else
|
|
||||||
return; case HTTP:
|
|
||||||
if( DEBUG_HTTP == 1 ) break;
|
|
||||||
else
|
|
||||||
return; case API:
|
|
||||||
if( DEBUG_API == 1 ) break;
|
|
||||||
else
|
|
||||||
return; default:
|
|
||||||
return;}
|
|
||||||
}
|
}
|
||||||
|
vfprintf(stdout, FmtStr, ArgList);
|
||||||
ithread_mutex_lock( &GlobalDebugMutex ); if( DEBUG_TARGET == 0 ) {
|
fflush(stdout);
|
||||||
|
} else if (DLevel == 0) {
|
||||||
if (DbgFileName) {
|
if (DbgFileName) {
|
||||||
UpnpDisplayFileAndLine( stdout, DbgFileName, DbgLineNo );}
|
UpnpDisplayFileAndLine(ErrFileHnd, DbgFileName, DbgLineNo);
|
||||||
vfprintf( stdout, FmtStr, ArgList ); fflush( stdout );}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( DLevel == 0 ) {
|
|
||||||
if( DbgFileName ) {
|
|
||||||
UpnpDisplayFileAndLine( ErrFileHnd, DbgFileName, DbgLineNo );}
|
|
||||||
vfprintf( ErrFileHnd, FmtStr, ArgList ); fflush( ErrFileHnd );}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( DbgFileName ) {
|
|
||||||
UpnpDisplayFileAndLine( InfoFileHnd, DbgFileName, DbgLineNo );}
|
|
||||||
vfprintf( InfoFileHnd, FmtStr, ArgList ); fflush( InfoFileHnd );}
|
|
||||||
}
|
}
|
||||||
va_end( ArgList ); ithread_mutex_unlock( &GlobalDebugMutex );}
|
vfprintf(ErrFileHnd, FmtStr, ArgList);
|
||||||
|
fflush(ErrFileHnd);
|
||||||
)
|
} else {
|
||||||
|
if (DbgFileName) {
|
||||||
|
UpnpDisplayFileAndLine(InfoFileHnd, DbgFileName, DbgLineNo);
|
||||||
|
}
|
||||||
|
vfprintf(InfoFileHnd, FmtStr, ArgList);
|
||||||
|
fflush(InfoFileHnd);
|
||||||
|
}
|
||||||
|
va_end(ArgList);
|
||||||
|
ithread_mutex_unlock(&GlobalDebugMutex);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -249,46 +267,26 @@ return; default:
|
|||||||
* NULL : if the module is turn off for debug
|
* NULL : if the module is turn off for debug
|
||||||
* else returns the right file descriptor
|
* else returns the right file descriptor
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
DBGONLY( FILE * GetDebugFile( Upnp_LogLevel DLevel, Dbg_Module Module ) {
|
#ifdef DEBUG
|
||||||
if( g_log_level < DLevel ) return NULL; if( DEBUG_ALL == 0 ) {
|
FILE *GetDebugFile( Upnp_LogLevel DLevel, Dbg_Module Module )
|
||||||
switch ( Module ) {
|
{
|
||||||
case SSDP:
|
FILE *ret;
|
||||||
if( DEBUG_SSDP == 1 ) break;
|
|
||||||
else
|
if (!DebugAtThisLevel(DLevel, Module)) {
|
||||||
return NULL; case SOAP:
|
ret = NULL;
|
||||||
if( DEBUG_SOAP == 1 ) break;
|
|
||||||
else
|
|
||||||
return NULL; case GENA:
|
|
||||||
if( DEBUG_GENA == 1 ) break;
|
|
||||||
else
|
|
||||||
return NULL; case TPOOL:
|
|
||||||
if( DEBUG_TPOOL == 1 ) break;
|
|
||||||
else
|
|
||||||
return NULL; case MSERV:
|
|
||||||
if( DEBUG_MSERV == 1 ) break;
|
|
||||||
else
|
|
||||||
return NULL; case DOM:
|
|
||||||
if( DEBUG_DOM == 1 ) break;
|
|
||||||
else
|
|
||||||
return NULL; case API:
|
|
||||||
if( DEBUG_API == 1 ) break;
|
|
||||||
else
|
|
||||||
return NULL; default:
|
|
||||||
return NULL;}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( DEBUG_TARGET == 0 ) {
|
if (!DEBUG_TARGET) {
|
||||||
return stdout;}
|
ret = stdout;
|
||||||
else
|
} else if (DLevel == 0) {
|
||||||
{
|
ret = ErrFileHnd;
|
||||||
if( DLevel == 0 ) {
|
} else {
|
||||||
return ErrFileHnd;}
|
ret = InfoFileHnd;
|
||||||
else
|
|
||||||
{
|
|
||||||
return InfoFileHnd;}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
)
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -305,17 +303,26 @@ return NULL; default:
|
|||||||
* debug statement is coming to the log file
|
* debug statement is coming to the log file
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
DBGONLY( void UpnpDisplayFileAndLine( IN FILE * fd,
|
#ifdef DEBUG
|
||||||
|
void UpnpDisplayFileAndLine(
|
||||||
|
IN FILE * fd,
|
||||||
IN const char *DbgFileName,
|
IN const char *DbgFileName,
|
||||||
IN int DbgLineNo ) {
|
IN int DbgLineNo)
|
||||||
|
{
|
||||||
int starlength = 66;
|
int starlength = 66;
|
||||||
const char *lines[2];
|
const char *lines[2];
|
||||||
char FileAndLine[500]; lines[0] = "DEBUG"; if( DbgFileName ) {
|
char FileAndLine[500];
|
||||||
sprintf( FileAndLine, "FILE: %s, LINE: %d", DbgFileName,
|
lines[0] = "DEBUG";
|
||||||
DbgLineNo ); lines[1] = FileAndLine;}
|
if (DbgFileName) {
|
||||||
|
sprintf(FileAndLine,
|
||||||
UpnpDisplayBanner( fd, lines, 2, starlength ); fflush( fd );}
|
"FILE: %s, LINE: %d",
|
||||||
)
|
DbgFileName, DbgLineNo);
|
||||||
|
lines[1] = FileAndLine;
|
||||||
|
}
|
||||||
|
UpnpDisplayBanner(fd, lines, 2, starlength);
|
||||||
|
fflush(fd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -332,47 +339,58 @@ return NULL; default:
|
|||||||
* per the requested banner
|
* per the requested banner
|
||||||
* Returns: void
|
* Returns: void
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
DBGONLY( void UpnpDisplayBanner( IN FILE * fd,
|
#ifdef DEBUG
|
||||||
|
void UpnpDisplayBanner(
|
||||||
|
IN FILE * fd,
|
||||||
IN const char **lines,
|
IN const char **lines,
|
||||||
IN size_t size,
|
IN size_t size,
|
||||||
IN int starLength ) {
|
IN int starLength)
|
||||||
char *stars = ( char * )malloc( starLength + 1 );
|
{
|
||||||
const char *line = NULL;
|
|
||||||
int leftMarginLength = starLength / 2 + 1;
|
int leftMarginLength = starLength / 2 + 1;
|
||||||
int rightMarginLength = starLength / 2 + 1;
|
int rightMarginLength = starLength / 2 + 1;
|
||||||
char *leftMargin = ( char * )malloc( leftMarginLength );
|
|
||||||
char *rightMargin = ( char * )malloc( rightMarginLength );
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int LineSize = 0;
|
int LineSize = 0;
|
||||||
|
int starLengthMinus2 = starLength - 2;
|
||||||
|
|
||||||
|
char *leftMargin = ( char * )malloc( leftMarginLength );
|
||||||
|
char *rightMargin = ( char * )malloc( rightMarginLength );
|
||||||
|
char *stars = ( char * )malloc( starLength + 1 );
|
||||||
char *currentLine = ( char * )malloc( starLength + 1 );
|
char *currentLine = ( char * )malloc( starLength + 1 );
|
||||||
|
const char *line = NULL;
|
||||||
|
|
||||||
memset( stars, '*', starLength );
|
memset( stars, '*', starLength );
|
||||||
stars[starLength] = 0;
|
stars[starLength] = 0;
|
||||||
memset( leftMargin, 0, leftMarginLength );
|
memset( leftMargin, 0, leftMarginLength );
|
||||||
memset( rightMargin, 0, rightMarginLength );
|
memset( rightMargin, 0, rightMarginLength );
|
||||||
fprintf( fd, "\n%s\n", stars ); for( i = 0; i < size; i++ ) {
|
fprintf( fd, "\n%s\n", stars );
|
||||||
|
for( i = 0; i < size; i++ ) {
|
||||||
LineSize = strlen( lines[i] );
|
LineSize = strlen( lines[i] );
|
||||||
line = lines[i]; while( LineSize > ( starLength - 2 ) ) {
|
line = lines[i];
|
||||||
memcpy( currentLine, line, ( starLength - 2 ) );
|
while( LineSize > starLengthMinus2 ) {
|
||||||
currentLine[( starLength - 2 )] = 0;
|
memcpy( currentLine, line, starLengthMinus2 );
|
||||||
|
currentLine[starLengthMinus2] = 0;
|
||||||
fprintf( fd, "*%s*\n", currentLine );
|
fprintf( fd, "*%s*\n", currentLine );
|
||||||
LineSize -= ( starLength - 2 ); line += ( starLength - 2 );}
|
LineSize -= starLengthMinus2;
|
||||||
|
line += starLengthMinus2;
|
||||||
|
}
|
||||||
|
leftMarginLength = (starLengthMinus2 - LineSize)/2;
|
||||||
if( LineSize % 2 == 0 ) {
|
if( LineSize % 2 == 0 ) {
|
||||||
leftMarginLength = rightMarginLength =
|
rightMarginLength = leftMarginLength;
|
||||||
( ( starLength - 2 ) - LineSize ) / 2;}
|
} else {
|
||||||
else
|
rightMarginLength = leftMarginLength + 1;
|
||||||
{
|
}
|
||||||
leftMarginLength = ( ( starLength - 2 ) - LineSize ) / 2;
|
|
||||||
rightMarginLength =
|
|
||||||
( ( starLength - 2 ) - LineSize ) / 2 + 1;}
|
|
||||||
|
|
||||||
memset( leftMargin, ' ', leftMarginLength );
|
memset( leftMargin, ' ', leftMarginLength );
|
||||||
memset( rightMargin, ' ', rightMarginLength );
|
memset( rightMargin, ' ', rightMarginLength );
|
||||||
leftMargin[leftMarginLength] = 0;
|
leftMargin[leftMarginLength] = 0;
|
||||||
rightMargin[rightMarginLength] = 0;
|
rightMargin[rightMarginLength] = 0;
|
||||||
fprintf( fd, "*%s%s%s*\n", leftMargin, line, rightMargin );}
|
fprintf( fd, "*%s%s%s*\n", leftMargin, line, rightMargin );
|
||||||
|
}
|
||||||
fprintf( fd, "%s\n\n", stars );
|
fprintf( fd, "%s\n\n", stars );
|
||||||
|
|
||||||
|
free( currentLine );
|
||||||
|
free( stars );
|
||||||
|
free( rightMargin );
|
||||||
free( leftMargin );
|
free( leftMargin );
|
||||||
free( rightMargin ); free( stars ); free( currentLine );}
|
}
|
||||||
)
|
#endif
|
||||||
|
|
||||||
|
@ -104,9 +104,8 @@ genaCallback( IN http_parser_t * parser,
|
|||||||
// subscribe
|
// subscribe
|
||||||
gena_process_subscription_request( info, request );}
|
gena_process_subscription_request( info, request );}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_ALL, GENA, __FILE__, __LINE__,
|
||||||
( UPNP_ALL, GENA, __FILE__, __LINE__,
|
"got subscription request\n" );
|
||||||
"got subscription request\n" ); )
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -72,14 +72,14 @@ GenaAutoRenewSubscription( IN void *input )
|
|||||||
int eventType = 0;
|
int eventType = 0;
|
||||||
|
|
||||||
if( AUTO_RENEW_TIME == 0 ) {
|
if( AUTO_RENEW_TIME == 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"GENA SUB EXPIRED" ) );
|
"GENA SUB EXPIRED" );
|
||||||
sub_struct->ErrCode = UPNP_E_SUCCESS;
|
sub_struct->ErrCode = UPNP_E_SUCCESS;
|
||||||
send_callback = 1;
|
send_callback = 1;
|
||||||
eventType = UPNP_EVENT_SUBSCRIPTION_EXPIRED;
|
eventType = UPNP_EVENT_SUBSCRIPTION_EXPIRED;
|
||||||
} else {
|
} else {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"GENA AUTO RENEW" ) );
|
"GENA AUTO RENEW" );
|
||||||
if( ( ( sub_struct->ErrCode = genaRenewSubscription( event->handle,
|
if( ( ( sub_struct->ErrCode = genaRenewSubscription( event->handle,
|
||||||
sub_struct->
|
sub_struct->
|
||||||
Sid,
|
Sid,
|
||||||
@ -99,8 +99,8 @@ GenaAutoRenewSubscription( IN void *input )
|
|||||||
free_upnp_timeout( event );
|
free_upnp_timeout( event );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"HANDLE IS VALID" ) );
|
"HANDLE IS VALID" );
|
||||||
callback_fun = handle_info->Callback;
|
callback_fun = handle_info->Callback;
|
||||||
cookie = handle_info->Cookie;
|
cookie = handle_info->Cookie;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
@ -538,8 +538,8 @@ genaSubscribe( IN UpnpClient_Handle client_handle,
|
|||||||
struct Handle_Info *handle_info;
|
struct Handle_Info *handle_info;
|
||||||
char *EventURL = NULL;
|
char *EventURL = NULL;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"GENA SUBSCRIBE BEGIN" ) );
|
"GENA SUBSCRIBE BEGIN" );
|
||||||
HandleLock();
|
HandleLock();
|
||||||
|
|
||||||
memset( out_sid, 0, sizeof( Upnp_SID ) );
|
memset( out_sid, 0, sizeof( Upnp_SID ) );
|
||||||
@ -557,9 +557,9 @@ genaSubscribe( IN UpnpClient_Handle client_handle,
|
|||||||
gena_subscribe( PublisherURL, TimeOut, NULL, &ActualSID );
|
gena_subscribe( PublisherURL, TimeOut, NULL, &ActualSID );
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( return_code != UPNP_E_SUCCESS ) {
|
if( return_code != UPNP_E_SUCCESS ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, GENA, __FILE__, __LINE__,
|
||||||
"SUBSCRIBE FAILED in transfer error code: %d returned\n",
|
"SUBSCRIBE FAILED in transfer error code: %d returned\n",
|
||||||
return_code ) );
|
return_code );
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -663,8 +663,8 @@ genaRenewSubscription( IN UpnpClient_Handle client_handle,
|
|||||||
free_upnp_timeout( ( upnp_timeout * ) tempJob.arg );
|
free_upnp_timeout( ( upnp_timeout * ) tempJob.arg );
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"REMOVED AUTO RENEW EVENT" ) );
|
"REMOVED AUTO RENEW EVENT" );
|
||||||
|
|
||||||
sub->RenewEventId = -1;
|
sub->RenewEventId = -1;
|
||||||
return_code = copy_client_subscription( sub, &sub_copy );
|
return_code = copy_client_subscription( sub, &sub_copy );
|
||||||
|
@ -65,9 +65,9 @@ genaUnregisterDevice( IN UpnpDevice_Handle device_handle )
|
|||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( device_handle, &handle_info ) != HND_DEVICE ) {
|
if( GetHandleInfo( device_handle, &handle_info ) != HND_DEVICE ) {
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, GENA, __FILE__, __LINE__,
|
||||||
"genaUnregisterDevice : BAD Handle : %d\n",
|
"genaUnregisterDevice : BAD Handle : %d\n",
|
||||||
device_handle ) );
|
device_handle );
|
||||||
|
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
return GENA_E_BAD_HANDLE;
|
return GENA_E_BAD_HANDLE;
|
||||||
@ -203,10 +203,10 @@ notify_send_and_recv( IN uri_type * destination_url,
|
|||||||
SOCKINFO info;
|
SOCKINFO info;
|
||||||
|
|
||||||
// connect
|
// connect
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, GENA, __FILE__, __LINE__,
|
||||||
"gena notify to: %.*s\n",
|
"gena notify to: %.*s\n",
|
||||||
(int)destination_url->hostport.text.size,
|
(int)destination_url->hostport.text.size,
|
||||||
destination_url->hostport.text.buff ); )
|
destination_url->hostport.text.buff );
|
||||||
|
|
||||||
conn_fd = http_Connect( destination_url, &url );
|
conn_fd = http_Connect( destination_url, &url );
|
||||||
if( conn_fd < 0 ) {
|
if( conn_fd < 0 ) {
|
||||||
@ -477,8 +477,8 @@ genaInitNotify( IN UpnpDevice_Handle device_handle,
|
|||||||
|
|
||||||
notify_thread_struct *thread_struct = NULL;
|
notify_thread_struct *thread_struct = NULL;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"GENA BEGIN INITIAL NOTIFY " ) );
|
"GENA BEGIN INITIAL NOTIFY " );
|
||||||
|
|
||||||
reference_count = ( int * )malloc( sizeof( int ) );
|
reference_count = ( int * )malloc( sizeof( int ) );
|
||||||
|
|
||||||
@ -523,9 +523,9 @@ genaInitNotify( IN UpnpDevice_Handle device_handle,
|
|||||||
return GENA_E_BAD_SERVICE;
|
return GENA_E_BAD_SERVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"FOUND SERVICE IN INIT NOTFY: UDN %s, ServID: %s ",
|
"FOUND SERVICE IN INIT NOTFY: UDN %s, ServID: %s ",
|
||||||
UDN, servId ) );
|
UDN, servId );
|
||||||
|
|
||||||
if( ( ( sub = GetSubscriptionSID( sid, service ) ) == NULL ) ||
|
if( ( ( sub = GetSubscriptionSID( sid, service ) ) == NULL ) ||
|
||||||
( sub->active ) ) {
|
( sub->active ) ) {
|
||||||
@ -536,9 +536,8 @@ genaInitNotify( IN UpnpDevice_Handle device_handle,
|
|||||||
return GENA_E_BAD_SID;
|
return GENA_E_BAD_SID;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"FOUND SUBSCRIPTION IN INIT NOTIFY: SID %s ",
|
"FOUND SUBSCRIPTION IN INIT NOTIFY: SID %s ", sid );
|
||||||
sid ) );
|
|
||||||
|
|
||||||
sub->active = 1;
|
sub->active = 1;
|
||||||
|
|
||||||
@ -553,9 +552,9 @@ genaInitNotify( IN UpnpDevice_Handle device_handle,
|
|||||||
return return_code;
|
return return_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"GENERATED PROPERY SET IN INIT NOTIFY: \n'%s'\n",
|
"GENERATED PROPERY SET IN INIT NOTIFY: \n'%s'\n",
|
||||||
propertySet ) );
|
propertySet );
|
||||||
|
|
||||||
headers_size = strlen( "CONTENT-TYPE text/xml\r\n" ) +
|
headers_size = strlen( "CONTENT-TYPE text/xml\r\n" ) +
|
||||||
strlen( "CONTENT-LENGTH: \r\n" ) + MAX_CONTENT_LENGTH +
|
strlen( "CONTENT-LENGTH: \r\n" ) + MAX_CONTENT_LENGTH +
|
||||||
@ -668,8 +667,8 @@ genaInitNotifyExt( IN UpnpDevice_Handle device_handle,
|
|||||||
|
|
||||||
notify_thread_struct *thread_struct = NULL;
|
notify_thread_struct *thread_struct = NULL;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"GENA BEGIN INITIAL NOTIFY EXT" ) );
|
"GENA BEGIN INITIAL NOTIFY EXT" );
|
||||||
reference_count = ( int * )malloc( sizeof( int ) );
|
reference_count = ( int * )malloc( sizeof( int ) );
|
||||||
|
|
||||||
if( reference_count == NULL ) {
|
if( reference_count == NULL ) {
|
||||||
@ -712,9 +711,9 @@ genaInitNotifyExt( IN UpnpDevice_Handle device_handle,
|
|||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
return GENA_E_BAD_SERVICE;
|
return GENA_E_BAD_SERVICE;
|
||||||
}
|
}
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"FOUND SERVICE IN INIT NOTFY EXT: UDN %s, ServID: %s\n",
|
"FOUND SERVICE IN INIT NOTFY EXT: UDN %s, ServID: %s\n",
|
||||||
UDN, servId ) );
|
UDN, servId );
|
||||||
|
|
||||||
if( ( ( sub = GetSubscriptionSID( sid, service ) ) == NULL ) ||
|
if( ( ( sub = GetSubscriptionSID( sid, service ) ) == NULL ) ||
|
||||||
( sub->active ) ) {
|
( sub->active ) ) {
|
||||||
@ -724,9 +723,8 @@ genaInitNotifyExt( IN UpnpDevice_Handle device_handle,
|
|||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
return GENA_E_BAD_SID;
|
return GENA_E_BAD_SID;
|
||||||
}
|
}
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"FOUND SUBSCRIPTION IN INIT NOTIFY EXT: SID %s",
|
"FOUND SUBSCRIPTION IN INIT NOTIFY EXT: SID %s", sid );
|
||||||
sid ) );
|
|
||||||
|
|
||||||
sub->active = 1;
|
sub->active = 1;
|
||||||
|
|
||||||
@ -739,9 +737,9 @@ genaInitNotifyExt( IN UpnpDevice_Handle device_handle,
|
|||||||
return UPNP_E_INVALID_PARAM;
|
return UPNP_E_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"GENERATED PROPERY SET IN INIT EXT NOTIFY: %s",
|
"GENERATED PROPERY SET IN INIT EXT NOTIFY: %s",
|
||||||
propertySet ) );
|
propertySet );
|
||||||
|
|
||||||
headers_size = strlen( "CONTENT-TYPE text/xml\r\n" ) +
|
headers_size = strlen( "CONTENT-TYPE text/xml\r\n" ) +
|
||||||
strlen( "CONTENT-LENGTH: \r\n" ) + MAX_CONTENT_LENGTH +
|
strlen( "CONTENT-LENGTH: \r\n" ) + MAX_CONTENT_LENGTH +
|
||||||
@ -1317,8 +1315,8 @@ gena_process_subscription_request( IN SOCKINFO * info,
|
|||||||
memptr callback_hdr;
|
memptr callback_hdr;
|
||||||
memptr timeout_hdr;
|
memptr timeout_hdr;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"Subscription Request Received:\n" ) );
|
"Subscription Request Received:\n" );
|
||||||
|
|
||||||
if( httpmsg_find_hdr( request, HDR_NT, &nt_hdr ) == NULL ) {
|
if( httpmsg_find_hdr( request, HDR_NT, &nt_hdr ) == NULL ) {
|
||||||
error_respond( info, HTTP_BAD_REQUEST, request );
|
error_respond( info, HTTP_BAD_REQUEST, request );
|
||||||
@ -1347,10 +1345,9 @@ gena_process_subscription_request( IN SOCKINFO * info,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"SubscriptionRequest for event URL path: %s\n",
|
"SubscriptionRequest for event URL path: %s\n",
|
||||||
event_url_path );
|
event_url_path );
|
||||||
)
|
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
|
|
||||||
@ -1371,11 +1368,11 @@ gena_process_subscription_request( IN SOCKINFO * info,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"Subscription Request: Number of Subscriptions already %d\n "
|
"Subscription Request: Number of Subscriptions already %d\n "
|
||||||
"Max Subscriptions allowed: %d\n",
|
"Max Subscriptions allowed: %d\n",
|
||||||
service->TotalSubscriptions,
|
service->TotalSubscriptions,
|
||||||
handle_info->MaxSubscriptions ) );
|
handle_info->MaxSubscriptions );
|
||||||
|
|
||||||
// too many subscriptions
|
// too many subscriptions
|
||||||
if( handle_info->MaxSubscriptions != -1 &&
|
if( handle_info->MaxSubscriptions != -1 &&
|
||||||
@ -1548,12 +1545,11 @@ gena_process_subscription_renewal_request( IN SOCKINFO * info,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
"Renew request: Number of subscriptions already: %d\n "
|
"Renew request: Number of subscriptions already: %d\n "
|
||||||
"Max Subscriptions allowed:%d\n",
|
"Max Subscriptions allowed:%d\n",
|
||||||
service->TotalSubscriptions,
|
service->TotalSubscriptions,
|
||||||
handle_info->MaxSubscriptions );
|
handle_info->MaxSubscriptions );
|
||||||
)
|
|
||||||
// too many subscriptions
|
// too many subscriptions
|
||||||
if( handle_info->MaxSubscriptions != -1 &&
|
if( handle_info->MaxSubscriptions != -1 &&
|
||||||
service->TotalSubscriptions > handle_info->MaxSubscriptions ) {
|
service->TotalSubscriptions > handle_info->MaxSubscriptions ) {
|
||||||
|
@ -174,10 +174,8 @@ dispatch_request( IN SOCKINFO * info,
|
|||||||
case HTTPMETHOD_NOTIFY:
|
case HTTPMETHOD_NOTIFY:
|
||||||
case HTTPMETHOD_SUBSCRIBE:
|
case HTTPMETHOD_SUBSCRIBE:
|
||||||
case HTTPMETHOD_UNSUBSCRIBE:
|
case HTTPMETHOD_UNSUBSCRIBE:
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"miniserver %d: got GENA msg\n", info->socket );
|
"miniserver %d: got GENA msg\n", info->socket );
|
||||||
)
|
|
||||||
callback = gGenaCallback;
|
callback = gGenaCallback;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -275,10 +273,8 @@ handle_request( void *args )
|
|||||||
struct mserv_request_t *request = ( struct mserv_request_t * )args;
|
struct mserv_request_t *request = ( struct mserv_request_t * )args;
|
||||||
int connfd = request->connfd;
|
int connfd = request->connfd;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"miniserver %d: READING\n", connfd );
|
"miniserver %d: READING\n", connfd );
|
||||||
)
|
|
||||||
//parser_request_init( &parser ); ////LEAK_FIX_MK
|
//parser_request_init( &parser ); ////LEAK_FIX_MK
|
||||||
hmsg = &parser.msg;
|
hmsg = &parser.msg;
|
||||||
|
|
||||||
@ -295,10 +291,8 @@ handle_request( void *args )
|
|||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"miniserver %d: PROCESSING...\n", connfd );
|
"miniserver %d: PROCESSING...\n", connfd );
|
||||||
)
|
|
||||||
// dispatch
|
// dispatch
|
||||||
http_error_code = dispatch_request( &info, &parser );
|
http_error_code = dispatch_request( &info, &parser );
|
||||||
if( http_error_code != 0 ) {
|
if( http_error_code != 0 ) {
|
||||||
@ -316,10 +310,8 @@ handle_request( void *args )
|
|||||||
handle_error( &info, http_error_code, major, minor );
|
handle_error( &info, http_error_code, major, minor );
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"miniserver %d: COMPLETE\n", connfd );
|
"miniserver %d: COMPLETE\n", connfd );
|
||||||
)
|
|
||||||
sock_destroy( &info, SD_BOTH ); //should shutdown completely
|
sock_destroy( &info, SD_BOTH ); //should shutdown completely
|
||||||
|
|
||||||
httpmsg_destroy( hmsg );
|
httpmsg_destroy( hmsg );
|
||||||
@ -352,10 +344,8 @@ schedule_request_job( IN int connfd,
|
|||||||
( struct mserv_request_t * )
|
( struct mserv_request_t * )
|
||||||
malloc( sizeof( struct mserv_request_t ) );
|
malloc( sizeof( struct mserv_request_t ) );
|
||||||
if( request == NULL ) {
|
if( request == NULL ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"mserv %d: out of memory\n", connfd );
|
"mserv %d: out of memory\n", connfd );
|
||||||
)
|
|
||||||
shutdown( request->connfd, SD_BOTH );
|
shutdown( request->connfd, SD_BOTH );
|
||||||
UpnpCloseSocket( connfd );
|
UpnpCloseSocket( connfd );
|
||||||
return;
|
return;
|
||||||
@ -370,10 +360,8 @@ schedule_request_job( IN int connfd,
|
|||||||
TPJobSetPriority( &job, MED_PRIORITY );
|
TPJobSetPriority( &job, MED_PRIORITY );
|
||||||
|
|
||||||
if( ThreadPoolAdd( &gRecvThreadPool, &job, NULL ) != 0 ) {
|
if( ThreadPoolAdd( &gRecvThreadPool, &job, NULL ) != 0 ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"mserv %d: cannot schedule request\n", connfd );
|
"mserv %d: cannot schedule request\n", connfd );
|
||||||
)
|
|
||||||
free( request );
|
free( request );
|
||||||
shutdown( connfd, SD_BOTH );
|
shutdown( connfd, SD_BOTH );
|
||||||
UpnpCloseSocket( connfd );
|
UpnpCloseSocket( connfd );
|
||||||
@ -446,10 +434,8 @@ RunMiniServer( MiniServerSockArray * miniSock )
|
|||||||
|
|
||||||
if( select( maxMiniSock, &rdSet, NULL, &expSet, NULL ) ==
|
if( select( maxMiniSock, &rdSet, NULL, &expSet, NULL ) ==
|
||||||
UPNP_SOCKETERROR ) {
|
UPNP_SOCKETERROR ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
||||||
( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
|
||||||
"Error in select call !!!\n" );
|
"Error in select call !!!\n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -459,11 +445,9 @@ RunMiniServer( MiniServerSockArray * miniSock )
|
|||||||
( struct sockaddr * )&clientAddr,
|
( struct sockaddr * )&clientAddr,
|
||||||
&clientLen );
|
&clientLen );
|
||||||
if( connectHnd == UPNP_INVALID_SOCKET ) {
|
if( connectHnd == UPNP_INVALID_SOCKET ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"miniserver: Error"
|
"miniserver: Error"
|
||||||
" in accepting connection\n" );
|
" in accepting connection\n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
schedule_request_job( connectHnd, &clientAddr );
|
schedule_request_job( connectHnd, &clientAddr );
|
||||||
@ -489,24 +473,19 @@ RunMiniServer( MiniServerSockArray * miniSock )
|
|||||||
&clientLen );
|
&clientLen );
|
||||||
if( byteReceived > 0 ) {
|
if( byteReceived > 0 ) {
|
||||||
requestBuf[byteReceived] = '\0';
|
requestBuf[byteReceived] = '\0';
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"Received response !!! %s From host %s \n",
|
"Received response !!! %s From host %s \n",
|
||||||
requestBuf,
|
requestBuf, inet_ntoa( clientAddr.sin_addr ) );
|
||||||
inet_ntoa( clientAddr.sin_addr ) );
|
UpnpPrintf( UPNP_PACKET, MSERV, __FILE__, __LINE__,
|
||||||
)
|
|
||||||
DBGONLY( UpnpPrintf
|
|
||||||
( UPNP_PACKET, MSERV, __FILE__, __LINE__,
|
|
||||||
"Received multicast packet: \n %s\n",
|
"Received multicast packet: \n %s\n",
|
||||||
requestBuf );
|
requestBuf );
|
||||||
)
|
|
||||||
|
|
||||||
if( NULL != strstr( requestBuf, "ShutDown" ) )
|
if( NULL != strstr( requestBuf, "ShutDown" ) ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
shutdown( miniServSock, SD_BOTH );
|
shutdown( miniServSock, SD_BOTH );
|
||||||
@ -555,10 +534,8 @@ get_port( int sockfd )
|
|||||||
}
|
}
|
||||||
|
|
||||||
port = ntohs( sockinfo.sin_port );
|
port = ntohs( sockinfo.sin_port );
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
|
||||||
"sockfd = %d, .... port = %d\n", sockfd, port );
|
"sockfd = %d, .... port = %d\n", sockfd, port );
|
||||||
)
|
|
||||||
|
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
@ -623,16 +600,10 @@ get_miniserver_sockets( MiniServerSockArray * out,
|
|||||||
//THIS MAY CAUSE TCP TO BECOME LESS RELIABLE
|
//THIS MAY CAUSE TCP TO BECOME LESS RELIABLE
|
||||||
//HOWEVER IT HAS BEEN SUGESTED FOR TCP SERVERS
|
//HOWEVER IT HAS BEEN SUGESTED FOR TCP SERVERS
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
"mserv start: resuseaddr set\n" );
|
"mserv start: resuseaddr set\n" );
|
||||||
)
|
sockError = setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR,
|
||||||
|
( const char * )&reuseaddr_on, sizeof( int ));
|
||||||
sockError = setsockopt( listenfd,
|
|
||||||
SOL_SOCKET,
|
|
||||||
SO_REUSEADDR,
|
|
||||||
( const char * )&reuseaddr_on,
|
|
||||||
sizeof( int )
|
|
||||||
);
|
|
||||||
if( sockError == UPNP_SOCKETERROR ) {
|
if( sockError == UPNP_SOCKETERROR ) {
|
||||||
shutdown( listenfd, SD_BOTH );
|
shutdown( listenfd, SD_BOTH );
|
||||||
UpnpCloseSocket( listenfd );
|
UpnpCloseSocket( listenfd );
|
||||||
@ -665,16 +636,14 @@ get_miniserver_sockets( MiniServerSockArray * out,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( sockError == UPNP_SOCKETERROR ) {
|
if( sockError == UPNP_SOCKETERROR ) {
|
||||||
DBGONLY( perror( "mserv start: bind failed" );
|
perror( "mserv start: bind failed" );
|
||||||
)
|
|
||||||
shutdown( listenfd, SD_BOTH );
|
shutdown( listenfd, SD_BOTH );
|
||||||
UpnpCloseSocket( listenfd );
|
UpnpCloseSocket( listenfd );
|
||||||
return UPNP_E_SOCKET_BIND; // bind failed
|
return UPNP_E_SOCKET_BIND; // bind failed
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__,
|
||||||
"mserv start: bind success\n" );
|
"mserv start: bind success\n" );
|
||||||
)
|
|
||||||
|
|
||||||
success = listen( listenfd, SOMAXCONN );
|
success = listen( listenfd, SOMAXCONN );
|
||||||
if( success == UPNP_SOCKETERROR ) {
|
if( success == UPNP_SOCKETERROR ) {
|
||||||
@ -694,10 +663,9 @@ get_miniserver_sockets( MiniServerSockArray * out,
|
|||||||
|
|
||||||
if( ( miniServerStopSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) ==
|
if( ( miniServerStopSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) ==
|
||||||
UPNP_INVALID_SOCKET ) {
|
UPNP_INVALID_SOCKET ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL,
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
MSERV, __FILE__, __LINE__,
|
MSERV, __FILE__, __LINE__,
|
||||||
"Error in socket operation !!!\n" );
|
"Error in socket operation !!!\n" );
|
||||||
)
|
|
||||||
shutdown( listenfd, SD_BOTH );
|
shutdown( listenfd, SD_BOTH );
|
||||||
UpnpCloseSocket( listenfd );
|
UpnpCloseSocket( listenfd );
|
||||||
return UPNP_E_OUTOF_SOCKET;
|
return UPNP_E_OUTOF_SOCKET;
|
||||||
@ -711,10 +679,9 @@ get_miniserver_sockets( MiniServerSockArray * out,
|
|||||||
if( bind( miniServerStopSock, ( struct sockaddr * )&serverAddr,
|
if( bind( miniServerStopSock, ( struct sockaddr * )&serverAddr,
|
||||||
sizeof( serverAddr ) ) == UPNP_SOCKETERROR ) {
|
sizeof( serverAddr ) ) == UPNP_SOCKETERROR ) {
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL,
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
MSERV, __FILE__, __LINE__,
|
MSERV, __FILE__, __LINE__,
|
||||||
"Error in binding localhost!!!\n" );
|
"Error in binding localhost!!!\n" );
|
||||||
)
|
|
||||||
shutdown( listenfd, SD_BOTH );
|
shutdown( listenfd, SD_BOTH );
|
||||||
UpnpCloseSocket( listenfd );
|
UpnpCloseSocket( listenfd );
|
||||||
shutdown( miniServerStopSock, SD_BOTH );
|
shutdown( miniServerStopSock, SD_BOTH );
|
||||||
@ -877,10 +844,8 @@ StopMiniServer( void )
|
|||||||
|
|
||||||
sock = socket( AF_INET, SOCK_DGRAM, 0 );
|
sock = socket( AF_INET, SOCK_DGRAM, 0 );
|
||||||
if( sock == UPNP_INVALID_SOCKET ) {
|
if( sock == UPNP_INVALID_SOCKET ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
|
||||||
"SSDP_SERVER:StopSSDPServer: Error in socket operation !!!\n" );
|
"SSDP_SERVER:StopSSDPServer: Error in socket operation !!!\n" );
|
||||||
)
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ str_int_entry Http_Header_Names[NUM_HTTP_HEADER_NAMES] = {
|
|||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
|
||||||
/************* scanner **************/
|
/************* scanner *************/
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
|
||||||
@ -562,7 +562,7 @@ httpmsg_find_hdr_str( IN http_message_t * msg,
|
|||||||
*
|
*
|
||||||
* Description : Finds header from a list, with the given 'name_id'.
|
* Description : Finds header from a list, with the given 'name_id'.
|
||||||
*
|
*
|
||||||
* Return : http_header_t* - Pointer to a header on success; *
|
* Return : http_header_t* - Pointer to a header on success;
|
||||||
* NULL on failure
|
* NULL on failure
|
||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
@ -979,8 +979,8 @@ skip_to_end_of_header( INOUT scanner_t * scanner )
|
|||||||
* Parameters:
|
* Parameters:
|
||||||
* INOUT scanner_t* scanner ; Scanner Object
|
* INOUT scanner_t* scanner ; Scanner Object
|
||||||
* IN char c ; Character to be compared with
|
* IN char c ; Character to be compared with
|
||||||
* IN xboolean case_sensitive; Flag indicating whether comparison should
|
* IN xboolean case_sensitive; Flag indicating whether
|
||||||
* be case sensitive
|
* comparison should be case sensitive
|
||||||
*
|
*
|
||||||
* Description: Compares a character to the next char in the scanner;
|
* Description: Compares a character to the next char in the scanner;
|
||||||
* on error, scanner chars are not restored
|
* on error, scanner chars are not restored
|
||||||
@ -2020,9 +2020,8 @@ parser_parse_chunky_entity( INOUT http_parser_t * parser )
|
|||||||
status = match( scanner, "%x%L%c", &parser->chunk_size, &dummy );
|
status = match( scanner, "%x%L%c", &parser->chunk_size, &dummy );
|
||||||
if( status != PARSE_OK ) {
|
if( status != PARSE_OK ) {
|
||||||
scanner->cursor = save_pos;
|
scanner->cursor = save_pos;
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
"CHUNK COULD NOT BE PARSED\n" );
|
||||||
"CHUNK COULD NOT BE PARSED\n" ); )
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
// remove chunk info just matched; just retain data
|
// remove chunk info just matched; just retain data
|
||||||
@ -2149,9 +2148,8 @@ parser_get_entity_read_method( INOUT http_parser_t * parser )
|
|||||||
if( raw_find_str( &hdr_value, "chunked" ) >= 0 ) {
|
if( raw_find_str( &hdr_value, "chunked" ) >= 0 ) {
|
||||||
// read method to use chunked transfer encoding
|
// read method to use chunked transfer encoding
|
||||||
parser->ent_position = ENTREAD_USING_CHUNKED;
|
parser->ent_position = ENTREAD_USING_CHUNKED;
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
"Found Chunked Encoding ....\n" );
|
||||||
"Found Chunked Encoding ....\n" ); )
|
|
||||||
|
|
||||||
return PARSE_CONTINUE_1;
|
return PARSE_CONTINUE_1;
|
||||||
}
|
}
|
||||||
@ -2470,7 +2468,7 @@ raw_find_str( IN memptr *raw_value,
|
|||||||
* nameConverts a http_method id stored in the HTTP Method
|
* nameConverts a http_method id stored in the HTTP Method
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* const char* ptr - Ptr to the HTTP Method *
|
* const char* ptr - Ptr to the HTTP Method
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
const char *
|
const char *
|
||||||
method_to_str( IN http_method_t method )
|
method_to_str( IN http_method_t method )
|
||||||
@ -2495,40 +2493,38 @@ method_to_str( IN http_method_t method )
|
|||||||
* Returns:
|
* Returns:
|
||||||
* void
|
* void
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
void
|
void
|
||||||
print_http_headers( http_message_t * hmsg )
|
print_http_headers( http_message_t * hmsg )
|
||||||
{
|
{
|
||||||
|
|
||||||
ListNode *node;
|
ListNode *node;
|
||||||
|
|
||||||
// NNS: dlist_node *node;
|
// NNS: dlist_node *node;
|
||||||
http_header_t *header;
|
http_header_t *header;
|
||||||
|
|
||||||
// print start line
|
// print start line
|
||||||
if( hmsg->is_request ) {
|
if( hmsg->is_request ) {
|
||||||
//printf( "method = %d, version = %d.%d, url = %.*s\n",
|
printf( "method = %d, version = %d.%d, url = %.*s\n",
|
||||||
// hmsg->method, hmsg->major_version, hmsg->minor_version,
|
hmsg->method, hmsg->major_version, hmsg->minor_version,
|
||||||
// hmsg->uri.pathquery.size, hmsg->uri.pathquery.buff);
|
hmsg->uri.pathquery.size, hmsg->uri.pathquery.buff);
|
||||||
} else {
|
} else {
|
||||||
// printf( "resp status = %d, version = %d.%d, status msg = %.*s\n",
|
printf( "resp status = %d, version = %d.%d, status msg = %.*s\n",
|
||||||
// hmsg->status_code, hmsg->major_version, hmsg->minor_version,
|
hmsg->status_code, hmsg->major_version, hmsg->minor_version,
|
||||||
// (int)hmsg->status_msg.length, hmsg->status_msg.buf);
|
(int)hmsg->status_msg.length, hmsg->status_msg.buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// print headers
|
// print headers
|
||||||
|
|
||||||
node = ListHead( &hmsg->headers );
|
node = ListHead( &hmsg->headers );
|
||||||
// NNS: node = dlist_first_node( &hmsg->headers );
|
// NNS: node = dlist_first_node( &hmsg->headers );
|
||||||
while( node != NULL ) {
|
while( node != NULL ) {
|
||||||
|
|
||||||
header = ( http_header_t * ) node->item;
|
header = ( http_header_t * ) node->item;
|
||||||
// NNS: header = (http_header_t *)node->data;
|
// NNS: header = (http_header_t *)node->data;
|
||||||
//printf( "hdr name: %.*s, value: %.*s\n",
|
printf( "hdr name: %.*s, value: %.*s\n",
|
||||||
// (int)header->name.length, header->name.buf,
|
(int)header->name.length, header->name.buf,
|
||||||
// (int)header->value.length, header->value.buf );
|
(int)header->value.length, header->value.buf );
|
||||||
|
|
||||||
node = ListNext( &hmsg->headers, node );
|
node = ListNext( &hmsg->headers, node );
|
||||||
|
|
||||||
// NNS: node = dlist_next( &hmsg->headers, node );
|
// NNS: node = dlist_next( &hmsg->headers, node );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -169,10 +169,8 @@ http_Connect( IN uri_type * destination_url,
|
|||||||
if( connect( connfd, ( struct sockaddr * )&url->hostport.IPv4address,
|
if( connect( connfd, ( struct sockaddr * )&url->hostport.IPv4address,
|
||||||
sizeof( struct sockaddr_in ) ) == -1 ) {
|
sizeof( struct sockaddr_in ) ) == -1 ) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
DBGONLY(
|
|
||||||
UpnpPrintf(UPNP_CRITICAL, HTTP, __FILE__, __LINE__,
|
UpnpPrintf(UPNP_CRITICAL, HTTP, __FILE__, __LINE__,
|
||||||
"connect error: %d\n", WSAGetLastError());
|
"connect error: %d\n", WSAGetLastError());
|
||||||
)
|
|
||||||
#endif
|
#endif
|
||||||
shutdown( connfd, SD_BOTH );
|
shutdown( connfd, SD_BOTH );
|
||||||
UpnpCloseSocket( connfd );
|
UpnpCloseSocket( connfd );
|
||||||
@ -226,12 +224,10 @@ http_RecvMessage( IN SOCKINFO * info,
|
|||||||
status = parser_append( parser, buf, num_read );
|
status = parser_append( parser, buf, num_read );
|
||||||
|
|
||||||
if( status == PARSE_SUCCESS ) {
|
if( status == PARSE_SUCCESS ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
||||||
parser->msg.msg.buf );
|
parser->msg.msg.buf );
|
||||||
//print_http_headers( &parser->msg );
|
print_http_headers( &parser->msg );
|
||||||
)
|
|
||||||
|
|
||||||
if( parser->content_length >
|
if( parser->content_length >
|
||||||
( unsigned int )g_maxContentLength ) {
|
( unsigned int )g_maxContentLength ) {
|
||||||
@ -252,12 +248,10 @@ http_RecvMessage( IN SOCKINFO * info,
|
|||||||
}
|
}
|
||||||
} else if( num_read == 0 ) {
|
} else if( num_read == 0 ) {
|
||||||
if( ok_on_close ) {
|
if( ok_on_close ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
||||||
parser->msg.msg.buf );
|
parser->msg.msg.buf );
|
||||||
//print_http_headers( &parser->msg );
|
print_http_headers( &parser->msg );
|
||||||
)
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
@ -455,11 +449,9 @@ http_SendMessage( IN SOCKINFO * info,
|
|||||||
num_written = sock_write( info, file_buf, num_read,
|
num_written = sock_write( info, file_buf, num_read,
|
||||||
TimeOut );
|
TimeOut );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
">>> (SENT) >>>\n%.*s\n------------\n",
|
">>> (SENT) >>>\n%.*s\n------------\n",
|
||||||
( int )num_written, file_buf );
|
( int )num_written, file_buf );
|
||||||
)
|
|
||||||
|
|
||||||
//Send error nothing we can do
|
//Send error nothing we can do
|
||||||
if( num_written != num_read ) {
|
if( num_written != num_read ) {
|
||||||
@ -485,10 +477,9 @@ http_SendMessage( IN SOCKINFO * info,
|
|||||||
num_written = sock_write( info, buf, buf_length, TimeOut );
|
num_written = sock_write( info, buf, buf_length, TimeOut );
|
||||||
if( ( size_t ) num_written != buf_length )
|
if( ( size_t ) num_written != buf_length )
|
||||||
goto end;
|
goto end;
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
">>> (SENT) >>>\n%.*s\n------------\n",
|
">>> (SENT) >>>\n%.*s\n------------\n",
|
||||||
( int )buf_length, buf );
|
( int )buf_length, buf );
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -589,7 +580,6 @@ http_RequestAndResponse( IN uri_type * destination,
|
|||||||
* UPNP_E_SUCCESS;
|
* UPNP_E_SUCCESS;
|
||||||
* UPNP_E_INVALID_URL;
|
* UPNP_E_INVALID_URL;
|
||||||
*
|
*
|
||||||
*
|
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
int
|
int
|
||||||
@ -601,10 +591,10 @@ http_Download( IN const char *url_str,
|
|||||||
{
|
{
|
||||||
int ret_code;
|
int ret_code;
|
||||||
uri_type url;
|
uri_type url;
|
||||||
char *msg_start,
|
char *msg_start;
|
||||||
*entity_start,
|
char *entity_start;
|
||||||
*hoststr,
|
char *hoststr;
|
||||||
*temp;
|
char *temp;
|
||||||
http_parser_t response;
|
http_parser_t response;
|
||||||
size_t msg_length;
|
size_t msg_length;
|
||||||
size_t hostlen;
|
size_t hostlen;
|
||||||
@ -614,10 +604,8 @@ http_Download( IN const char *url_str,
|
|||||||
char *urlPath = alloca( strlen( url_str ) + 1 );
|
char *urlPath = alloca( strlen( url_str ) + 1 );
|
||||||
|
|
||||||
//ret_code = parse_uri( (char*)url_str, strlen(url_str), &url );
|
//ret_code = parse_uri( (char*)url_str, strlen(url_str), &url );
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, "DOWNLOAD URL : %s\n",
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__, "DOWNLOAD URL : %s\n",
|
|
||||||
url_str );
|
url_str );
|
||||||
)
|
|
||||||
ret_code =
|
ret_code =
|
||||||
http_FixStrUrl( ( char * )url_str, strlen( url_str ), &url );
|
http_FixStrUrl( ( char * )url_str, strlen( url_str ), &url );
|
||||||
if( ret_code != UPNP_E_SUCCESS ) {
|
if( ret_code != UPNP_E_SUCCESS ) {
|
||||||
@ -641,10 +629,8 @@ http_Download( IN const char *url_str,
|
|||||||
*temp = '\0';
|
*temp = '\0';
|
||||||
hostlen = strlen( hoststr );
|
hostlen = strlen( hoststr );
|
||||||
*temp = '/';
|
*temp = '/';
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
"HOSTNAME : %s Length : %"PRIzu"\n", hoststr, hostlen );
|
"HOSTNAME : %s Length : %"PRIzu"\n", hoststr, hostlen );
|
||||||
)
|
|
||||||
|
|
||||||
ret_code = http_MakeMessage(
|
ret_code = http_MakeMessage(
|
||||||
&request, 1, 1,
|
&request, 1, 1,
|
||||||
@ -653,18 +639,14 @@ http_Download( IN const char *url_str,
|
|||||||
"HOST: ",
|
"HOST: ",
|
||||||
hoststr, hostlen );
|
hoststr, hostlen );
|
||||||
if( ret_code != 0 ) {
|
if( ret_code != 0 ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
"HTTP Makemessage failed\n" );
|
"HTTP Makemessage failed\n" );
|
||||||
)
|
|
||||||
membuffer_destroy( &request );
|
membuffer_destroy( &request );
|
||||||
return ret_code;
|
return ret_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
"HTTP Buffer:\n %s\n----------END--------\n", request.buf );
|
"HTTP Buffer:\n %s\n----------END--------\n", request.buf );
|
||||||
)
|
|
||||||
// get doc msg
|
// get doc msg
|
||||||
ret_code =
|
ret_code =
|
||||||
http_RequestAndResponse( &url, request.buf, request.length,
|
http_RequestAndResponse( &url, request.buf, request.length,
|
||||||
@ -676,11 +658,8 @@ http_Download( IN const char *url_str,
|
|||||||
return ret_code;
|
return ret_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, "Response\n" );
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__, "Response\n" );
|
print_http_headers( &response.msg );
|
||||||
)
|
|
||||||
DBGONLY( print_http_headers( &response.msg );
|
|
||||||
)
|
|
||||||
|
|
||||||
// optional content-type
|
// optional content-type
|
||||||
if( content_type ) {
|
if( content_type ) {
|
||||||
@ -771,13 +750,10 @@ MakePostMessage( const char *url_str,
|
|||||||
char *hoststr,
|
char *hoststr,
|
||||||
*temp;
|
*temp;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"DOWNLOAD URL : %s\n", url_str );
|
"DOWNLOAD URL : %s\n", url_str );
|
||||||
)
|
|
||||||
|
|
||||||
ret_code =
|
ret_code =
|
||||||
http_FixStrUrl( ( char * )url_str, strlen( url_str ), url );
|
http_FixStrUrl( ( char * )url_str, strlen( url_str ), url );
|
||||||
|
|
||||||
if( ret_code != UPNP_E_SUCCESS ) {
|
if( ret_code != UPNP_E_SUCCESS ) {
|
||||||
return ret_code;
|
return ret_code;
|
||||||
}
|
}
|
||||||
@ -799,9 +775,8 @@ MakePostMessage( const char *url_str,
|
|||||||
*temp = '\0';
|
*temp = '\0';
|
||||||
hostlen = strlen( hoststr );
|
hostlen = strlen( hoststr );
|
||||||
*temp = '/';
|
*temp = '/';
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HOSTNAME : %s Length : %"PRIzu"\n", hoststr, hostlen );
|
"HOSTNAME : %s Length : %"PRIzu"\n", hoststr, hostlen );
|
||||||
)
|
|
||||||
|
|
||||||
if( contentLength >= 0 ) {
|
if( contentLength >= 0 ) {
|
||||||
ret_code = http_MakeMessage(
|
ret_code = http_MakeMessage(
|
||||||
@ -833,17 +808,16 @@ MakePostMessage( const char *url_str,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( ret_code != 0 ) {
|
if( ret_code != 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HTTP Makemessage failed\n" );
|
"HTTP Makemessage failed\n" );
|
||||||
)
|
|
||||||
membuffer_destroy( request );
|
membuffer_destroy( request );
|
||||||
|
|
||||||
return ret_code;
|
return ret_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HTTP Buffer:\n %s\n" "----------END--------\n",
|
"HTTP Buffer:\n %s\n" "----------END--------\n",
|
||||||
request->buf );
|
request->buf );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1108,9 +1082,8 @@ MakeGetMessage( const char *url_str,
|
|||||||
char *hoststr,
|
char *hoststr,
|
||||||
*temp;
|
*temp;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"DOWNLOAD URL : %s\n", url_str );
|
"DOWNLOAD URL : %s\n", url_str );
|
||||||
)
|
|
||||||
|
|
||||||
ret_code =
|
ret_code =
|
||||||
http_FixStrUrl( ( char * )url_str, strlen( url_str ), url );
|
http_FixStrUrl( ( char * )url_str, strlen( url_str ), url );
|
||||||
@ -1136,9 +1109,8 @@ MakeGetMessage( const char *url_str,
|
|||||||
*temp = '\0';
|
*temp = '\0';
|
||||||
hostlen = strlen( hoststr );
|
hostlen = strlen( hoststr );
|
||||||
*temp = '/';
|
*temp = '/';
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HOSTNAME : %s Length : %"PRIzu"\n", hoststr, hostlen );
|
"HOSTNAME : %s Length : %"PRIzu"\n", hoststr, hostlen );
|
||||||
)
|
|
||||||
|
|
||||||
if( proxy_str ) {
|
if( proxy_str ) {
|
||||||
querystr = url_str;
|
querystr = url_str;
|
||||||
@ -1156,17 +1128,16 @@ MakeGetMessage( const char *url_str,
|
|||||||
hoststr, hostlen );
|
hoststr, hostlen );
|
||||||
|
|
||||||
if( ret_code != 0 ) {
|
if( ret_code != 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HTTP Makemessage failed\n" );
|
"HTTP Makemessage failed\n" );
|
||||||
)
|
|
||||||
membuffer_destroy( request );
|
membuffer_destroy( request );
|
||||||
|
|
||||||
return ret_code;
|
return ret_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HTTP Buffer:\n %s\n" "----------END--------\n",
|
"HTTP Buffer:\n %s\n" "----------END--------\n",
|
||||||
request->buf );
|
request->buf );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1386,11 +1357,9 @@ http_ReadHttpGet( IN void *Handle,
|
|||||||
}
|
}
|
||||||
} else if( num_read == 0 ) {
|
} else if( num_read == 0 ) {
|
||||||
if( ok_on_close ) {
|
if( ok_on_close ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
||||||
handle->response.msg.msg.buf );
|
handle->response.msg.msg.buf );
|
||||||
//print_http_headers( &parser->msg );
|
|
||||||
)
|
|
||||||
handle->response.position = POS_COMPLETE;
|
handle->response.position = POS_COMPLETE;
|
||||||
} else {
|
} else {
|
||||||
// partial msg
|
// partial msg
|
||||||
@ -1850,31 +1819,26 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
va_start( argp, fmt );
|
va_start( argp, fmt );
|
||||||
|
|
||||||
while( ( c = *fmt++ ) != 0 ) {
|
while( ( c = *fmt++ ) != 0 ) {
|
||||||
|
if( c == 's' ) {
|
||||||
if( c == 's' ) // C string
|
// C string
|
||||||
{
|
|
||||||
s = ( char * )va_arg( argp, char * );
|
s = ( char * )va_arg( argp, char * );
|
||||||
|
|
||||||
assert( s );
|
assert( s );
|
||||||
|
UpnpPrintf(UPNP_ALL,HTTP,__FILE__,__LINE__,"Adding a string : %s\n", s);
|
||||||
//DBGONLY(UpnpPrintf(UPNP_ALL,HTTP,__FILE__,__LINE__,"Adding a string : %s\n", s);)
|
|
||||||
if( membuffer_append( buf, s, strlen( s ) ) != 0 ) {
|
if( membuffer_append( buf, s, strlen( s ) ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
} else if( c == 'K' ) // Add Chunky header
|
} else if( c == 'K' ) {
|
||||||
{
|
// Add Chunky header
|
||||||
if( membuffer_append
|
if( membuffer_append
|
||||||
( buf, "TRANSFER-ENCODING: chunked\r\n",
|
( buf, "TRANSFER-ENCODING: chunked\r\n",
|
||||||
strlen( "Transfer-Encoding: chunked\r\n" ) ) != 0 ) {
|
strlen( "Transfer-Encoding: chunked\r\n" ) ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
} else if( c == 'G' ) // Add Range header
|
} else if( c == 'G' ) {
|
||||||
{
|
// Add Range header
|
||||||
struct SendInstruction *RespInstr;
|
struct SendInstruction *RespInstr;
|
||||||
RespInstr =
|
RespInstr = (struct SendInstruction *)
|
||||||
( struct SendInstruction * )va_arg( argp,
|
va_arg( argp, struct SendInstruction *);
|
||||||
struct SendInstruction
|
|
||||||
* );
|
|
||||||
assert( RespInstr );
|
assert( RespInstr );
|
||||||
// connection header
|
// connection header
|
||||||
if( membuffer_append
|
if( membuffer_append
|
||||||
@ -1882,38 +1846,34 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
strlen( RespInstr->RangeHeader ) ) != 0 ) {
|
strlen( RespInstr->RangeHeader ) ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
|
} else if( c == 'b' ) {
|
||||||
} else if( c == 'b' ) // mem buffer
|
// mem buffer
|
||||||
{
|
|
||||||
s = ( char * )va_arg( argp, char * );
|
s = ( char * )va_arg( argp, char * );
|
||||||
|
|
||||||
//DBGONLY(UpnpPrintf(UPNP_ALL,HTTP,__FILE__,__LINE__,"Adding a char Buffer starting with: %c\n", s[0]);)
|
UpnpPrintf(UPNP_ALL,HTTP,__FILE__,__LINE__,
|
||||||
|
"Adding a char Buffer starting with: %c\n", s[0]);
|
||||||
assert( s );
|
assert( s );
|
||||||
length = ( size_t ) va_arg( argp, size_t );
|
length = ( size_t ) va_arg( argp, size_t );
|
||||||
if( membuffer_append( buf, s, length ) != 0 ) {
|
if( membuffer_append( buf, s, length ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( c == 'c' ) {
|
||||||
else if( c == 'c' ) // crlf
|
// crlf
|
||||||
{
|
|
||||||
if( membuffer_append( buf, "\r\n", 2 ) != 0 ) {
|
if( membuffer_append( buf, "\r\n", 2 ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( c == 'd' ) {
|
||||||
else if( c == 'd' ) // integer
|
// integer
|
||||||
{
|
|
||||||
num = ( int )va_arg( argp, int );
|
num = ( int )va_arg( argp, int );
|
||||||
|
|
||||||
sprintf( tempbuf, "%"PRIzu, num );
|
sprintf( tempbuf, "%"PRIzu, num );
|
||||||
if( membuffer_append( buf, tempbuf, strlen( tempbuf ) ) != 0 ) {
|
if( membuffer_append( buf, tempbuf, strlen( tempbuf ) ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( c == 'h' ) {
|
||||||
else if( c == 'h' ) // off_t
|
// off_t
|
||||||
{
|
|
||||||
bignum = ( off_t )va_arg( argp, off_t );
|
bignum = ( off_t )va_arg( argp, off_t );
|
||||||
|
|
||||||
sprintf( tempbuf, "%"PRId64, (int64_t)bignum );
|
sprintf( tempbuf, "%"PRId64, (int64_t)bignum );
|
||||||
@ -1921,9 +1881,8 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( c == 't' || c == 'D' ) {
|
||||||
else if( c == 't' || c == 'D' ) // date
|
// date
|
||||||
{
|
|
||||||
if( c == 'D' ) {
|
if( c == 'D' ) {
|
||||||
// header
|
// header
|
||||||
start_str = "DATE: ";
|
start_str = "DATE: ";
|
||||||
@ -1947,9 +1906,7 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
if( membuffer_append( buf, tempbuf, strlen( tempbuf ) ) != 0 ) {
|
if( membuffer_append( buf, tempbuf, strlen( tempbuf ) ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'C' ) {
|
||||||
|
|
||||||
else if( c == 'C' ) {
|
|
||||||
if( ( http_major_version > 1 ) ||
|
if( ( http_major_version > 1 ) ||
|
||||||
( http_major_version == 1 && http_minor_version == 1 )
|
( http_major_version == 1 && http_minor_version == 1 )
|
||||||
) {
|
) {
|
||||||
@ -1959,9 +1916,7 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'N' ) {
|
||||||
|
|
||||||
else if( c == 'N' ) {
|
|
||||||
// content-length header
|
// content-length header
|
||||||
bignum = ( off_t )va_arg( argp, off_t );
|
bignum = ( off_t )va_arg( argp, off_t );
|
||||||
|
|
||||||
@ -1972,11 +1927,8 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
"CONTENT-LENGTH: ", bignum ) != 0 ) {
|
"CONTENT-LENGTH: ", bignum ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'S' || c == 'U' ) {
|
||||||
|
|
||||||
else if( c == 'S' || c == 'U' ) {
|
|
||||||
// SERVER or USER-AGENT header
|
// SERVER or USER-AGENT header
|
||||||
|
|
||||||
temp_str = ( c == 'S' ) ? "SERVER: " : "USER-AGENT: ";
|
temp_str = ( c == 'S' ) ? "SERVER: " : "USER-AGENT: ";
|
||||||
get_sdk_info( tempbuf );
|
get_sdk_info( tempbuf );
|
||||||
if (http_MakeMessage(
|
if (http_MakeMessage(
|
||||||
@ -1985,34 +1937,25 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
temp_str, tempbuf ) != 0 ) {
|
temp_str, tempbuf ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'X' ) {
|
||||||
|
// C string
|
||||||
else if( c == 'X' ) // C string
|
|
||||||
{
|
|
||||||
s = ( char * )va_arg( argp, char * );
|
s = ( char * )va_arg( argp, char * );
|
||||||
|
|
||||||
assert( s );
|
assert( s );
|
||||||
|
|
||||||
if( membuffer_append_str( buf, "X-User-Agent: ") != 0 ) {
|
if( membuffer_append_str( buf, "X-User-Agent: ") != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
if( membuffer_append( buf, s, strlen( s ) ) != 0 ) {
|
if( membuffer_append( buf, s, strlen( s ) ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'R' ) {
|
||||||
|
|
||||||
else if( c == 'R' ) {
|
|
||||||
// response start line
|
// response start line
|
||||||
// e.g.: 'HTTP/1.1 200 OK'
|
// e.g.: 'HTTP/1.1 200 OK'
|
||||||
//
|
//
|
||||||
|
|
||||||
// code
|
// code
|
||||||
status_code = ( int )va_arg( argp, int );
|
status_code = ( int )va_arg( argp, int );
|
||||||
|
|
||||||
assert( status_code > 0 );
|
assert( status_code > 0 );
|
||||||
sprintf( tempbuf, "HTTP/%d.%d %d ",
|
sprintf( tempbuf, "HTTP/%d.%d %d ",
|
||||||
http_major_version, http_minor_version, status_code );
|
http_major_version, http_minor_version, status_code );
|
||||||
|
|
||||||
// str
|
// str
|
||||||
status_msg = http_get_code_text( status_code );
|
status_msg = http_get_code_text( status_code );
|
||||||
if (http_MakeMessage(
|
if (http_MakeMessage(
|
||||||
@ -2022,40 +1965,31 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
status_msg ) != 0 ) {
|
status_msg ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'B' ) {
|
||||||
|
|
||||||
else if( c == 'B' ) {
|
|
||||||
// body of a simple reply
|
// body of a simple reply
|
||||||
//
|
//
|
||||||
|
|
||||||
status_code = ( int )va_arg( argp, int );
|
status_code = ( int )va_arg( argp, int );
|
||||||
|
|
||||||
sprintf( tempbuf, "%s%d %s%s",
|
sprintf( tempbuf, "%s%d %s%s",
|
||||||
"<html><body><h1>",
|
"<html><body><h1>",
|
||||||
status_code, http_get_code_text( status_code ),
|
status_code, http_get_code_text( status_code ),
|
||||||
"</h1></body></html>" );
|
"</h1></body></html>" );
|
||||||
bignum = strlen( tempbuf );
|
bignum = strlen( tempbuf );
|
||||||
|
|
||||||
if (http_MakeMessage(
|
if (http_MakeMessage(
|
||||||
buf, http_major_version, http_minor_version,
|
buf, http_major_version, http_minor_version,
|
||||||
"NTcs",
|
"NTcs",
|
||||||
bignum, // content-length
|
bignum, // content-length
|
||||||
"text/html", // content-type
|
"text/html", // content-type
|
||||||
tempbuf ) != 0 ) // body
|
tempbuf ) != 0 // body
|
||||||
{
|
) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'Q' ) {
|
||||||
|
|
||||||
else if( c == 'Q' ) {
|
|
||||||
// request start line
|
// request start line
|
||||||
// GET /foo/bar.html HTTP/1.1\r\n
|
// GET /foo/bar.html HTTP/1.1\r\n
|
||||||
|
|
||||||
method = ( http_method_t ) va_arg( argp, http_method_t );
|
method = ( http_method_t ) va_arg( argp, http_method_t );
|
||||||
method_str = method_to_str( method );
|
method_str = method_to_str( method );
|
||||||
url_str = ( const char * )va_arg( argp, const char * );
|
url_str = ( const char * )va_arg( argp, const char * );
|
||||||
num = ( size_t )va_arg( argp, size_t ); // length of url_str
|
num = ( size_t )va_arg( argp, size_t ); // length of url_str
|
||||||
|
|
||||||
if (http_MakeMessage(
|
if (http_MakeMessage(
|
||||||
buf, http_major_version, http_minor_version,
|
buf, http_major_version, http_minor_version,
|
||||||
"ssbsdsdc",
|
"ssbsdsdc",
|
||||||
@ -2064,20 +1998,15 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
" HTTP/", http_major_version, ".", http_minor_version ) != 0 ) {
|
" HTTP/", http_major_version, ".", http_minor_version ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'q' ) {
|
||||||
|
|
||||||
else if( c == 'q' ) {
|
|
||||||
// request start line and HOST header
|
// request start line and HOST header
|
||||||
|
|
||||||
method = ( http_method_t ) va_arg( argp, http_method_t );
|
method = ( http_method_t ) va_arg( argp, http_method_t );
|
||||||
|
|
||||||
uri_ptr = ( uri_type * ) va_arg( argp, uri_type * );
|
uri_ptr = ( uri_type * ) va_arg( argp, uri_type * );
|
||||||
assert( uri_ptr );
|
assert( uri_ptr );
|
||||||
if( http_FixUrl( uri_ptr, &url ) != 0 ) {
|
if( http_FixUrl( uri_ptr, &url ) != 0 ) {
|
||||||
error_code = UPNP_E_INVALID_URL;
|
error_code = UPNP_E_INVALID_URL;
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (http_MakeMessage(
|
if (http_MakeMessage(
|
||||||
buf, http_major_version, http_minor_version,
|
buf, http_major_version, http_minor_version,
|
||||||
"Q" "sbc",
|
"Q" "sbc",
|
||||||
@ -2085,21 +2014,16 @@ http_MakeMessage( INOUT membuffer * buf,
|
|||||||
"HOST: ", url.hostport.text.buff, url.hostport.text.size ) != 0 ) {
|
"HOST: ", url.hostport.text.buff, url.hostport.text.size ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else if( c == 'T' ) {
|
||||||
|
|
||||||
else if( c == 'T' ) {
|
|
||||||
// content type header
|
// content type header
|
||||||
temp_str = ( const char * )va_arg( argp, const char * ); // type/subtype format
|
temp_str = ( const char * )va_arg( argp, const char * ); // type/subtype format
|
||||||
|
|
||||||
if (http_MakeMessage(
|
if (http_MakeMessage(
|
||||||
buf, http_major_version, http_minor_version,
|
buf, http_major_version, http_minor_version,
|
||||||
"ssc",
|
"ssc",
|
||||||
"CONTENT-TYPE: ", temp_str ) != 0 ) {
|
"CONTENT-TYPE: ", temp_str ) != 0 ) {
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else {
|
|
||||||
assert( 0 );
|
assert( 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2174,18 +2098,15 @@ MakeGetMessageEx( const char *url_str,
|
|||||||
*temp;
|
*temp;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"DOWNLOAD URL : %s\n", url_str );
|
"DOWNLOAD URL : %s\n", url_str );
|
||||||
)
|
|
||||||
|
|
||||||
if( ( errCode = http_FixStrUrl( ( char * )url_str,
|
if( ( errCode = http_FixStrUrl( ( char * )url_str,
|
||||||
strlen( url_str ),
|
strlen( url_str ), url ) ) != UPNP_E_SUCCESS ) {
|
||||||
url ) ) != UPNP_E_SUCCESS ) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// make msg
|
// make msg
|
||||||
membuffer_init( request );
|
membuffer_init( request );
|
||||||
|
|
||||||
urlPath = alloca( strlen( url_str ) + 1 );
|
urlPath = alloca( strlen( url_str ) + 1 );
|
||||||
if( !urlPath ) {
|
if( !urlPath ) {
|
||||||
errCode = UPNP_E_OUTOF_MEMORY;
|
errCode = UPNP_E_OUTOF_MEMORY;
|
||||||
@ -2193,9 +2114,7 @@ MakeGetMessageEx( const char *url_str,
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset( urlPath, 0, strlen( url_str ) + 1 );
|
memset( urlPath, 0, strlen( url_str ) + 1 );
|
||||||
|
|
||||||
strcpy( urlPath, url_str );
|
strcpy( urlPath, url_str );
|
||||||
|
|
||||||
hoststr = strstr( urlPath, "//" );
|
hoststr = strstr( urlPath, "//" );
|
||||||
if( hoststr == NULL ) {
|
if( hoststr == NULL ) {
|
||||||
errCode = UPNP_E_INVALID_URL;
|
errCode = UPNP_E_INVALID_URL;
|
||||||
@ -2212,11 +2131,9 @@ MakeGetMessageEx( const char *url_str,
|
|||||||
*temp = '\0';
|
*temp = '\0';
|
||||||
hostlen = strlen( hoststr );
|
hostlen = strlen( hoststr );
|
||||||
*temp = '/';
|
*temp = '/';
|
||||||
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
"HOSTNAME : %s Length : %"PRIzu"\n",
|
"HOSTNAME : %s Length : %"PRIzu"\n",
|
||||||
hoststr, hostlen );
|
hoststr, hostlen );
|
||||||
)
|
|
||||||
|
|
||||||
errCode = http_MakeMessage(
|
errCode = http_MakeMessage(
|
||||||
request, 1, 1,
|
request, 1, 1,
|
||||||
@ -2227,18 +2144,17 @@ MakeGetMessageEx( const char *url_str,
|
|||||||
pRangeSpecifier );
|
pRangeSpecifier );
|
||||||
|
|
||||||
if( errCode != 0 ) {
|
if( errCode != 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HTTP Makemessage failed\n" );
|
"HTTP Makemessage failed\n" );
|
||||||
)
|
|
||||||
membuffer_destroy( request );
|
membuffer_destroy( request );
|
||||||
|
|
||||||
return errCode;
|
return errCode;
|
||||||
}
|
}
|
||||||
} while( 0 );
|
} while( 0 );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"HTTP Buffer:\n %s\n" "----------END--------\n",
|
"HTTP Buffer:\n %s\n" "----------END--------\n",
|
||||||
request->buf );
|
request->buf );
|
||||||
)
|
|
||||||
|
|
||||||
return errCode;
|
return errCode;
|
||||||
}
|
}
|
||||||
|
@ -637,11 +637,11 @@ get_file_info( IN const char *filename,
|
|||||||
|
|
||||||
rc = get_content_type( filename, &info->content_type );
|
rc = get_content_type( filename, &info->content_type );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"file info: %s, length: %lld, last_mod=%s readable=%d\n",
|
"file info: %s, length: %lld, last_mod=%s readable=%d\n",
|
||||||
filename, (long long)info->file_length,
|
filename, (long long)info->file_length,
|
||||||
asctime( gmtime( &info->last_modified ) ),
|
asctime( gmtime( &info->last_modified ) ),
|
||||||
info->is_readable ); )
|
info->is_readable );
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -1586,13 +1586,10 @@ http_RecvPostMessage( http_parser_t * parser,
|
|||||||
}
|
}
|
||||||
} else if( num_read == 0 ) {
|
} else if( num_read == 0 ) {
|
||||||
if( ok_on_close ) {
|
if( ok_on_close ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
|
||||||
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
"<<< (RECVD) <<<\n%s\n-----------------\n",
|
||||||
parser->msg.msg.buf );
|
parser->msg.msg.buf );
|
||||||
//print_http_headers( &parser->msg );
|
print_http_headers( &parser->msg );
|
||||||
)
|
|
||||||
|
|
||||||
parser->position = POS_COMPLETE;
|
parser->position = POS_COMPLETE;
|
||||||
} else {
|
} else {
|
||||||
// partial msg
|
// partial msg
|
||||||
@ -1760,9 +1757,8 @@ web_server_callback( IN http_parser_t * parser,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||||
"webserver: request processed...\n" );
|
"webserver: request processed...\n" );
|
||||||
)
|
|
||||||
|
|
||||||
membuffer_destroy( &headers );
|
membuffer_destroy( &headers );
|
||||||
membuffer_destroy( &filename );
|
membuffer_destroy( &filename );
|
||||||
|
@ -367,16 +367,20 @@ free_URL_list( URL_list * list )
|
|||||||
* uri_type *in ; URI object
|
* uri_type *in ; URI object
|
||||||
*
|
*
|
||||||
* Description : Function useful in debugging for printing a parsed uri.
|
* Description : Function useful in debugging for printing a parsed uri.
|
||||||
* Compiled out with DBGONLY macro.
|
|
||||||
*
|
*
|
||||||
* Return : void ;
|
* Return : void ;
|
||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY( void print_uri( uri_type * in ) {
|
#ifdef DEBUG
|
||||||
|
void print_uri( uri_type *in )
|
||||||
|
{
|
||||||
print_token( &in->scheme );
|
print_token( &in->scheme );
|
||||||
print_token( &in->hostport.text );
|
print_token( &in->hostport.text );
|
||||||
print_token( &in->pathquery ); print_token( &in->fragment );} )
|
print_token( &in->pathquery );
|
||||||
|
print_token( &in->fragment );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : print_token
|
* Function : print_token
|
||||||
@ -385,20 +389,23 @@ DBGONLY( void print_uri( uri_type * in ) {
|
|||||||
* token * in ; token
|
* token * in ; token
|
||||||
*
|
*
|
||||||
* Description : Function useful in debugging for printing a token.
|
* Description : Function useful in debugging for printing a token.
|
||||||
* Compiled out with DBGONLY macro.
|
|
||||||
*
|
*
|
||||||
* Return : void ;
|
* Return : void ;
|
||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY( void print_token( token * in ) {
|
#ifdef DEBUG
|
||||||
|
void print_token(token * in)
|
||||||
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
printf( "Token Size : %"PRIzu"\n\'", in->size );
|
printf( "Token Size : %"PRIzu"\n\'", in->size );
|
||||||
for( i = 0; i < in->size; i++ ) {
|
for( i = 0; i < in->size; i++ ) {
|
||||||
putchar( in->buff[i] );}
|
putchar( in->buff[i] );
|
||||||
putchar( '\'' ); putchar( '\n' );}
|
}
|
||||||
|
putchar( '\'' );
|
||||||
)
|
putchar( '\n' );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : token_string_casecmp
|
* Function : token_string_casecmp
|
||||||
@ -417,8 +424,10 @@ DBGONLY( void print_token( token * in ) {
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
int token_string_casecmp( token * in1,
|
int token_string_casecmp(
|
||||||
char *in2 ) {
|
token * in1,
|
||||||
|
char *in2 )
|
||||||
|
{
|
||||||
int in2_length = strlen( in2 );
|
int in2_length = strlen( in2 );
|
||||||
|
|
||||||
if( in1->size != in2_length )
|
if( in1->size != in2_length )
|
||||||
@ -790,9 +799,8 @@ remove_dots( char *in,
|
|||||||
return UPNP_E_OUTOF_MEMORY;
|
return UPNP_E_OUTOF_MEMORY;
|
||||||
|
|
||||||
Segments[0] = NULL;
|
Segments[0] = NULL;
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
( UPNP_ALL, API, __FILE__, __LINE__,
|
"REMOVE_DOTS: before: %s\n", in );
|
||||||
"REMOVE_DOTS: before: %s\n", in ) );
|
|
||||||
while( ( copyFrom < max ) && ( *copyFrom != '?' )
|
while( ( copyFrom < max ) && ( *copyFrom != '?' )
|
||||||
&& ( *copyFrom != '#' ) ) {
|
&& ( *copyFrom != '#' ) ) {
|
||||||
|
|
||||||
@ -837,9 +845,8 @@ remove_dots( char *in,
|
|||||||
}
|
}
|
||||||
( *copyTo ) = 0;
|
( *copyTo ) = 0;
|
||||||
free( Segments );
|
free( Segments );
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
( UPNP_ALL, API, __FILE__, __LINE__,
|
"REMOVE_DOTS: after: %s\n", in );
|
||||||
"REMOVE_DOTS: after: %s\n", in ) );
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,31 +443,47 @@ FindServiceControlURLPath( service_table * table,
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY( void printService( service_info * service, Dbg_Level level,
|
#ifdef DEBUG
|
||||||
Dbg_Module module ) {
|
void printService(
|
||||||
|
service_info *service,
|
||||||
|
Dbg_Level level,
|
||||||
|
Dbg_Module module )
|
||||||
|
{
|
||||||
if( service ) {
|
if( service ) {
|
||||||
if( service->serviceType )
|
if( service->serviceType ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"serviceType: %s\n", service->serviceType );
|
"serviceType: %s\n", service->serviceType );
|
||||||
if( service->serviceId )
|
}
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__, "serviceId: %s\n",
|
if( service->serviceId ) {
|
||||||
service->serviceId ); if( service->SCPDURL )
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__, "SCPDURL: %s\n",
|
"serviceId: %s\n", service->serviceId );
|
||||||
service->SCPDURL ); if( service->controlURL )
|
}
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__, "controlURL: %s\n",
|
if( service->SCPDURL ) {
|
||||||
service->controlURL ); if( service->eventURL )
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__, "eventURL: %s\n",
|
"SCPDURL: %s\n", service->SCPDURL );
|
||||||
service->eventURL ); if( service->UDN )
|
}
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__, "UDN: %s\n\n",
|
if( service->controlURL ) {
|
||||||
service->UDN ); if( service->active )
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
|
"controlURL: %s\n", service->controlURL );
|
||||||
|
}
|
||||||
|
if( service->eventURL ) {
|
||||||
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
|
"eventURL: %s\n", service->eventURL );
|
||||||
|
}
|
||||||
|
if( service->UDN ) {
|
||||||
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
|
"UDN: %s\n\n", service->UDN );
|
||||||
|
}
|
||||||
|
if( service->active ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"Service is active\n" );
|
"Service is active\n" );
|
||||||
else
|
} else {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"Service is inactive\n" );}
|
"Service is inactive\n" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
)
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : printServiceList
|
* Function : printServiceList
|
||||||
@ -484,36 +500,48 @@ DBGONLY( void printService( service_info * service, Dbg_Level level,
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY( void printServiceList( service_info * service,
|
#ifdef DEBUG
|
||||||
|
void printServiceList(
|
||||||
|
service_info * service,
|
||||||
Dbg_Level level,
|
Dbg_Level level,
|
||||||
Dbg_Module module ) {
|
Dbg_Module module )
|
||||||
|
{
|
||||||
while( service ) {
|
while( service ) {
|
||||||
if( service->serviceType )
|
if( service->serviceType ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"serviceType: %s\n", service->serviceType );
|
"serviceType: %s\n", service->serviceType );
|
||||||
if( service->serviceId )
|
}
|
||||||
|
if( service->serviceId ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"serviceId: %s\n", service->serviceId );
|
"serviceId: %s\n", service->serviceId );
|
||||||
if( service->SCPDURL )
|
}
|
||||||
|
if( service->SCPDURL ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"SCPDURL: %s\n", service->SCPDURL );
|
"SCPDURL: %s\n", service->SCPDURL );
|
||||||
if( service->controlURL )
|
}
|
||||||
|
if( service->controlURL ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"controlURL: %s\n", service->controlURL );
|
"controlURL: %s\n", service->controlURL );
|
||||||
if( service->eventURL )
|
}
|
||||||
|
if( service->eventURL ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"eventURL: %s\n", service->eventURL );
|
"eventURL: %s\n", service->eventURL );
|
||||||
if( service->UDN )
|
}
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__, "UDN: %s\n\n",
|
if( service->UDN ) {
|
||||||
service->UDN ); if( service->active )
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
|
"UDN: %s\n\n", service->UDN );
|
||||||
|
}
|
||||||
|
if( service->active ) {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"Service is active\n" );
|
"Service is active\n" );
|
||||||
else
|
} else {
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"Service is inactive\n" );
|
"Service is inactive\n" );
|
||||||
service = service->next;}
|
|
||||||
}
|
}
|
||||||
)
|
service = service->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : printServiceTable
|
* Function : printServiceTable
|
||||||
@ -531,15 +559,18 @@ DBGONLY( void printService( service_info * service, Dbg_Level level,
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY( void printServiceTable( service_table * table,
|
#ifdef DEBUG
|
||||||
|
void printServiceTable(
|
||||||
|
service_table * table,
|
||||||
Dbg_Level level,
|
Dbg_Level level,
|
||||||
Dbg_Module module ) {
|
Dbg_Module module )
|
||||||
|
{
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"URL_BASE: %s\n", table->URLBase );
|
"URL_BASE: %s\n", table->URLBase );
|
||||||
UpnpPrintf( level, module, __FILE__, __LINE__,
|
UpnpPrintf( level, module, __FILE__, __LINE__,
|
||||||
"Services: \n" );
|
"Services: \n" );
|
||||||
printServiceList( table->serviceList, level, module );}
|
printServiceList( table->serviceList, level, module );}
|
||||||
)
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : freeService
|
* Function : freeService
|
||||||
@ -849,12 +880,10 @@ getServiceList( IXML_Node * node,
|
|||||||
( !
|
( !
|
||||||
( current->controlURL =
|
( current->controlURL =
|
||||||
resolve_rel_url( URLBase, tempDOMString ) ) ) ) {
|
resolve_rel_url( URLBase, tempDOMString ) ) ) ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, GENA, __FILE__, __LINE__,
|
"BAD OR MISSING CONTROL URL" );
|
||||||
"BAD OR MISSING CONTROL URL" ) );
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
DBGONLY( UpnpPrintf
|
"CONTROL URL SET TO NULL IN SERVICE INFO" );
|
||||||
( UPNP_INFO, GENA, __FILE__, __LINE__,
|
|
||||||
"CONTROL URL SET TO NULL IN SERVICE INFO" ) );
|
|
||||||
current->controlURL = NULL;
|
current->controlURL = NULL;
|
||||||
fail = 0;
|
fail = 0;
|
||||||
}
|
}
|
||||||
@ -870,12 +899,10 @@ getServiceList( IXML_Node * node,
|
|||||||
( !
|
( !
|
||||||
( current->eventURL =
|
( current->eventURL =
|
||||||
resolve_rel_url( URLBase, tempDOMString ) ) ) ) {
|
resolve_rel_url( URLBase, tempDOMString ) ) ) ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, GENA, __FILE__, __LINE__,
|
"BAD OR MISSING EVENT URL" );
|
||||||
"BAD OR MISSING EVENT URL" ) );
|
UpnpPrintf( UPNP_INFO, GENA, __FILE__, __LINE__,
|
||||||
DBGONLY( UpnpPrintf
|
"EVENT URL SET TO NULL IN SERVICE INFO" );
|
||||||
( UPNP_INFO, GENA, __FILE__, __LINE__,
|
|
||||||
"EVENT URL SET TO NULL IN SERVICE INFO" ) );
|
|
||||||
current->eventURL = NULL;
|
current->eventURL = NULL;
|
||||||
fail = 0;
|
fail = 0;
|
||||||
}
|
}
|
||||||
|
@ -304,27 +304,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @name DBGONLY
|
|
||||||
The {\bf DBGONLY} macro allows code to be marked so that it
|
|
||||||
is only included in the DEBUG build and not the release. To
|
|
||||||
use this macro, put the code inside of the parentheses:
|
|
||||||
|
|
||||||
{\tt DBGONLY(int i;)}
|
|
||||||
|
|
||||||
This will cause a declaration of the integer {\tt i} only
|
|
||||||
in the debug build.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#ifdef DEBUG
|
|
||||||
# define DBGONLY(x) x
|
|
||||||
#else
|
|
||||||
# define DBGONLY(x)
|
|
||||||
#endif
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#undef EXCLUDE_WEB_SERVER
|
#undef EXCLUDE_WEB_SERVER
|
||||||
#undef EXCLUDE_MINISERVER
|
#undef EXCLUDE_MINISERVER
|
||||||
#ifdef INTERNAL_WEB_SERVER
|
#ifdef INTERNAL_WEB_SERVER
|
||||||
@ -368,4 +347,3 @@
|
|||||||
//@}
|
//@}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,22 +89,23 @@
|
|||||||
#define DEFAULT_TIMEOUT 1801
|
#define DEFAULT_TIMEOUT 1801
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern ithread_mutex_t GlobalClientSubscribeMutex;
|
extern ithread_mutex_t GlobalClientSubscribeMutex;
|
||||||
|
|
||||||
// Lock the subscription
|
// Lock the subscription
|
||||||
#define SubscribeLock() \
|
#define SubscribeLock() \
|
||||||
DBGONLY(UpnpPrintf(UPNP_INFO,GENA,__FILE__,__LINE__, \
|
UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \
|
||||||
"Trying Subscribe Lock")); \
|
"Trying Subscribe Lock"); \
|
||||||
ithread_mutex_lock(&GlobalClientSubscribeMutex); \
|
ithread_mutex_lock(&GlobalClientSubscribeMutex); \
|
||||||
DBGONLY(UpnpPrintf(UPNP_INFO,GENA,__FILE__,__LINE__,"Subscribe Lock");)
|
UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \
|
||||||
|
"Subscribe Lock");
|
||||||
|
|
||||||
// Unlock the subscription
|
// Unlock the subscription
|
||||||
#define SubscribeUnlock() \
|
#define SubscribeUnlock() \
|
||||||
DBGONLY(UpnpPrintf(UPNP_INFO,GENA,__FILE__,__LINE__, \
|
UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \
|
||||||
"Trying Subscribe UnLock")); \
|
"Trying Subscribe UnLock"); \
|
||||||
ithread_mutex_unlock(&GlobalClientSubscribeMutex); \
|
ithread_mutex_unlock(&GlobalClientSubscribeMutex); \
|
||||||
DBGONLY(UpnpPrintf(UPNP_INFO,GENA,__FILE__,__LINE__,"Subscribe UnLock");)
|
UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \
|
||||||
|
"Subscribe UnLock");
|
||||||
|
|
||||||
|
|
||||||
// Structure to send NOTIFY message to all subscribed control points
|
// Structure to send NOTIFY message to all subscribed control points
|
||||||
|
@ -214,37 +214,101 @@ EXTERN_C ssize_t readLine(int fd, char *out, int max, int *timeout);
|
|||||||
EXTERN_C int remove_dots(char * in, int size);
|
EXTERN_C int remove_dots(char * in, int size);
|
||||||
|
|
||||||
|
|
||||||
DBGONLY(EXTERN_C void print_http_request(http_message
|
#ifdef DEBUG
|
||||||
*message,Dbg_Level DLevel,
|
EXTERN_C void print_http_request(
|
||||||
Dbg_Module Module,char *DbgFileName,
|
http_message *message,
|
||||||
int DbgLineNo););
|
|
||||||
|
|
||||||
DBGONLY(EXTERN_C void print_http_response(http_message *message,
|
|
||||||
Dbg_Level DLevel,
|
|
||||||
Dbg_Module Module,char *DbgFileName,
|
|
||||||
int DbgLineNo););
|
|
||||||
|
|
||||||
DBGONLY(EXTERN_C void print_token( token * in,
|
|
||||||
Dbg_Level DLevel,
|
Dbg_Level DLevel,
|
||||||
Dbg_Module Module,
|
Dbg_Module Module,
|
||||||
char *DbgFileName,
|
char *DbgFileName,
|
||||||
int DbgLineNo););
|
int DbgLineNo);
|
||||||
|
#else
|
||||||
DBGONLY(EXTERN_C void print_status_line(http_status *in,
|
static inline void print_http_request(
|
||||||
|
http_message *message,
|
||||||
Dbg_Level DLevel,
|
Dbg_Level DLevel,
|
||||||
Dbg_Module Module,
|
Dbg_Module Module,
|
||||||
char *DbgFileName,
|
char *DbgFileName,
|
||||||
int DbgLineNo););
|
int DbgLineNo) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
DBGONLY(EXTERN_C void print_request_line(http_request *in,
|
#ifdef DEBUG
|
||||||
Dbg_Level DLevel,
|
EXTERN_C void print_http_response(
|
||||||
Dbg_Module Module,
|
http_message *message,
|
||||||
char *DbgFileName,int DbgLineNo));
|
|
||||||
|
|
||||||
DBGONLY(EXTERN_C void print_uri( uri_type *in,
|
|
||||||
Dbg_Level DLevel,
|
Dbg_Level DLevel,
|
||||||
Dbg_Module Module,
|
Dbg_Module Module,
|
||||||
char *DbgFileName,
|
char *DbgFileName,
|
||||||
int DbgLineNo););
|
int DbgLineNo);
|
||||||
|
#else
|
||||||
|
static inline void print_http_response(
|
||||||
|
http_message *message,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
EXTERN_C void print_token(
|
||||||
|
token *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo);
|
||||||
|
#else
|
||||||
|
static inline void print_token(
|
||||||
|
token *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
EXTERN_C void print_status_line(
|
||||||
|
http_status *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo);
|
||||||
|
#else
|
||||||
|
static inline void print_status_line(
|
||||||
|
http_status *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
EXTERN_C void print_request_line(
|
||||||
|
http_request *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo);
|
||||||
|
#else
|
||||||
|
static inline void print_request_line(
|
||||||
|
http_request *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
EXTERN_C void print_uri(
|
||||||
|
uri_type *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo);
|
||||||
|
#else
|
||||||
|
static inline void print_uri(
|
||||||
|
uri_type *in,
|
||||||
|
Dbg_Level DLevel,
|
||||||
|
Dbg_Module Module,
|
||||||
|
char *DbgFileName,
|
||||||
|
int DbgLineNo) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -488,7 +488,11 @@ const char* method_to_str( IN http_method_t method );
|
|||||||
* Returns:
|
* Returns:
|
||||||
* void
|
* void
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
void print_http_headers( IN http_message_t *hmsg );
|
void print_http_headers( IN http_message_t *hmsg );
|
||||||
|
#else
|
||||||
|
static inline void print_http_headers( IN http_message_t *hmsg ) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
@ -496,3 +500,4 @@ void print_http_headers( IN http_message_t* hmsg );
|
|||||||
|
|
||||||
|
|
||||||
#endif // GENLIB_NET_HTTP_HTTPPARSER_H
|
#endif // GENLIB_NET_HTTP_HTTPPARSER_H
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ extern "C" {
|
|||||||
|
|
||||||
#define SID_SIZE 41
|
#define SID_SIZE 41
|
||||||
|
|
||||||
DEVICEONLY(
|
#ifdef INCLUDE_DEVICE_APIS
|
||||||
|
|
||||||
typedef struct SUBSCRIPTION {
|
typedef struct SUBSCRIPTION {
|
||||||
Upnp_SID sid;
|
Upnp_SID sid;
|
||||||
@ -263,9 +263,17 @@ service_info * FindServiceControlURLPath( service_table *table,
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY(void printService(service_info *service,Dbg_Level
|
#ifdef DEBUG
|
||||||
level,
|
void printService(
|
||||||
Dbg_Module module));
|
service_info *service,
|
||||||
|
Dbg_Level level,
|
||||||
|
Dbg_Module module);
|
||||||
|
#else
|
||||||
|
static inline void printService(
|
||||||
|
service_info *service,
|
||||||
|
Dbg_Level level,
|
||||||
|
Dbg_Module module) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : printServiceList
|
* Function : printServiceList
|
||||||
@ -282,8 +290,17 @@ DBGONLY(void printService(service_info *service,Dbg_Level
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY(void printServiceList(service_info *service,
|
#ifdef DEBUG
|
||||||
Dbg_Level level, Dbg_Module module));
|
void printServiceList(
|
||||||
|
service_info *service,
|
||||||
|
Dbg_Level level,
|
||||||
|
Dbg_Module module);
|
||||||
|
#else
|
||||||
|
static inline void printServiceList(
|
||||||
|
service_info *service,
|
||||||
|
Dbg_Level level,
|
||||||
|
Dbg_Module module) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : printServiceTable
|
* Function : printServiceTable
|
||||||
@ -301,9 +318,17 @@ DBGONLY(void printServiceList(service_info *service,
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY(void printServiceTable(service_table *
|
#ifdef DEBUG
|
||||||
table,Dbg_Level
|
void printServiceTable(
|
||||||
level,Dbg_Module module));
|
service_table *table,
|
||||||
|
Dbg_Level level,
|
||||||
|
Dbg_Module module);
|
||||||
|
#else
|
||||||
|
static inline void printServiceTable(
|
||||||
|
service_table *table,
|
||||||
|
Dbg_Level level,
|
||||||
|
Dbg_Module module) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : freeService
|
* Function : freeService
|
||||||
@ -451,10 +476,11 @@ int getSubElement(const char *element_name, IXML_Node *node,
|
|||||||
IXML_Node **out);
|
IXML_Node **out);
|
||||||
|
|
||||||
|
|
||||||
) /* DEVICEONLY */
|
#endif /* INCLUDE_DEVICE_APIS */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _SERVICE_TABLE */
|
#endif /* _SERVICE_TABLE */
|
||||||
|
|
||||||
|
@ -96,8 +96,16 @@ struct Handle_Info
|
|||||||
extern ithread_mutex_t GlobalHndMutex;
|
extern ithread_mutex_t GlobalHndMutex;
|
||||||
Upnp_Handle_Type GetHandleInfo(int Hnd, struct Handle_Info **HndInfo);
|
Upnp_Handle_Type GetHandleInfo(int Hnd, struct Handle_Info **HndInfo);
|
||||||
|
|
||||||
#define HandleLock() DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"Trying Lock")); ithread_mutex_lock(&GlobalHndMutex); DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"LOCK"));
|
#define HandleLock() \
|
||||||
#define HandleUnlock() DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"Trying Unlock")); ithread_mutex_unlock(&GlobalHndMutex); DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"Unlock"));
|
UpnpPrintf(UPNP_INFO, API, __FILE__, __LINE__, "Trying Lock"); \
|
||||||
|
ithread_mutex_lock(&GlobalHndMutex); \
|
||||||
|
UpnpPrintf(UPNP_INFO, API, __FILE__, __LINE__, "LOCK");
|
||||||
|
|
||||||
|
#define HandleUnlock() \
|
||||||
|
UpnpPrintf(UPNP_INFO, API,__FILE__, __LINE__, "Trying Unlock"); \
|
||||||
|
ithread_mutex_unlock(&GlobalHndMutex); \
|
||||||
|
UpnpPrintf(UPNP_INFO, API, __FILE__, __LINE__, "Unlock");
|
||||||
|
|
||||||
Upnp_Handle_Type GetClientHandleInfo(int *client_handle_out,
|
Upnp_Handle_Type GetClientHandleInfo(int *client_handle_out,
|
||||||
struct Handle_Info **HndInfo);
|
struct Handle_Info **HndInfo);
|
||||||
Upnp_Handle_Type GetDeviceHandleInfo(int *device_handle_out,
|
Upnp_Handle_Type GetDeviceHandleInfo(int *device_handle_out,
|
||||||
|
@ -182,13 +182,16 @@ void free_URL_list(URL_list * list);
|
|||||||
* uri_type *in ; URI object
|
* uri_type *in ; URI object
|
||||||
*
|
*
|
||||||
* Description : Function useful in debugging for printing a parsed uri.
|
* Description : Function useful in debugging for printing a parsed uri.
|
||||||
* Compiled out with DBGONLY macro.
|
|
||||||
*
|
*
|
||||||
* Return : void ;
|
* Return : void ;
|
||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
DBGONLY(void print_uri( uri_type *in);)
|
#ifdef DEBUG
|
||||||
|
void print_uri(uri_type *in);
|
||||||
|
#else
|
||||||
|
static inline void print_uri(uri_type *in) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : print_token
|
* Function : print_token
|
||||||
@ -197,13 +200,16 @@ DBGONLY(void print_uri( uri_type *in);)
|
|||||||
* token * in ;
|
* token * in ;
|
||||||
*
|
*
|
||||||
* Description : Function useful in debugging for printing a token.
|
* Description : Function useful in debugging for printing a token.
|
||||||
* Compiled out with DBGONLY macro.
|
|
||||||
*
|
*
|
||||||
* Return : void ;
|
* Return : void ;
|
||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
#ifdef DEBUG
|
||||||
void print_token(token *in);
|
void print_token(token *in);
|
||||||
|
#else
|
||||||
|
static inline void print_token(token * in) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : token_string_casecmp
|
* Function : token_string_casecmp
|
||||||
|
@ -619,9 +619,8 @@ SoapSendAction( IN char *action_url,
|
|||||||
|
|
||||||
err_code = UPNP_E_OUTOF_MEMORY; // default error
|
err_code = UPNP_E_OUTOF_MEMORY; // default error
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"Inside SoapSendAction():" );
|
"Inside SoapSendAction():" );
|
||||||
)
|
|
||||||
// init
|
// init
|
||||||
membuffer_init( &request );
|
membuffer_init( &request );
|
||||||
membuffer_init( &responsename );
|
membuffer_init( &responsename );
|
||||||
@ -642,12 +641,12 @@ SoapSendAction( IN char *action_url,
|
|||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"path=%.*s, hostport=%.*s\n",
|
"path=%.*s, hostport=%.*s\n",
|
||||||
(int)url.pathquery.size,
|
(int)url.pathquery.size,
|
||||||
url.pathquery.buff,
|
url.pathquery.buff,
|
||||||
(int)url.hostport.text.size,
|
(int)url.hostport.text.size,
|
||||||
url.hostport.text.buff ); )
|
url.hostport.text.buff );
|
||||||
|
|
||||||
xml_start_len = strlen( xml_start );
|
xml_start_len = strlen( xml_start );
|
||||||
xml_end_len = strlen( xml_end );
|
xml_end_len = strlen( xml_end );
|
||||||
@ -771,9 +770,8 @@ SoapSendActionEx( IN char *action_url,
|
|||||||
|
|
||||||
err_code = UPNP_E_OUTOF_MEMORY; // default error
|
err_code = UPNP_E_OUTOF_MEMORY; // default error
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"Inside SoapSendActionEx():" );
|
"Inside SoapSendActionEx():" );
|
||||||
)
|
|
||||||
// init
|
// init
|
||||||
membuffer_init( &request );
|
membuffer_init( &request );
|
||||||
membuffer_init( &responsename );
|
membuffer_init( &responsename );
|
||||||
@ -799,12 +797,12 @@ SoapSendActionEx( IN char *action_url,
|
|||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"path=%.*s, hostport=%.*s\n",
|
"path=%.*s, hostport=%.*s\n",
|
||||||
(int)url.pathquery.size,
|
(int)url.pathquery.size,
|
||||||
url.pathquery.buff,
|
url.pathquery.buff,
|
||||||
(int)url.hostport.text.size,
|
(int)url.hostport.text.size,
|
||||||
url.hostport.text.buff ); )
|
url.hostport.text.buff );
|
||||||
|
|
||||||
xml_start_len = strlen( xml_start );
|
xml_start_len = strlen( xml_start );
|
||||||
xml_body_start_len = strlen( xml_body_start );
|
xml_body_start_len = strlen( xml_body_start );
|
||||||
|
@ -344,9 +344,8 @@ get_action_node( IN IXML_Document * TempDoc,
|
|||||||
int ret_code = -1; // error, by default
|
int ret_code = -1; // error, by default
|
||||||
IXML_NodeList *nl = NULL;
|
IXML_NodeList *nl = NULL;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"get_action_node(): node name =%s\n ", NodeName );
|
"get_action_node(): node name =%s\n ", NodeName );
|
||||||
)
|
|
||||||
|
|
||||||
*RespNode = NULL;
|
*RespNode = NULL;
|
||||||
|
|
||||||
@ -738,11 +737,11 @@ send_action_response( IN SOCKINFO * info,
|
|||||||
xml_response, strlen( xml_response ),
|
xml_response, strlen( xml_response ),
|
||||||
end_body, strlen( end_body ) );
|
end_body, strlen( end_body ) );
|
||||||
|
|
||||||
DBGONLY( if( ret_code != 0 ) {
|
if( ret_code != 0 ) {
|
||||||
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"Failed to send response: err code = %d\n",
|
"Failed to send response: err code = %d\n",
|
||||||
ret_code );}
|
ret_code );
|
||||||
)
|
}
|
||||||
|
|
||||||
err_code = 0;
|
err_code = 0;
|
||||||
|
|
||||||
@ -814,10 +813,9 @@ get_var_name( IN IXML_Document * TempDoc,
|
|||||||
Temp = ixmlNode_getNodeValue( VarNode );
|
Temp = ixmlNode_getNodeValue( VarNode );
|
||||||
linecopy( VarName, Temp );
|
linecopy( VarName, Temp );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"Received query for variable name %s\n",
|
"Received query for variable name %s\n",
|
||||||
VarName );
|
VarName );
|
||||||
)
|
|
||||||
|
|
||||||
ret_val = 0; // success
|
ret_val = 0; // success
|
||||||
|
|
||||||
@ -878,8 +876,8 @@ handle_query_variable( IN SOCKINFO * info,
|
|||||||
// send event
|
// send event
|
||||||
soap_event_callback( UPNP_CONTROL_GET_VAR_REQUEST, &variable, cookie );
|
soap_event_callback( UPNP_CONTROL_GET_VAR_REQUEST, &variable, cookie );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"Return from callback for var request\n" ) );
|
"Return from callback for var request\n" );
|
||||||
|
|
||||||
// validate, and handle result
|
// validate, and handle result
|
||||||
if( variable.CurrentVal == NULL ) {
|
if( variable.CurrentVal == NULL ) {
|
||||||
@ -968,8 +966,8 @@ handle_invoke_action( IN SOCKINFO * info,
|
|||||||
action.ErrCode = UPNP_E_SUCCESS;
|
action.ErrCode = UPNP_E_SUCCESS;
|
||||||
action.CtrlPtIPAddr = info->foreign_ip_addr;
|
action.CtrlPtIPAddr = info->foreign_ip_addr;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SOAP, __FILE__, __LINE__,
|
||||||
"Calling Callback\n" ) );
|
"Calling Callback\n" );
|
||||||
|
|
||||||
soap_event_callback( UPNP_CONTROL_ACTION_REQUEST, &action, cookie );
|
soap_event_callback( UPNP_CONTROL_ACTION_REQUEST, &action, cookie );
|
||||||
|
|
||||||
|
@ -536,9 +536,8 @@ SearchByTarget( IN int Mx,
|
|||||||
if( ReqBuf == NULL )
|
if( ReqBuf == NULL )
|
||||||
return UPNP_E_OUTOF_MEMORY;
|
return UPNP_E_OUTOF_MEMORY;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
">>> SSDP SEND >>>\n%s\n", ReqBuf );
|
">>> SSDP SEND >>>\n%s\n", ReqBuf );
|
||||||
)
|
|
||||||
|
|
||||||
timeTillRead = Mx;
|
timeTillRead = Mx;
|
||||||
|
|
||||||
@ -589,25 +588,22 @@ SearchByTarget( IN int Mx,
|
|||||||
|
|
||||||
if( select( gSsdpReqSocket + 1, NULL, &wrSet, NULL, NULL )
|
if( select( gSsdpReqSocket + 1, NULL, &wrSet, NULL, NULL )
|
||||||
== UPNP_SOCKETERROR ) {
|
== UPNP_SOCKETERROR ) {
|
||||||
DBGONLY( if( errno == EBADF ) {
|
if( errno == EBADF ) {
|
||||||
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"SSDP_LIB :RequestHandler:An invalid file descriptor"
|
"SSDP_LIB :RequestHandler:An invalid file descriptor"
|
||||||
" was givenin one of the sets. \n" );}
|
" was givenin one of the sets. \n" );
|
||||||
else
|
} else if( errno == EINTR ) {
|
||||||
if( errno == EINTR ) {
|
|
||||||
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"SSDP_LIB :RequestHandler: A non blocked "
|
"SSDP_LIB :RequestHandler: A non blocked "
|
||||||
"signal was caught. \n" );}
|
"signal was caught. \n" );
|
||||||
else
|
} else if( errno == EINVAL ) {
|
||||||
if( errno == EINVAL ) {
|
|
||||||
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"SSDP_LIB :RequestHandler: n is negative. \n" );}
|
"SSDP_LIB :RequestHandler: n is negative. \n" );
|
||||||
else
|
} else if( errno == ENOMEM ) {
|
||||||
if( errno == ENOMEM ) {
|
|
||||||
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"SSDP_LIB : RequestHandler:select was unable to "
|
"SSDP_LIB : RequestHandler:select was unable to "
|
||||||
"allocate memory for internal tables.\n" );}
|
"allocate memory for internal tables.\n" );
|
||||||
)
|
}
|
||||||
shutdown( gSsdpReqSocket, SD_BOTH );
|
shutdown( gSsdpReqSocket, SD_BOTH );
|
||||||
UpnpCloseSocket( gSsdpReqSocket );
|
UpnpCloseSocket( gSsdpReqSocket );
|
||||||
free( ReqBuf );
|
free( ReqBuf );
|
||||||
|
@ -144,7 +144,7 @@ ssdp_handle_device_request( IN http_message_t * hmsg,
|
|||||||
maxAge = dev_info->MaxAge;
|
maxAge = dev_info->MaxAge;
|
||||||
HandleUnlock();
|
HandleUnlock();
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
||||||
"ssdp_handle_device_request with Cmd %d SEARCH\n",
|
"ssdp_handle_device_request with Cmd %d SEARCH\n",
|
||||||
event.Cmd );
|
event.Cmd );
|
||||||
UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
||||||
@ -156,7 +156,7 @@ ssdp_handle_device_request( IN http_message_t * hmsg,
|
|||||||
UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
||||||
"DeviceUuid = %s\n", event.UDN );
|
"DeviceUuid = %s\n", event.UDN );
|
||||||
UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_PACKET, API, __FILE__, __LINE__,
|
||||||
"ServiceType = %s\n", event.ServiceType ); )
|
"ServiceType = %s\n", event.ServiceType );
|
||||||
|
|
||||||
threadArg =
|
threadArg =
|
||||||
( SsdpSearchReply * ) malloc( sizeof( SsdpSearchReply ) );
|
( SsdpSearchReply * ) malloc( sizeof( SsdpSearchReply ) );
|
||||||
@ -220,9 +220,9 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr,
|
|||||||
|
|
||||||
ReplySock = socket( AF_INET, SOCK_DGRAM, 0 );
|
ReplySock = socket( AF_INET, SOCK_DGRAM, 0 );
|
||||||
if( ReplySock == UPNP_INVALID_SOCKET ) {
|
if( ReplySock == UPNP_INVALID_SOCKET ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"SSDP_LIB: New Request Handler:"
|
"SSDP_LIB: New Request Handler:"
|
||||||
"Error in socket operation !!!\n" ) );
|
"Error in socket operation !!!\n" );
|
||||||
|
|
||||||
return UPNP_E_OUTOF_SOCKET;
|
return UPNP_E_OUTOF_SOCKET;
|
||||||
}
|
}
|
||||||
@ -247,10 +247,9 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr,
|
|||||||
// So, NUM_COPY has been changed from 2 to 1.
|
// So, NUM_COPY has been changed from 2 to 1.
|
||||||
NumCopy = 0;
|
NumCopy = 0;
|
||||||
while( NumCopy < NUM_COPY ) {
|
while( NumCopy < NUM_COPY ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
">>> SSDP SEND >>>\n%s\n",
|
">>> SSDP SEND >>>\n%s\n",
|
||||||
*( RqPacket + Index ) );
|
*( RqPacket + Index ) );
|
||||||
)
|
|
||||||
rc = sendto( ReplySock, *( RqPacket + Index ),
|
rc = sendto( ReplySock, *( RqPacket + Index ),
|
||||||
strlen( *( RqPacket + Index ) ),
|
strlen( *( RqPacket + Index ) ),
|
||||||
0, ( struct sockaddr * )DestAddr, socklen );
|
0, ( struct sockaddr * )DestAddr, socklen );
|
||||||
@ -388,9 +387,8 @@ DeviceAdvertisement( IN char *DevType,
|
|||||||
char *msgs[3];
|
char *msgs[3];
|
||||||
int ret_code;
|
int ret_code;
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"In function SendDeviceAdvertisemenrt\n" );
|
"In function SendDeviceAdvertisemenrt\n" );
|
||||||
)
|
|
||||||
|
|
||||||
DestAddr.sin_family = AF_INET;
|
DestAddr.sin_family = AF_INET;
|
||||||
DestAddr.sin_addr.s_addr = inet_addr( SSDP_IP );
|
DestAddr.sin_addr.s_addr = inet_addr( SSDP_IP );
|
||||||
@ -783,8 +781,8 @@ DeviceShutdown( IN char *DevType,
|
|||||||
Mil_Usn, Location, Duration, &msgs[0] );
|
Mil_Usn, Location, Duration, &msgs[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"In function DeviceShutdown\n" ); )
|
"In function DeviceShutdown\n" );
|
||||||
// both root and sub-devices need to send these two messages
|
// both root and sub-devices need to send these two messages
|
||||||
CreateServicePacket( MSGTYPE_SHUTDOWN, Udn, Udn,
|
CreateServicePacket( MSGTYPE_SHUTDOWN, Udn, Udn,
|
||||||
Location, Duration, &msgs[1] );
|
Location, Duration, &msgs[1] );
|
||||||
|
@ -115,10 +115,10 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
const DOMString tmpStr;
|
const DOMString tmpStr;
|
||||||
char SERVER[200];
|
char SERVER[200];
|
||||||
|
|
||||||
DBGONLY( const DOMString dbgStr;
|
const DOMString dbgStr;
|
||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Inside AdvertiseAndReply with AdFlag = %d\n",
|
"Inside AdvertiseAndReply with AdFlag = %d\n",
|
||||||
AdFlag ); )
|
AdFlag );
|
||||||
|
|
||||||
HandleLock();
|
HandleLock();
|
||||||
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
if( GetHandleInfo( Hnd, &SInfo ) != HND_DEVICE ) {
|
||||||
@ -139,24 +139,20 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
// parse the device list and send advertisements/replies
|
// parse the device list and send advertisements/replies
|
||||||
for( i = 0;; i++ ) {
|
for( i = 0;; i++ ) {
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Entering new device list with i = %d\n\n",
|
"Entering new device list with i = %d\n\n", i );
|
||||||
i );
|
|
||||||
)
|
|
||||||
|
|
||||||
tmpNode = ixmlNodeList_item( SInfo->DeviceList, i );
|
tmpNode = ixmlNodeList_item( SInfo->DeviceList, i );
|
||||||
if( tmpNode == NULL ) {
|
if( tmpNode == NULL ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting new device list with i = %d\n\n",
|
"Exiting new device list with i = %d\n\n", i );
|
||||||
i );
|
|
||||||
)
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( dbgStr = ixmlNode_getNodeName( tmpNode );
|
dbgStr = ixmlNode_getNodeName( tmpNode );
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Extracting device type once for %s\n",
|
"Extracting device type once for %s\n",
|
||||||
dbgStr ); )
|
dbgStr );
|
||||||
// extract device type
|
// extract device type
|
||||||
ixmlNodeList_free( nodeList );
|
ixmlNodeList_free( nodeList );
|
||||||
nodeList = NULL;
|
nodeList = NULL;
|
||||||
@ -167,13 +163,12 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( dbgStr = ixmlNode_getNodeName( tmpNode );
|
dbgStr = ixmlNode_getNodeName( tmpNode );
|
||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Extracting UDN for %s\n", dbgStr ); )
|
"Extracting UDN for %s\n", dbgStr );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Extracting device type\n" );
|
"Extracting device type\n" );
|
||||||
)
|
|
||||||
|
|
||||||
tmpNode2 = ixmlNodeList_item( nodeList, 0 );
|
tmpNode2 = ixmlNodeList_item( nodeList, 0 );
|
||||||
if( tmpNode2 == NULL ) {
|
if( tmpNode2 == NULL ) {
|
||||||
@ -184,9 +179,8 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Extracting device type \n" );
|
"Extracting device type \n" );
|
||||||
)
|
|
||||||
|
|
||||||
tmpStr = ixmlNode_getNodeValue( textNode );
|
tmpStr = ixmlNode_getNodeValue( textNode );
|
||||||
if( tmpStr == NULL ) {
|
if( tmpStr == NULL ) {
|
||||||
@ -198,47 +192,41 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Extracting device type = %s\n", devType );
|
"Extracting device type = %s\n", devType );
|
||||||
if( tmpNode == NULL ) {
|
if( tmpNode == NULL ) {
|
||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"TempNode is NULL\n" );}
|
"TempNode is NULL\n" );
|
||||||
|
}
|
||||||
dbgStr = ixmlNode_getNodeName( tmpNode );
|
dbgStr = ixmlNode_getNodeName( tmpNode );
|
||||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Extracting UDN for %s\n", dbgStr ); )
|
"Extracting UDN for %s\n", dbgStr );
|
||||||
// extract UDN
|
// extract UDN
|
||||||
ixmlNodeList_free( nodeList );
|
ixmlNodeList_free( nodeList );
|
||||||
nodeList = NULL;
|
nodeList = NULL;
|
||||||
nodeList = ixmlElement_getElementsByTagName( ( IXML_Element * )
|
nodeList = ixmlElement_getElementsByTagName( ( IXML_Element * )
|
||||||
tmpNode, "UDN" );
|
tmpNode, "UDN" );
|
||||||
if( nodeList == NULL ) {
|
if( nodeList == NULL ) {
|
||||||
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__,
|
|
||||||
__LINE__, "UDN not found!!!\n" );
|
__LINE__, "UDN not found!!!\n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tmpNode2 = ixmlNodeList_item( nodeList, 0 );
|
tmpNode2 = ixmlNodeList_item( nodeList, 0 );
|
||||||
if( tmpNode2 == NULL ) {
|
if( tmpNode2 == NULL ) {
|
||||||
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__,
|
|
||||||
__LINE__, "UDN not found!!!\n" );
|
__LINE__, "UDN not found!!!\n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
textNode = ixmlNode_getFirstChild( tmpNode2 );
|
textNode = ixmlNode_getFirstChild( tmpNode2 );
|
||||||
if( textNode == NULL ) {
|
if( textNode == NULL ) {
|
||||||
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__,
|
|
||||||
__LINE__, "UDN not found!!!\n" );
|
__LINE__, "UDN not found!!!\n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tmpStr = ixmlNode_getNodeValue( textNode );
|
tmpStr = ixmlNode_getNodeValue( textNode );
|
||||||
if( tmpStr == NULL ) {
|
if( tmpStr == NULL ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
"UDN not found!!!!\n" );
|
"UDN not found!!!!\n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
strcpy( UDNstr, tmpStr );
|
strcpy( UDNstr, tmpStr );
|
||||||
@ -246,9 +234,8 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Sending UDNStr = %s \n", UDNstr );
|
"Sending UDNStr = %s \n", UDNstr );
|
||||||
)
|
|
||||||
if( AdFlag ) {
|
if( AdFlag ) {
|
||||||
// send the device advertisement
|
// send the device advertisement
|
||||||
if( AdFlag == 1 ) {
|
if( AdFlag == 1 ) {
|
||||||
@ -278,22 +265,16 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
{
|
{
|
||||||
if( DeviceUDN != NULL && strlen( DeviceUDN ) != 0 ) {
|
if( DeviceUDN != NULL && strlen( DeviceUDN ) != 0 ) {
|
||||||
if( strcasecmp( DeviceUDN, UDNstr ) ) {
|
if( strcasecmp( DeviceUDN, UDNstr ) ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, API, __FILE__,
|
|
||||||
__LINE__,
|
|
||||||
"DeviceUDN=%s and search "
|
"DeviceUDN=%s and search "
|
||||||
"UDN=%s did not match\n",
|
"UDN=%s did not match\n",
|
||||||
UDNstr, DeviceUDN );
|
UDNstr, DeviceUDN );
|
||||||
)
|
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, API, __FILE__,
|
|
||||||
__LINE__,
|
|
||||||
"DeviceUDN=%s and search "
|
"DeviceUDN=%s and search "
|
||||||
"UDN=%s MATCH\n", UDNstr,
|
"UDN=%s MATCH\n", UDNstr,
|
||||||
DeviceUDN );
|
DeviceUDN );
|
||||||
)
|
|
||||||
SendReply( DestAddr, devType, 0,
|
SendReply( DestAddr, devType, 0,
|
||||||
UDNstr, SInfo->DescURL,
|
UDNstr, SInfo->DescURL,
|
||||||
defaultExp, 0 );
|
defaultExp, 0 );
|
||||||
@ -306,24 +287,17 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
if( !strncasecmp
|
if( !strncasecmp
|
||||||
( DeviceType, devType,
|
( DeviceType, devType,
|
||||||
strlen( DeviceType ) ) ) {
|
strlen( DeviceType ) ) ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
( UPNP_INFO, API, __FILE__, __LINE__,
|
|
||||||
"DeviceType=%s and search devType=%s MATCH\n",
|
"DeviceType=%s and search devType=%s MATCH\n",
|
||||||
devType, DeviceType );
|
devType, DeviceType );
|
||||||
)
|
|
||||||
SendReply( DestAddr, devType, 0, UDNstr,
|
SendReply( DestAddr, devType, 0, UDNstr,
|
||||||
SInfo->DescURL, defaultExp, 1 );
|
SInfo->DescURL, defaultExp, 1 );
|
||||||
}
|
} else {
|
||||||
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
DBGONLY(
|
|
||||||
else
|
|
||||||
UpnpPrintf( UPNP_INFO, API, __FILE__,
|
|
||||||
__LINE__,
|
|
||||||
"DeviceType=%s and search devType=%s"
|
"DeviceType=%s and search devType=%s"
|
||||||
" DID NOT MATCH\n",
|
" DID NOT MATCH\n",
|
||||||
devType, DeviceType );
|
devType, DeviceType );
|
||||||
)
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -332,9 +306,8 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
}
|
}
|
||||||
// send service advertisements for services corresponding
|
// send service advertisements for services corresponding
|
||||||
// to the same device
|
// to the same device
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Sending service Advertisement\n" );
|
"Sending service Advertisement\n" );
|
||||||
)
|
|
||||||
|
|
||||||
tmpNode = ixmlNodeList_item( SInfo->ServiceList, i );
|
tmpNode = ixmlNodeList_item( SInfo->ServiceList, i );
|
||||||
if( tmpNode == NULL ) {
|
if( tmpNode == NULL ) {
|
||||||
@ -345,9 +318,8 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
nodeList = ixmlElement_getElementsByTagName( ( IXML_Element * )
|
nodeList = ixmlElement_getElementsByTagName( ( IXML_Element * )
|
||||||
tmpNode, "service" );
|
tmpNode, "service" );
|
||||||
if( nodeList == NULL ) {
|
if( nodeList == NULL ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"Service not found 3\n" );
|
"Service not found 3\n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for( j = 0;; j++ ) {
|
for( j = 0;; j++ ) {
|
||||||
@ -357,15 +329,11 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
|
|
||||||
ixmlNodeList_free( tmpNodeList );
|
ixmlNodeList_free( tmpNodeList );
|
||||||
tmpNodeList = NULL;
|
tmpNodeList = NULL;
|
||||||
tmpNodeList = ixmlElement_getElementsByTagName( ( IXML_Element
|
tmpNodeList = ixmlElement_getElementsByTagName(
|
||||||
* ) tmpNode,
|
( IXML_Element *)tmpNode, "serviceType" );
|
||||||
"serviceType" );
|
|
||||||
|
|
||||||
if( tmpNodeList == NULL ) {
|
if( tmpNodeList == NULL ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||||
( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
|
||||||
"ServiceType not found \n" );
|
"ServiceType not found \n" );
|
||||||
)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tmpNode2 = ixmlNodeList_item( tmpNodeList, 0 );
|
tmpNode2 = ixmlNodeList_item( tmpNodeList, 0 );
|
||||||
@ -386,19 +354,16 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"ServiceType = %s\n", servType );
|
"ServiceType = %s\n", servType );
|
||||||
)
|
|
||||||
if( AdFlag ) {
|
if( AdFlag ) {
|
||||||
if( AdFlag == 1 ) {
|
if( AdFlag == 1 ) {
|
||||||
ServiceAdvertisement( UDNstr, servType,
|
ServiceAdvertisement( UDNstr, servType,
|
||||||
SInfo->DescURL, Exp );
|
SInfo->DescURL, Exp );
|
||||||
} else // AdFlag == -1
|
} else { // AdFlag == -1
|
||||||
{
|
|
||||||
ServiceShutdown( UDNstr, servType,
|
ServiceShutdown( UDNstr, servType,
|
||||||
SInfo->DescURL, Exp );
|
SInfo->DescURL, Exp );
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
switch ( SearchType ) {
|
switch ( SearchType ) {
|
||||||
case SSDP_ALL:
|
case SSDP_ALL:
|
||||||
@ -433,9 +398,8 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
|||||||
ixmlNodeList_free( nodeList );
|
ixmlNodeList_free( nodeList );
|
||||||
nodeList = NULL;
|
nodeList = NULL;
|
||||||
}
|
}
|
||||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||||
"Exiting AdvertiseAndReply : \n" );
|
"Exiting AdvertiseAndReply : \n" );
|
||||||
)
|
|
||||||
|
|
||||||
HandleUnlock( );
|
HandleUnlock( );
|
||||||
|
|
||||||
@ -733,18 +697,16 @@ start_event_handler( void *Data )
|
|||||||
if( status == PARSE_FAILURE ) {
|
if( status == PARSE_FAILURE ) {
|
||||||
if( parser->msg.method != HTTPMETHOD_NOTIFY ||
|
if( parser->msg.method != HTTPMETHOD_NOTIFY ||
|
||||||
!parser->valid_ssdp_notify_hack ) {
|
!parser->valid_ssdp_notify_hack ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"SSDP recvd bad msg code = %d\n",
|
"SSDP recvd bad msg code = %d\n",
|
||||||
status );
|
status );
|
||||||
)
|
|
||||||
// ignore bad msg, or not enuf mem
|
// ignore bad msg, or not enuf mem
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
// valid notify msg
|
// valid notify msg
|
||||||
} else if( status != PARSE_SUCCESS ) {
|
} else if( status != PARSE_SUCCESS ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"SSDP recvd bad msg code = %d\n", status );
|
"SSDP recvd bad msg code = %d\n", status );
|
||||||
)
|
|
||||||
|
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
@ -863,19 +825,16 @@ readFromSSDPSocket( SOCKET socket )
|
|||||||
if( byteReceived > 0 ) {
|
if( byteReceived > 0 ) {
|
||||||
|
|
||||||
requestBuf[byteReceived] = '\0';
|
requestBuf[byteReceived] = '\0';
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP,
|
UpnpPrintf( UPNP_INFO, SSDP,
|
||||||
__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
"Received response !!! "
|
"Received response !!! "
|
||||||
"%s From host %s \n",
|
"%s From host %s \n",
|
||||||
requestBuf,
|
requestBuf,
|
||||||
inet_ntoa( clientAddr.sin_addr ) );
|
inet_ntoa( clientAddr.sin_addr ) );
|
||||||
)
|
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_PACKET, SSDP,
|
UpnpPrintf( UPNP_PACKET, SSDP, __FILE__, __LINE__,
|
||||||
__FILE__, __LINE__,
|
|
||||||
"Received multicast packet:"
|
"Received multicast packet:"
|
||||||
"\n %s\n", requestBuf );
|
"\n %s\n", requestBuf );
|
||||||
)
|
|
||||||
//add thread pool job to handle request
|
//add thread pool job to handle request
|
||||||
if( data != NULL ) {
|
if( data != NULL ) {
|
||||||
data->parser.msg.msg.length += byteReceived;
|
data->parser.msg.msg.length += byteReceived;
|
||||||
@ -891,7 +850,6 @@ readFromSSDPSocket( SOCKET socket )
|
|||||||
free_ssdp_event_handler_data( data );
|
free_ssdp_event_handler_data( data );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
free_ssdp_event_handler_data( data );
|
free_ssdp_event_handler_data( data );
|
||||||
}
|
}
|
||||||
@ -926,9 +884,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
|
|
||||||
CLIENTONLY( if( ( ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ) )
|
CLIENTONLY( if( ( ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ) )
|
||||||
== UPNP_INVALID_SOCKET ) {
|
== UPNP_INVALID_SOCKET ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL,
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
SSDP, __FILE__, __LINE__,
|
SSDP, __FILE__, __LINE__,
|
||||||
"Error in socket operation !!!\n" ); )
|
"Error in socket operation !!!\n" );
|
||||||
return UPNP_E_OUTOF_SOCKET;}
|
return UPNP_E_OUTOF_SOCKET;}
|
||||||
setsockopt( ssdpReqSock,
|
setsockopt( ssdpReqSock,
|
||||||
IPPROTO_IP,
|
IPPROTO_IP,
|
||||||
@ -938,10 +896,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
|
|
||||||
if( ( ssdpSock = socket( AF_INET, SOCK_DGRAM, 0 ) )
|
if( ( ssdpSock = socket( AF_INET, SOCK_DGRAM, 0 ) )
|
||||||
== UPNP_INVALID_SOCKET ) {
|
== UPNP_INVALID_SOCKET ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL,
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
SSDP, __FILE__, __LINE__,
|
SSDP, __FILE__, __LINE__,
|
||||||
"Error in socket operation !!!\n" );
|
"Error in socket operation !!!\n" );
|
||||||
)
|
|
||||||
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
||||||
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
||||||
return UPNP_E_OUTOF_SOCKET;
|
return UPNP_E_OUTOF_SOCKET;
|
||||||
@ -951,10 +908,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
if( setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEADDR,
|
if( setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEADDR,
|
||||||
( char * )&onOff, sizeof( onOff ) ) != 0 ) {
|
( char * )&onOff, sizeof( onOff ) ) != 0 ) {
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL,
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
SSDP, __FILE__, __LINE__,
|
SSDP, __FILE__, __LINE__,
|
||||||
"Error in set reuse addr !!!\n" );
|
"Error in set reuse addr !!!\n" );
|
||||||
)
|
|
||||||
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
||||||
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
||||||
shutdown( ssdpSock, SD_BOTH );
|
shutdown( ssdpSock, SD_BOTH );
|
||||||
@ -966,10 +922,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
if( setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEPORT,
|
if( setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEPORT,
|
||||||
( char * )&onOff, sizeof( onOff ) ) != 0 ) {
|
( char * )&onOff, sizeof( onOff ) ) != 0 ) {
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL,
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
SSDP, __FILE__, __LINE__,
|
SSDP, __FILE__, __LINE__,
|
||||||
"Error in set reuse port !!!\n" );
|
"Error in set reuse port !!!\n" );
|
||||||
)
|
|
||||||
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
||||||
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
||||||
shutdown( ssdpSock, SD_BOTH );
|
shutdown( ssdpSock, SD_BOTH );
|
||||||
@ -986,10 +941,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
if( bind
|
if( bind
|
||||||
( ssdpSock, ( struct sockaddr * )&ssdpAddr,
|
( ssdpSock, ( struct sockaddr * )&ssdpAddr,
|
||||||
sizeof( ssdpAddr ) ) != 0 ) {
|
sizeof( ssdpAddr ) ) != 0 ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
SSDP, __FILE__, __LINE__,
|
||||||
"Error in binding !!!\n" );
|
"Error in binding !!!\n" );
|
||||||
)
|
|
||||||
shutdown( ssdpSock, SD_BOTH );
|
shutdown( ssdpSock, SD_BOTH );
|
||||||
UpnpCloseSocket( ssdpSock );
|
UpnpCloseSocket( ssdpSock );
|
||||||
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
||||||
@ -1003,10 +957,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
if( setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
|
if( setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
|
||||||
( char * )&ssdpMcastAddr,
|
( char * )&ssdpMcastAddr,
|
||||||
sizeof( struct ip_mreq ) ) != 0 ) {
|
sizeof( struct ip_mreq ) ) != 0 ) {
|
||||||
DBGONLY( UpnpPrintf
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
( UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
SSDP, __FILE__, __LINE__,
|
||||||
"Error in joining" " multicast group !!!\n" );
|
"Error in joining" " multicast group !!!\n" );
|
||||||
)
|
|
||||||
shutdown( ssdpSock, SD_BOTH );
|
shutdown( ssdpSock, SD_BOTH );
|
||||||
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
||||||
UpnpCloseSocket( ssdpSock );
|
UpnpCloseSocket( ssdpSock );
|
||||||
@ -1019,8 +972,8 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
addr.s_addr = inet_addr(LOCAL_HOST);
|
addr.s_addr = inet_addr(LOCAL_HOST);
|
||||||
if (setsockopt(ssdpSock, IPPROTO_IP, IP_MULTICAST_IF,
|
if (setsockopt(ssdpSock, IPPROTO_IP, IP_MULTICAST_IF,
|
||||||
(char *)&addr, sizeof addr) != 0) {
|
(char *)&addr, sizeof addr) != 0) {
|
||||||
DBGONLY(UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"Couldn't set multicast interface.\n" ));
|
"Couldn't set multicast interface.\n" );
|
||||||
/* This is probably not a critical error, so let's continue. */
|
/* This is probably not a critical error, so let's continue. */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1029,10 +982,9 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
|||||||
IP_MULTICAST_TTL, &ttl, sizeof( ttl ) );
|
IP_MULTICAST_TTL, &ttl, sizeof( ttl ) );
|
||||||
if( setsockopt( ssdpSock, SOL_SOCKET, SO_BROADCAST,
|
if( setsockopt( ssdpSock, SOL_SOCKET, SO_BROADCAST,
|
||||||
( char * )&option, sizeof( option ) ) != 0 ) {
|
( char * )&option, sizeof( option ) ) != 0 ) {
|
||||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL,
|
UpnpPrintf( UPNP_CRITICAL,
|
||||||
SSDP, __FILE__, __LINE__,
|
SSDP, __FILE__, __LINE__,
|
||||||
"Error in setting broadcast !!!\n" );
|
"Error in setting broadcast !!!\n" );
|
||||||
)
|
|
||||||
shutdown( ssdpSock, SD_BOTH );
|
shutdown( ssdpSock, SD_BOTH );
|
||||||
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ) );
|
||||||
UpnpCloseSocket( ssdpSock );
|
UpnpCloseSocket( ssdpSock );
|
||||||
|
@ -168,9 +168,8 @@ calc_descURL( IN const char *ipPortStr,
|
|||||||
strcat( descURL, ipPortStr );
|
strcat( descURL, ipPortStr );
|
||||||
strcat( descURL, alias );
|
strcat( descURL, alias );
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"desc url: %s\n", descURL );
|
"desc url: %s\n", descURL );
|
||||||
)
|
|
||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -408,12 +407,10 @@ configure_urlbase( INOUT IXML_Document * doc,
|
|||||||
goto error_handler;
|
goto error_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
"desc url: %s\n", docURL );
|
"desc url: %s\n", docURL );
|
||||||
)
|
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
||||||
DBGONLY( UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
|
|
||||||
"doc = %s\n", xml_str );
|
"doc = %s\n", xml_str );
|
||||||
)
|
|
||||||
// store in web server
|
// store in web server
|
||||||
err_code =
|
err_code =
|
||||||
web_server_set_alias( new_alias, xml_str, strlen( xml_str ),
|
web_server_set_alias( new_alias, xml_str, strlen( xml_str ),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user