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