Compare commits
	
		
			1 Commits
		
	
	
		
			release-1.
			...
			release-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 84692a6e84 | 
							
								
								
									
										104
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										104
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,104 +0,0 @@ | |||||||
| # |  | ||||||
| # NOTE! Don't add files that are generated in specific |  | ||||||
| # subdirectories here. Add them in the ".gitignore" file |  | ||||||
| # in that subdirectory instead. |  | ||||||
| # |  | ||||||
| # NOTE! Please use 'git ls-files -i --exclude-standard' |  | ||||||
| # command after changing this file, to see if there are |  | ||||||
| # any tracked files which get ignored after the change. |  | ||||||
| # |  | ||||||
| # Normal rules |  | ||||||
| # |  | ||||||
| .* |  | ||||||
| *.o |  | ||||||
| *.o.* |  | ||||||
| *.a |  | ||||||
| *.s |  | ||||||
| *.ko |  | ||||||
| *.so |  | ||||||
| *.so.dbg |  | ||||||
| *.mod.c |  | ||||||
| *.i |  | ||||||
| *.lst |  | ||||||
| *.symtypes |  | ||||||
| *.order |  | ||||||
| modules.builtin |  | ||||||
| *.elf |  | ||||||
| *.bin |  | ||||||
| *.gz |  | ||||||
| *.bz2 |  | ||||||
| *.lzma |  | ||||||
| *.patch |  | ||||||
| *.gcno |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # Top-level generic files |  | ||||||
| # |  | ||||||
| /tags |  | ||||||
| /TAGS |  | ||||||
| /linux |  | ||||||
| /vmlinux |  | ||||||
| /vmlinuz |  | ||||||
| /System.map |  | ||||||
| /Module.markers |  | ||||||
| /Module.symvers |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # git files that we don't want to ignore even it they are dot-files |  | ||||||
| # |  | ||||||
| !.gitignore |  | ||||||
| !.mailmap |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # Generated include files |  | ||||||
| # |  | ||||||
| include/config |  | ||||||
| include/linux/version.h |  | ||||||
| include/generated |  | ||||||
|  |  | ||||||
| # stgit generated dirs |  | ||||||
| patches-* |  | ||||||
|  |  | ||||||
| # quilt's files |  | ||||||
| patches |  | ||||||
| series |  | ||||||
|  |  | ||||||
| # cscope files |  | ||||||
| cscope.* |  | ||||||
| ncscope.* |  | ||||||
|  |  | ||||||
| # gnu global files |  | ||||||
| GPATH |  | ||||||
| GRTAGS |  | ||||||
| GSYMS |  | ||||||
| GTAGS |  | ||||||
|  |  | ||||||
| *.orig |  | ||||||
| *~ |  | ||||||
| \#*# |  | ||||||
| *.lo |  | ||||||
| *.la |  | ||||||
| Makefile |  | ||||||
| Makefile.in |  | ||||||
| aclocal.m4 |  | ||||||
| autoconfig.h |  | ||||||
| autoconfig.h.in |  | ||||||
| autom4te.cache/ |  | ||||||
| build-aux/ |  | ||||||
| config.log |  | ||||||
| config.status |  | ||||||
| configure |  | ||||||
| libtool |  | ||||||
| libupnp.pc |  | ||||||
| m4/libtool.m4 |  | ||||||
| m4/ltoptions.m4 |  | ||||||
| m4/ltsugar.m4 |  | ||||||
| m4/ltversion.m4 |  | ||||||
| m4/lt~obsolete.m4 |  | ||||||
| stamp-h1 |  | ||||||
| upnp/inc/stamp-h2 |  | ||||||
| upnp/inc/upnpconfig.h |  | ||||||
| upnp/sample/upnp_tv_combo |  | ||||||
| upnp/sample/upnp_tv_ctrlpt |  | ||||||
| upnp/sample/upnp_tv_device |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								Doxyfile
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								Doxyfile
									
									
									
									
									
								
							| @@ -31,7 +31,7 @@ PROJECT_NAME           = libUPnP | |||||||
| # This could be handy for archiving the generated documentation or  | # This could be handy for archiving the generated documentation or  | ||||||
| # if some version control system is used. | # if some version control system is used. | ||||||
|  |  | ||||||
| PROJECT_NUMBER         = 1.6.7 | PROJECT_NUMBER         = 1.4.7 | ||||||
|  |  | ||||||
| # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)  | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)  | ||||||
| # base path where the generated documentation will be put.  | # base path where the generated documentation will be put.  | ||||||
| @@ -91,7 +91,7 @@ ABBREVIATE_BRIEF       = | |||||||
| # Doxygen will generate a detailed section even if there is only a brief  | # Doxygen will generate a detailed section even if there is only a brief  | ||||||
| # description. | # description. | ||||||
|  |  | ||||||
| ALWAYS_DETAILED_SEC    = YES | ALWAYS_DETAILED_SEC    = NO | ||||||
|  |  | ||||||
| # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all  | # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all  | ||||||
| # inherited members of a class in the documentation of that class as if those  | # inherited members of a class in the documentation of that class as if those  | ||||||
| @@ -290,7 +290,7 @@ HIDE_IN_BODY_DOCS      = NO | |||||||
| # to NO (the default) then the documentation will be excluded.  | # to NO (the default) then the documentation will be excluded.  | ||||||
| # Set it to YES to include the internal documentation. | # Set it to YES to include the internal documentation. | ||||||
|  |  | ||||||
| INTERNAL_DOCS          = YES | INTERNAL_DOCS          = NO | ||||||
|  |  | ||||||
| # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate  | # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate  | ||||||
| # file names in lower-case letters. If set to YES upper-case letters are also  | # file names in lower-case letters. If set to YES upper-case letters are also  | ||||||
| @@ -462,7 +462,7 @@ WARN_LOGFILE           = | |||||||
| # directories like "/usr/src/myproject". Separate the files or directories  | # directories like "/usr/src/myproject". Separate the files or directories  | ||||||
| # with spaces. | # with spaces. | ||||||
|  |  | ||||||
| INPUT                  = upnp ixml threadutil | INPUT                  = ./upnp ./ixml ./threadutil | ||||||
|  |  | ||||||
| # This tag can be used to specify the character encoding of the source files that  | # This tag can be used to specify the character encoding of the source files that  | ||||||
| # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default  | # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default  | ||||||
| @@ -995,7 +995,7 @@ ENABLE_PREPROCESSING   = YES | |||||||
| # compilation will be performed. Macro expansion can be done in a controlled  | # compilation will be performed. Macro expansion can be done in a controlled  | ||||||
| # way by setting EXPAND_ONLY_PREDEF to YES. | # way by setting EXPAND_ONLY_PREDEF to YES. | ||||||
|  |  | ||||||
| MACRO_EXPANSION        = YES | MACRO_EXPANSION        = NO | ||||||
|  |  | ||||||
| # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES  | # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES  | ||||||
| # then the macro expansion is limited to the macros specified with the  | # then the macro expansion is limited to the macros specified with the  | ||||||
| @@ -1029,7 +1029,7 @@ INCLUDE_FILE_PATTERNS  = | |||||||
| # undefined via #undef or recursively expanded use the := operator  | # undefined via #undef or recursively expanded use the := operator  | ||||||
| # instead of the = operator. | # instead of the = operator. | ||||||
|  |  | ||||||
| PREDEFINED             = DEBUG UPNP_HAVE_TOOLS INCLUDE_DEVICE_APIS INCLUDE_CLIENT_APIS EXCLUDE_GENA=0 EXCLUDE_DOM=0 | PREDEFINED             =  | ||||||
|  |  | ||||||
| # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then  | # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then  | ||||||
| # this tag can be used to specify a list of macro names that should be expanded.  | # this tag can be used to specify a list of macro names that should be expanded.  | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								Makefile.am
									
									
									
									
									
								
							| @@ -1,7 +1,7 @@ | |||||||
| # | # | ||||||
| # Top-level "Makefile.am" for libupnp | # Top-level "Makefile.am" for libupnp | ||||||
| # | # | ||||||
| # Copyright (C) 2005 Rémi Turboult <r3mi@users.sourceforge.net> | # Copyright (C) 2005 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| # | # | ||||||
|  |  | ||||||
| ACLOCAL_AMFLAGS = -I m4 | ACLOCAL_AMFLAGS = -I m4 | ||||||
| @@ -16,7 +16,6 @@ SUBDIRS = \ | |||||||
|  |  | ||||||
|  |  | ||||||
| EXTRA_DIST = \ | EXTRA_DIST = \ | ||||||
| 	Doxyfile \ |  | ||||||
| 	libupnp.pc.in \ | 	libupnp.pc.in \ | ||||||
| 	LICENSE \ | 	LICENSE \ | ||||||
| 	THANKS \ | 	THANKS \ | ||||||
| @@ -28,22 +27,7 @@ EXTRA_DIST = \ | |||||||
| 	build/inc/autoconfig.h \ | 	build/inc/autoconfig.h \ | ||||||
| 	build/inc/config.h \ | 	build/inc/config.h \ | ||||||
| 	build/inc/upnpconfig.h \ | 	build/inc/upnpconfig.h \ | ||||||
| 	build/msvc/inttypes.h \ | 	build/msvc/inttypes.h | ||||||
| 	build/msvc/stdint.h \ |  | ||||||
| 	build/vc8/ixml.vcproj \ |  | ||||||
| 	build/vc8/libupnp.sln \ |  | ||||||
| 	build/vc8/libupnp.vcproj \ |  | ||||||
| 	build/vc8/threadutil.vcproj \ |  | ||||||
| 	build/vc8/tvcombo.vcproj \ |  | ||||||
| 	build/vc8/tvctrlpt.vcproj \ |  | ||||||
| 	build/vc8/tvdevice.vcproj \ |  | ||||||
| 	build/vc9/ixml.vcproj \ |  | ||||||
| 	build/vc9/libupnp.sln \ |  | ||||||
| 	build/vc9/libupnp.vcproj \ |  | ||||||
| 	build/vc9/threadutil.vcproj \ |  | ||||||
| 	build/vc9/tvcombo.vcproj \ |  | ||||||
| 	build/vc9/tvctrlpt.vcproj \ |  | ||||||
| 	build/vc9/tvdevice.vcproj  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # This variable must have 'exec' in its name, in order to be installed  | # This variable must have 'exec' in its name, in order to be installed  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								README
									
									
									
									
									
								
							| @@ -1,7 +1,7 @@ | |||||||
| Portable SDK for UPnP* Devices (libupnp) | Portable SDK for UPnP* Devices (libupnp) | ||||||
|  |  | ||||||
| Copyright (c) 2000-2003 Intel Corporation - All Rights Reserved. | Copyright (c) 2000-2003 Intel Corporation - All Rights Reserved. | ||||||
| Copyright (c) 2005-2006 Rémi Turboult <r3mi@users.sourceforge.net> | Copyright (c) 2005-2006 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| Copyright (c) 2006 Michel Pfeiffer and others <virtual_worlds@gmx.de> | Copyright (c) 2006 Michel Pfeiffer and others <virtual_worlds@gmx.de> | ||||||
|  |  | ||||||
| See LICENSE for details. | See LICENSE for details. | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								THANKS
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								THANKS
									
									
									
									
									
								
							| @@ -6,53 +6,31 @@ suggesting various improvements or submitting actual code. | |||||||
| Here is a list of these people. Help us keep it complete and | Here is a list of these people. Help us keep it complete and | ||||||
| exempt of errors. | exempt of errors. | ||||||
|  |  | ||||||
| - Alex (afaucher) |  | ||||||
| - Andre Sodermans (wienerschnitzel) |  | ||||||
| - Anthony Viallard (homer242) |  | ||||||
| - Apostolos Syropoulos |  | ||||||
| - Arno Willig | - Arno Willig | ||||||
| - Bob Ciora | - Bob Ciora | ||||||
| - Carlo Parata |  | ||||||
| - Chandra (inactiveneurons) |  | ||||||
| - Chaos | - Chaos | ||||||
| - Charles Nepveu (cnepveu) |  | ||||||
| - Chris Pickel |  | ||||||
| - Chuck Thomason (cyt4) |  | ||||||
| - Craig Nelson | - Craig Nelson | ||||||
| - David Maass | - David Maass | ||||||
| - Emil Ljungdahl | - Emil Ljungdahl | ||||||
| - Erik Johansson | - Erik Johansson | ||||||
| - Eric Tanguy | - Eric Tanguy | ||||||
| - Erwan Velu | - Erwan Velu | ||||||
| - Eugene Christensen |  | ||||||
| - Fabrice Fontaine |  | ||||||
| - Fredrik Svensson | - Fredrik Svensson | ||||||
| - Glen Masgai | - Glen Masgai | ||||||
| - Hartmut Holzgraefe - hholzgra |  | ||||||
| - Ingo Hofmann |  | ||||||
| - Jiri Zouhar | - Jiri Zouhar | ||||||
| - John Dennis | - John Dennis | ||||||
| - Jonathan Casiot (no_dice) | - Jonathan (no_dice) | ||||||
| - Josh Carroll |  | ||||||
| - Keith Brindley |  | ||||||
| - Leuk_He | - Leuk_He | ||||||
| - Loigu | - Loigu | ||||||
| - Luke Kim (nereusuj) | - Luke Kim | ||||||
| - Marcelo Roberto Jimenez (mroberto) | - Marcelo Roberto Jimenez | ||||||
| - Markus Strobl | - Markus Strobl | ||||||
| - Nektarios K. Papadopoulos (npapadop) | - Nektarios K. Papadopoulos | ||||||
| - Nicholas Kraft |  | ||||||
| - Nick Leverton (leveret) |  | ||||||
| - Oskar Liljeblad | - Oskar Liljeblad | ||||||
| - Michael (oxygenic) | - Michael (Oxy) | ||||||
| - Paul Vixie | - Paul Vixie | ||||||
| - Peter Hartley |  | ||||||
| - Rene Hexel | - Rene Hexel | ||||||
| - Robert Gingher (robsbox) |  | ||||||
| - Ronan Menard |  | ||||||
| - Siva Chandran | - Siva Chandran | ||||||
| - Stéphane Corthésy |  | ||||||
| - Steve Bresson |  | ||||||
| - Timothy Redaelli | - Timothy Redaelli | ||||||
| - Titus Winters | - Titus Winters | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,214 +1,148 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved. | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met: | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice, | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice, | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution. | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  * | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #ifndef INTERNAL_CONFIG_H | #ifndef INTERNAL_CONFIG_H | ||||||
| #define INTERNAL_CONFIG_H  | #define INTERNAL_CONFIG_H  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "autoconfig.h" | #include "autoconfig.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /** @name Compile time configuration options | ||||||
|  *  \name Compile time configuration options |  | ||||||
|  * |  | ||||||
|  *  The Linux SDK for UPnP Devices contains some compile-time parameters  |  *  The Linux SDK for UPnP Devices contains some compile-time parameters  | ||||||
|  *  that effect the behavior of the SDK.  All configuration options are  |  *  that effect the behavior of the SDK.  All configuration options are  | ||||||
|  *  located in {\tt src/inc/config.h}. |  *  located in {\tt src/inc/config.h}. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|   |   | ||||||
|  | //@{ | ||||||
|  |  | ||||||
| /*! | /** @name THREAD_IDLE_TIME | ||||||
|  *  \name THREAD_IDLE_TIME |  | ||||||
|  * |  | ||||||
|  *  The {\tt THREAD_IDLE_TIME} constant determines when a thread will be |  *  The {\tt THREAD_IDLE_TIME} constant determines when a thread will be | ||||||
|  *  removed from the thread pool and returned to the operating system. When  |  *  removed from the thread pool and returned to the operating system. When  | ||||||
|  *  a thread in the thread pool has been idle for this number of milliseconds |  *  a thread in the thread pool has been idle for this number of milliseconds | ||||||
|  *  the thread will be released from the thread pool.  The default value is |  *  the thread will be released from the thread pool.  The default value is | ||||||
|  *  5000 milliseconds (5 seconds). |  *  5000 milliseconds (5 seconds). | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define THREAD_IDLE_TIME 5000 | #define THREAD_IDLE_TIME 5000 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name JOBS_PER_THREAD | ||||||
| /*! |  *  The {\tt JOBS_PER_THREAD} constant determines when a new thread will be | ||||||
|  * \name JOBS_PER_THREAD |  *  allocated to the thread pool inside the  SDK. The thread pool will | ||||||
|  * |  *  try and maintain this jobs/thread ratio. When the jobs/thread ratio  | ||||||
|  * The {\tt JOBS_PER_THREAD} constant determines when a new thread will be |  *  becomes greater than this, then a new thread (up to the max) will be  | ||||||
|  * allocated to the thread pool inside the  SDK. The thread pool will |  *  allocated to the thread pool.  The default ratio is 10 jobs/thread. | ||||||
|  * try and maintain this jobs/thread ratio. When the jobs/thread ratio  |  | ||||||
|  * becomes greater than this, then a new thread (up to the max) will be  |  | ||||||
|  * allocated to the thread pool.  The default ratio is 10 jobs/thread. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define JOBS_PER_THREAD 10 | #define JOBS_PER_THREAD 10 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MIN_THREADS | ||||||
| /*! |  *  The {\tt MIN_THREADS} constant defines the minimum number of threads the | ||||||
|  * \name MIN_THREADS |  *  thread pool inside the SDK will create.  The thread pool will | ||||||
|  * |  *  always have this number of threads. These threads are used | ||||||
|  * The {\tt MIN_THREADS} constant defines the minimum number of threads the |  *  for both callbacks into applications built on top of the SDK and also | ||||||
|  * thread pool inside the SDK will create.  The thread pool will |  *  for making connections to other control points and devices. This number | ||||||
|  * always have this number of threads. These threads are used |  *  includes persistent threads.  The default value is two threads. | ||||||
|  * for both callbacks into applications built on top of the SDK and also |  | ||||||
|  * for making connections to other control points and devices. This number |  | ||||||
|  * includes persistent threads.  The default value is two threads. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MIN_THREADS 2  | #define MIN_THREADS 2  | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MAX_THREADS | ||||||
| /*! |  *  The {\tt MAX_THREADS} constant defines the maximum number of threads the | ||||||
|  * \name MAX_THREADS |  *  thread pool inside the SDK will create.  These threads are used | ||||||
|  * |  *  for both callbacks into applications built on top of the library and also  | ||||||
|  * The {\tt MAX_THREADS} constant defines the maximum number of threads the |  *  for making connections to other control points and devices.  It is not  | ||||||
|  * thread pool inside the SDK will create.  These threads are used |  *  recommended that this value be below 10, since the threads are  | ||||||
|  * for both callbacks into applications built on top of the library and also  |  *  necessary for correct operation.  This value can be increased for greater | ||||||
|  * for making connections to other control points and devices.  It is not  |  *  performance in operation at the expense of greater memory overhead.  The  | ||||||
|  * recommended that this value be below 10, since the threads are  |  *  default value is 12. | ||||||
|  * necessary for correct operation.  This value can be increased for greater |  | ||||||
|  * performance in operation at the expense of greater memory overhead.  The  |  | ||||||
|  * default value is 12. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MAX_THREADS 12  | #define MAX_THREADS 12  | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MAX_JOBS_TOTAL | ||||||
| /*! |  | ||||||
|  * \name THREAD_STACK_SIZE |  | ||||||
|  * |  | ||||||
|  * The {\tt THREAD_STACK_SIZE} constant defines the minimum stack size (in |  | ||||||
|  * bytes) allocated for the stack of each thread the thread pool inside the |  | ||||||
|  * SDK will create.  These threads are used for both callbacks into |  | ||||||
|  * applications built on top of the library and also for making connections |  | ||||||
|  * to other control points and devices.  This value will not be used if it |  | ||||||
|  * is lower than ITHREAD_STACK_MIN or greater than a system-imposed limit. |  | ||||||
|  * This value can be used to lower memory overhead in embedded systems. |  | ||||||
|  * The default value is 0 (so it is not used by default). |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define THREAD_STACK_SIZE 0 |  | ||||||
| /* @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! \name MAX_JOBS_TOTAL |  | ||||||
|  * |  | ||||||
|  *  The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs |  *  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 |  *  that can be queued. If this limit is reached further jobs will be thrown | ||||||
|  *  to avoid memory exhaustion. The default value 100. |  *  to avoid memory exhaustion. The default value 100. | ||||||
|  *  (Added by Axis.) |  *  (Added by Axis.) | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MAX_JOBS_TOTAL 100 | #define MAX_JOBS_TOTAL 100 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name DEFAULT_SOAP_CONTENT_LENGTH | ||||||
| /*! |  | ||||||
|  * \name DEFAULT_SOAP_CONTENT_LENGTH |  | ||||||
|  * |  | ||||||
|  * SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.   |  * SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.   | ||||||
|  * This prevents devices that have a misbehaving web server to send  |  * This prevents devices that have a misbehaving web server to send  | ||||||
|  * a large amount of data to the control point causing it to crash.   |  * a large amount of data to the control point causing it to crash.   | ||||||
|  * This can be adjusted dynamically with {\tt UpnpSetMaxContentLength}. |  * This can be adjusted dynamically with {\tt UpnpSetMaxContentLength}. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define DEFAULT_SOAP_CONTENT_LENGTH 16000 | #define DEFAULT_SOAP_CONTENT_LENGTH 16000 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name NUM_SSDP_COPY | ||||||
| /*! |  | ||||||
|  * \name NUM_SSDP_COPY |  | ||||||
|  * |  | ||||||
|  * This configuration parameter determines how many copies of each SSDP  |  * This configuration parameter determines how many copies of each SSDP  | ||||||
|  * advertisement and search packets will be sent. By default it will send two  |  * advertisement and search packets will be sent. By default it will send two  | ||||||
|  * copies of every packet.   |  * copies of every packet.   | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define NUM_SSDP_COPY  2 | #define NUM_SSDP_COPY  2 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name SSDP_PAUSE | ||||||
| /*! |  | ||||||
|  * \name SSDP_PAUSE |  | ||||||
|  * |  | ||||||
|  * This configuration parameter determines the pause between identical SSDP  |  * This configuration parameter determines the pause between identical SSDP  | ||||||
|  * advertisement and search packets. The pause is measured in milliseconds |  * advertisement and search packets. The pause is measured in milliseconds | ||||||
|  * and defaults to 100. |  * and defaults to 100. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define SSDP_PAUSE  100 | #define SSDP_PAUSE  100 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
| /*! | /** @name WEB_SERVER_BUF_SIZE  | ||||||
|  * \name WEB_SERVER_BUF_SIZE |  | ||||||
|  *  |  | ||||||
|  * This configuration parameter sets the maximum buffer size for the  |  * This configuration parameter sets the maximum buffer size for the  | ||||||
|  * webserver. The default value is 1MB. |  * webserver.  The default value is 1MB. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define WEB_SERVER_BUF_SIZE  (1024*1024) | #define WEB_SERVER_BUF_SIZE  (1024*1024) | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
| /*! | /** @name AUTO_RENEW_TIME | ||||||
|  * \name WEB_SERVER_CONTENT_LANGUAGE |  | ||||||
|  * |  | ||||||
|  * This configuration parameter sets the value of the Content-Language |  | ||||||
|  * header for the webserver. Thanks to this parameter, the use can advertize |  | ||||||
|  * the language used by the device in the description (friendlyName) and |  | ||||||
|  * presentation steps of UPnP. The default value is empty string so no |  | ||||||
|  * Content-Language header is added. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define WEB_SERVER_CONTENT_LANGUAGE "" |  | ||||||
| /* @} */ |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \name AUTO_RENEW_TIME |  | ||||||
|  * |  | ||||||
|  * The {\tt AUTO_RENEW_TIME} is the time, in seconds, before a subscription |  * The {\tt AUTO_RENEW_TIME} is the time, in seconds, before a subscription | ||||||
|  * expires that the SDK automatically resubscribes.  The default  |  * expires that the SDK automatically resubscribes.  The default  | ||||||
|  * value is 10 seconds.  Setting this value too low can result in the  |  * value is 10 seconds.  Setting this value too low can result in the  | ||||||
| @@ -216,104 +150,89 @@ | |||||||
|  * subscription to timeout. In order to avoid continually resubscribing |  * subscription to timeout. In order to avoid continually resubscribing | ||||||
|  * the minimum subscription time is five seconds more than the auto renew |  * the minimum subscription time is five seconds more than the auto renew | ||||||
|  * time. |  * time. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
| #define AUTO_RENEW_TIME 10 |  | ||||||
| /* @} */ |  | ||||||
|  |  | ||||||
| /*! | //@{ | ||||||
|  * \name CP_MINIMUM_SUBSCRIPTION_TIME | #define AUTO_RENEW_TIME 10 | ||||||
|  * | //@} | ||||||
|  |  | ||||||
|  | /** @name CP_MINIMUM_SUBSCRIPTION_TIME  | ||||||
|  * The {\tt CP_MINIMUM_SUBSCRIPTION_TIME} is the minimum subscription time |  * The {\tt CP_MINIMUM_SUBSCRIPTION_TIME} is the minimum subscription time | ||||||
|  * allowed for a control point using the SDK. Subscribing for less than |  * allowed for a control point using the SDK. Subscribing for less than | ||||||
|  * this time automatically results in a subscription for this amount.  The  |  * this time automatically results in a subscription for this amount.  The  | ||||||
|  * default value is 5 seconds more than the {\tt AUTO_RENEW_TIME}, or 15 |  * default value is 5 seconds more than the {\tt AUTO_RENEW_TIME}, or 15 | ||||||
|  * seconds. |  * seconds. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define CP_MINIMUM_SUBSCRIPTION_TIME (AUTO_RENEW_TIME + 5) | #define CP_MINIMUM_SUBSCRIPTION_TIME (AUTO_RENEW_TIME + 5) | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MAX_SEARCH_TIME  | ||||||
| /*! |  | ||||||
|  * \name MAX_SEARCH_TIME |  | ||||||
|  * |  | ||||||
|  * The {\tt MAX_SEARCH_TIME} is the maximum time |  * The {\tt MAX_SEARCH_TIME} is the maximum time | ||||||
|  * allowed for an SSDP search by a control point. Searching for greater than |  * allowed for an SSDP search by a control point. Searching for greater than | ||||||
|  * this time automatically results in a search for this amount.  The default  |  * this time automatically results in a search for this amount.  The default  | ||||||
|  * value is 80 seconds. |  * value is 80 seconds. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MAX_SEARCH_TIME 80 | #define MAX_SEARCH_TIME 80 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MIN_SEARCH_TIME  | ||||||
| /*! |  | ||||||
|  * \name MIN_SEARCH_TIME |  | ||||||
|  * |  | ||||||
|  * The {\tt MIN_SEARCH_TIME} is the minimumm time |  * The {\tt MIN_SEARCH_TIME} is the minimumm time | ||||||
|  * allowed for an SSDP search by a control point. Searching for less than |  * allowed for an SSDP search by a control point. Searching for less than | ||||||
|  * this time automatically results in a search for this amount.  The default  |  * this time automatically results in a search for this amount.  The default  | ||||||
|  * value is 2 seconds. |  * value is 2 seconds. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MIN_SEARCH_TIME 2 | #define MIN_SEARCH_TIME 2 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /** @name AUTO_ADVERTISEMENT_TIME | ||||||
|  * \name AUTO_ADVERTISEMENT_TIME |  *  The {\tt AUTO_ADVERTISEMENT_TIME} is the time, in seconds, before an | ||||||
|  * |  *  device advertisements expires before a renewed advertisement is sent. | ||||||
|  * The {\tt AUTO_ADVERTISEMENT_TIME} is the time, in seconds, before an |  *  The default time is 30 seconds. | ||||||
|  * device advertisements expires before a renewed advertisement is sent. |  | ||||||
|  * The default time is 30 seconds. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define AUTO_ADVERTISEMENT_TIME 30 | #define AUTO_ADVERTISEMENT_TIME 30 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name SSDP_PACKET_DISTRIBUTE | ||||||
| /*! |  *  The {\tt SSDP_PACKET_DISTRIBUTE} enables the SSDP packets to be sent | ||||||
|  * \name SSDP_PACKET_DISTRIBUTE |  *  at an interval equal to half of the expiration time of SSDP packets | ||||||
|  * |  *  minus the AUTO_ADVERTISEMENT_TIME. This is used to increase | ||||||
|  * The {\tt SSDP_PACKET_DISTRIBUTE} enables the SSDP packets to be sent |  *  the probability of SSDP packets reaching to control points. | ||||||
|  * at an interval equal to half of the expiration time of SSDP packets |  *  It is recommended that this flag be turned on for embedded wireless  | ||||||
|  * minus the AUTO_ADVERTISEMENT_TIME. This is used to increase |  *  devices. | ||||||
|  * the probability of SSDP packets reaching to control points. |  | ||||||
|  * It is recommended that this flag be turned on for embedded wireless  |  | ||||||
|  * devices. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define SSDP_PACKET_DISTRIBUTE 1 | #define SSDP_PACKET_DISTRIBUTE 1 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name Module Exclusion | ||||||
| /*! |  *  Depending on the requirements, the user can selectively discard any of  | ||||||
|  * \name Module Exclusion |  *  the major modules like SOAP, GENA, SSDP or the Internal web server. By  | ||||||
|  |  *  default everything is included inside the SDK.  By setting any of | ||||||
|  |  *  the values below to 0, that component will not be included in the final | ||||||
|  |  *  SDK. | ||||||
|  |  *  \begin{itemize} | ||||||
|  |  *    \item {\tt EXCLUDE_SOAP[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_GENA[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_SSDP[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_DOM [0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_MINISERVER[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_WEB_SERVER[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_JNI[0,1]} | ||||||
|  |  *  \end{itemize} | ||||||
|  * |  * | ||||||
|  * Depending on the requirements, the user can selectively discard any of  |  | ||||||
|  * the major modules like SOAP, GENA, SSDP or the Internal web server. By  |  | ||||||
|  * default everything is included inside the SDK.  By setting any of |  | ||||||
|  * the values below to 0, that component will not be included in the final |  | ||||||
|  * SDK. |  | ||||||
|  * \begin{itemize} |  | ||||||
|  *   \item {\tt EXCLUDE_SOAP[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_GENA[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_SSDP[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_DOM [0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_MINISERVER[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_WEB_SERVER[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_JNI[0,1]} |  | ||||||
|  * \end{itemize} |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define EXCLUDE_SSDP 0 | #define EXCLUDE_SSDP 0 | ||||||
| #define EXCLUDE_SOAP 0 | #define EXCLUDE_SOAP 0 | ||||||
| #define EXCLUDE_GENA 0 | #define EXCLUDE_GENA 0 | ||||||
| @@ -325,28 +244,24 @@ | |||||||
| #else | #else | ||||||
| #	define EXCLUDE_JNI 1 | #	define EXCLUDE_JNI 1 | ||||||
| #endif | #endif | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|      |      | ||||||
| /*! | /** @name DEBUG_TARGET | ||||||
|  * \name DEBUG_TARGET |  *  The user has the option to redirect the library output debug messages  | ||||||
|  * |  *  to either the screen or to a log file.  All the output messages with  | ||||||
|  * The user has the option to redirect the library output debug messages  |  *  debug level 0 will go to {\tt upnp.err} and messages with debug level  | ||||||
|  * to either the screen or to a log file.  All the output messages with  |  *  greater than zero will be redirected to {\tt upnp.out}. | ||||||
|  * debug level 0 will go to {\tt upnp.err} and messages with debug level  |  | ||||||
|  * greater than zero will be redirected to {\tt upnp.out}. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define DEBUG_TARGET		1    | #define DEBUG_TARGET		1    | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /** @name Other debugging features | ||||||
|  * \name Other debugging features |           The UPnP SDK contains other features to aid in debugging: | ||||||
|  * | 	  see <upnp/upnpdebug.h> | ||||||
|  * The UPnP SDK contains other features to aid in debugging: |  | ||||||
|  * see <upnp/inc/upnpdebug.h> |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #define DEBUG_ALL		1    | #define DEBUG_ALL		1    | ||||||
| @@ -359,44 +274,36 @@ | |||||||
| #define DEBUG_HTTP		0 | #define DEBUG_HTTP		0 | ||||||
| #define DEBUG_API		0     | #define DEBUG_API		0     | ||||||
|  |  | ||||||
|  | //@} // Compile time configuration options | ||||||
| /* |  | ||||||
|  * @} Compile time configuration options |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*************************************************************************** | /*************************************************************************** | ||||||
|  * Do not change, Internal purpose only!!!  |  * Do not change, Internal purpose only!!!  | ||||||
|  ***************************************************************************/  |  ***************************************************************************/  | ||||||
|  |  | ||||||
| /*! | //@{ | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Set additional defines based on requested configuration  |  * Set additional defines based on requested configuration  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | // configure --enable-client | ||||||
| /* configure --enable-client */ |  | ||||||
| #if UPNP_HAVE_CLIENT | #if UPNP_HAVE_CLIENT | ||||||
| #	define INCLUDE_CLIENT_APIS	1 | #	define INCLUDE_CLIENT_APIS	1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // configure --enable-device | ||||||
| /* configure --enable-device */ |  | ||||||
| #if UPNP_HAVE_DEVICE | #if UPNP_HAVE_DEVICE | ||||||
| #	define INCLUDE_DEVICE_APIS	1 | #	define INCLUDE_DEVICE_APIS	1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // configure --enable-webserver --enable-device | ||||||
| /* configure --enable-webserver --enable-device */ |  | ||||||
| #if UPNP_HAVE_WEBSERVER | #if UPNP_HAVE_WEBSERVER | ||||||
| #	define INTERNAL_WEB_SERVER	1 | #	define INTERNAL_WEB_SERVER	1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #undef  EXCLUDE_WEB_SERVER  | #undef  EXCLUDE_WEB_SERVER  | ||||||
| #undef  EXCLUDE_MINISERVER  | #undef  EXCLUDE_MINISERVER  | ||||||
| #ifdef  INTERNAL_WEB_SERVER | #ifdef  INTERNAL_WEB_SERVER | ||||||
| @@ -407,7 +314,6 @@ | |||||||
| #	define EXCLUDE_MINISERVER 1 | #	define EXCLUDE_MINISERVER 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #if EXCLUDE_GENA == 1 && EXCLUDE_SOAP == 1 && EXCLUDE_WEB_SERVER == 1 | #if EXCLUDE_GENA == 1 && EXCLUDE_SOAP == 1 && EXCLUDE_WEB_SERVER == 1 | ||||||
| #	undef  EXCLUDE_MINISERVER  | #	undef  EXCLUDE_MINISERVER  | ||||||
| #	define EXCLUDE_MINISERVER 1 | #	define EXCLUDE_MINISERVER 1 | ||||||
| @@ -416,7 +322,6 @@ | |||||||
| #	endif | #	endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #if EXCLUDE_GENA == 0 || EXCLUDE_SOAP == 0 || EXCLUDE_WEB_SERVER == 0 | #if EXCLUDE_GENA == 0 || EXCLUDE_SOAP == 0 || EXCLUDE_WEB_SERVER == 0 | ||||||
| #	undef  EXCLUDE_MINISERVER  | #	undef  EXCLUDE_MINISERVER  | ||||||
| #	define EXCLUDE_MINISERVER 0 | #	define EXCLUDE_MINISERVER 0 | ||||||
| @@ -426,9 +331,13 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * @} |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #endif /* INTERNAL_CONFIG_H */ | #ifdef INCLUDE_CLIENT_APIS | ||||||
|  | #	define CLIENTONLY(x) x | ||||||
|  | #else  | ||||||
|  | #	define CLIENTONLY(x) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | //@} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,222 +0,0 @@ | |||||||
| // ISO C9x  compliant stdint.h for Microsoft Visual Studio |  | ||||||
| // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124  |  | ||||||
| //  |  | ||||||
| //  Copyright (c) 2006 Alexander Chemeris |  | ||||||
| //  |  | ||||||
| // Redistribution and use in source and binary forms, with or without |  | ||||||
| // modification, are permitted provided that the following conditions are met: |  | ||||||
| //  |  | ||||||
| //   1. Redistributions of source code must retain the above copyright notice, |  | ||||||
| //      this list of conditions and the following disclaimer. |  | ||||||
| //  |  | ||||||
| //   2. Redistributions in binary form must reproduce the above copyright |  | ||||||
| //      notice, this list of conditions and the following disclaimer in the |  | ||||||
| //      documentation and/or other materials provided with the distribution. |  | ||||||
| //  |  | ||||||
| //   3. The name of the author may be used to endorse or promote products |  | ||||||
| //      derived from this software without specific prior written permission. |  | ||||||
| //  |  | ||||||
| // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |  | ||||||
| // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |  | ||||||
| // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |  | ||||||
| // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |  | ||||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |  | ||||||
| // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |  | ||||||
| // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  |  | ||||||
| // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |  | ||||||
| // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |  | ||||||
| // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
| //  |  | ||||||
| /////////////////////////////////////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
| #ifndef _MSC_VER // [ |  | ||||||
| #error "Use this header only with Microsoft Visual C++ compilers!" |  | ||||||
| #endif // _MSC_VER ] |  | ||||||
|  |  | ||||||
| #ifndef _MSC_STDINT_H_ // [ |  | ||||||
| #define _MSC_STDINT_H_ |  | ||||||
|  |  | ||||||
| #if _MSC_VER > 1000 |  | ||||||
| #pragma once |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include <limits.h> |  | ||||||
|  |  | ||||||
| // For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}' |  | ||||||
| // or compiler give many errors like this: |  | ||||||
| //   error C2733: second C linkage of overloaded function 'wmemchr' not allowed |  | ||||||
| #if (_MSC_VER < 1300) && defined(__cplusplus) |  | ||||||
|    extern "C++" { |  | ||||||
| #endif  |  | ||||||
| #     include <wchar.h> |  | ||||||
| #if (_MSC_VER < 1300) && defined(__cplusplus) |  | ||||||
|    } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| // 7.18.1 Integer types |  | ||||||
|  |  | ||||||
| // 7.18.1.1 Exact-width integer types |  | ||||||
| typedef __int8            int8_t; |  | ||||||
| typedef __int16           int16_t; |  | ||||||
| typedef __int32           int32_t; |  | ||||||
| typedef __int64           int64_t; |  | ||||||
| typedef unsigned __int8   uint8_t; |  | ||||||
| typedef unsigned __int16  uint16_t; |  | ||||||
| typedef unsigned __int32  uint32_t; |  | ||||||
| typedef unsigned __int64  uint64_t; |  | ||||||
|  |  | ||||||
| // 7.18.1.2 Minimum-width integer types |  | ||||||
| typedef int8_t    int_least8_t; |  | ||||||
| typedef int16_t   int_least16_t; |  | ||||||
| typedef int32_t   int_least32_t; |  | ||||||
| typedef int64_t   int_least64_t; |  | ||||||
| typedef uint8_t   uint_least8_t; |  | ||||||
| typedef uint16_t  uint_least16_t; |  | ||||||
| typedef uint32_t  uint_least32_t; |  | ||||||
| typedef uint64_t  uint_least64_t; |  | ||||||
|  |  | ||||||
| // 7.18.1.3 Fastest minimum-width integer types |  | ||||||
| typedef int8_t    int_fast8_t; |  | ||||||
| typedef int16_t   int_fast16_t; |  | ||||||
| typedef int32_t   int_fast32_t; |  | ||||||
| typedef int64_t   int_fast64_t; |  | ||||||
| typedef uint8_t   uint_fast8_t; |  | ||||||
| typedef uint16_t  uint_fast16_t; |  | ||||||
| typedef uint32_t  uint_fast32_t; |  | ||||||
| typedef uint64_t  uint_fast64_t; |  | ||||||
|  |  | ||||||
| // 7.18.1.4 Integer types capable of holding object pointers |  | ||||||
| #ifdef _WIN64 // [ |  | ||||||
|    typedef __int64           intptr_t; |  | ||||||
|    typedef unsigned __int64  uintptr_t; |  | ||||||
| #else // _WIN64 ][ |  | ||||||
|    typedef int               intptr_t; |  | ||||||
|    typedef unsigned int      uintptr_t; |  | ||||||
| #endif // _WIN64 ] |  | ||||||
|  |  | ||||||
| // 7.18.1.5 Greatest-width integer types |  | ||||||
| typedef int64_t   intmax_t; |  | ||||||
| typedef uint64_t  uintmax_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // 7.18.2 Limits of specified-width integer types |  | ||||||
|  |  | ||||||
| #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259 |  | ||||||
|  |  | ||||||
| // 7.18.2.1 Limits of exact-width integer types |  | ||||||
| #define INT8_MIN     ((int8_t)_I8_MIN) |  | ||||||
| #define INT8_MAX     _I8_MAX |  | ||||||
| #define INT16_MIN    ((int16_t)_I16_MIN) |  | ||||||
| #define INT16_MAX    _I16_MAX |  | ||||||
| #define INT32_MIN    ((int32_t)_I32_MIN) |  | ||||||
| #define INT32_MAX    _I32_MAX |  | ||||||
| #define INT64_MIN    ((int64_t)_I64_MIN) |  | ||||||
| #define INT64_MAX    _I64_MAX |  | ||||||
| #define UINT8_MAX    _UI8_MAX |  | ||||||
| #define UINT16_MAX   _UI16_MAX |  | ||||||
| #define UINT32_MAX   _UI32_MAX |  | ||||||
| #define UINT64_MAX   _UI64_MAX |  | ||||||
|  |  | ||||||
| // 7.18.2.2 Limits of minimum-width integer types |  | ||||||
| #define INT_LEAST8_MIN    INT8_MIN |  | ||||||
| #define INT_LEAST8_MAX    INT8_MAX |  | ||||||
| #define INT_LEAST16_MIN   INT16_MIN |  | ||||||
| #define INT_LEAST16_MAX   INT16_MAX |  | ||||||
| #define INT_LEAST32_MIN   INT32_MIN |  | ||||||
| #define INT_LEAST32_MAX   INT32_MAX |  | ||||||
| #define INT_LEAST64_MIN   INT64_MIN |  | ||||||
| #define INT_LEAST64_MAX   INT64_MAX |  | ||||||
| #define UINT_LEAST8_MAX   UINT8_MAX |  | ||||||
| #define UINT_LEAST16_MAX  UINT16_MAX |  | ||||||
| #define UINT_LEAST32_MAX  UINT32_MAX |  | ||||||
| #define UINT_LEAST64_MAX  UINT64_MAX |  | ||||||
|  |  | ||||||
| // 7.18.2.3 Limits of fastest minimum-width integer types |  | ||||||
| #define INT_FAST8_MIN    INT8_MIN |  | ||||||
| #define INT_FAST8_MAX    INT8_MAX |  | ||||||
| #define INT_FAST16_MIN   INT16_MIN |  | ||||||
| #define INT_FAST16_MAX   INT16_MAX |  | ||||||
| #define INT_FAST32_MIN   INT32_MIN |  | ||||||
| #define INT_FAST32_MAX   INT32_MAX |  | ||||||
| #define INT_FAST64_MIN   INT64_MIN |  | ||||||
| #define INT_FAST64_MAX   INT64_MAX |  | ||||||
| #define UINT_FAST8_MAX   UINT8_MAX |  | ||||||
| #define UINT_FAST16_MAX  UINT16_MAX |  | ||||||
| #define UINT_FAST32_MAX  UINT32_MAX |  | ||||||
| #define UINT_FAST64_MAX  UINT64_MAX |  | ||||||
|  |  | ||||||
| // 7.18.2.4 Limits of integer types capable of holding object pointers |  | ||||||
| #ifdef _WIN64 // [ |  | ||||||
| #  define INTPTR_MIN   INT64_MIN |  | ||||||
| #  define INTPTR_MAX   INT64_MAX |  | ||||||
| #  define UINTPTR_MAX  UINT64_MAX |  | ||||||
| #else // _WIN64 ][ |  | ||||||
| #  define INTPTR_MIN   INT32_MIN |  | ||||||
| #  define INTPTR_MAX   INT32_MAX |  | ||||||
| #  define UINTPTR_MAX  UINT32_MAX |  | ||||||
| #endif // _WIN64 ] |  | ||||||
|  |  | ||||||
| // 7.18.2.5 Limits of greatest-width integer types |  | ||||||
| #define INTMAX_MIN   INT64_MIN |  | ||||||
| #define INTMAX_MAX   INT64_MAX |  | ||||||
| #define UINTMAX_MAX  UINT64_MAX |  | ||||||
|  |  | ||||||
| // 7.18.3 Limits of other integer types |  | ||||||
|  |  | ||||||
| #ifdef _WIN64 // [ |  | ||||||
| #  define PTRDIFF_MIN  _I64_MIN |  | ||||||
| #  define PTRDIFF_MAX  _I64_MAX |  | ||||||
| #else  // _WIN64 ][ |  | ||||||
| #  define PTRDIFF_MIN  _I32_MIN |  | ||||||
| #  define PTRDIFF_MAX  _I32_MAX |  | ||||||
| #endif  // _WIN64 ] |  | ||||||
|  |  | ||||||
| #define SIG_ATOMIC_MIN  INT_MIN |  | ||||||
| #define SIG_ATOMIC_MAX  INT_MAX |  | ||||||
|  |  | ||||||
| #ifndef SIZE_MAX // [ |  | ||||||
| #  ifdef _WIN64 // [ |  | ||||||
| #     define SIZE_MAX  _UI64_MAX |  | ||||||
| #  else // _WIN64 ][ |  | ||||||
| #     define SIZE_MAX  _UI32_MAX |  | ||||||
| #  endif // _WIN64 ] |  | ||||||
| #endif // SIZE_MAX ] |  | ||||||
|  |  | ||||||
| // WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h> |  | ||||||
| #ifndef WCHAR_MIN // [ |  | ||||||
| #  define WCHAR_MIN  0 |  | ||||||
| #endif  // WCHAR_MIN ] |  | ||||||
| #ifndef WCHAR_MAX // [ |  | ||||||
| #  define WCHAR_MAX  _UI16_MAX |  | ||||||
| #endif  // WCHAR_MAX ] |  | ||||||
|  |  | ||||||
| #define WINT_MIN  0 |  | ||||||
| #define WINT_MAX  _UI16_MAX |  | ||||||
|  |  | ||||||
| #endif // __STDC_LIMIT_MACROS ] |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // 7.18.4 Limits of other integer types |  | ||||||
|  |  | ||||||
| #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260 |  | ||||||
|  |  | ||||||
| // 7.18.4.1 Macros for minimum-width integer constants |  | ||||||
|  |  | ||||||
| #define INT8_C(val)  val##i8 |  | ||||||
| #define INT16_C(val) val##i16 |  | ||||||
| #define INT32_C(val) val##i32 |  | ||||||
| #define INT64_C(val) val##i64 |  | ||||||
|  |  | ||||||
| #define UINT8_C(val)  val##ui8 |  | ||||||
| #define UINT16_C(val) val##ui16 |  | ||||||
| #define UINT32_C(val) val##ui32 |  | ||||||
| #define UINT64_C(val) val##ui64 |  | ||||||
|  |  | ||||||
| // 7.18.4.2 Macros for greatest-width integer constants |  | ||||||
| #define INTMAX_C   INT64_C |  | ||||||
| #define UINTMAX_C  UINT64_C |  | ||||||
|  |  | ||||||
| #endif // __STDC_CONSTANT_MACROS ] |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif // _MSC_STDINT_H_ ] |  | ||||||
| @@ -1,217 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="8.00" |  | ||||||
| 	Name="ixml" |  | ||||||
| 	ProjectGUID="{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}" |  | ||||||
| 	RootNamespace="ixml" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="4" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc;..\..\upnp\inc" |  | ||||||
| 				PreprocessorDefinitions="WIN32;DEBUG" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="1" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLibrarianTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="4" |  | ||||||
| 			UseOfMFC="0" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc" |  | ||||||
| 				PreprocessorDefinitions="WIN32;IXML_INLINE=" |  | ||||||
| 				RuntimeLibrary="0" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLibrarianTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\attr.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\document.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\element.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixml.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmldebug.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlmembuf.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlparser.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\namedNodeMap.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\node.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\nodeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\inc\ixml.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\inc\ixmldebug.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\inc\ixmlmembuf.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\inc\ixmlparser.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,65 +0,0 @@ | |||||||
|  |  | ||||||
| Microsoft Visual Studio Solution File, Format Version 9.00 |  | ||||||
| # Visual Studio 2005 |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libupnp", "libupnp.vcproj", "{6227F51A-1498-4C4A-B213-F6FDED605125}" |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "threadutil", "threadutil.vcproj", "{24884928-0501-4CF2-BC8A-180AFC23B2AF}" |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ixml", "ixml.vcproj", "{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}" |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvdevice", "tvdevice.vcproj", "{F592B023-E1F3-4A1E-841E-662DEE497435}" |  | ||||||
| 	ProjectSection(ProjectDependencies) = postProject |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125} |  | ||||||
| 		{24884928-0501-4CF2-BC8A-180AFC23B2AF} = {24884928-0501-4CF2-BC8A-180AFC23B2AF} |  | ||||||
| 		{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} = {AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} |  | ||||||
| 	EndProjectSection |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvctrlpt", "tvctrlpt.vcproj", "{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}" |  | ||||||
| 	ProjectSection(ProjectDependencies) = postProject |  | ||||||
| 		{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} = {AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} |  | ||||||
| 		{24884928-0501-4CF2-BC8A-180AFC23B2AF} = {24884928-0501-4CF2-BC8A-180AFC23B2AF} |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125} |  | ||||||
| 	EndProjectSection |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvcombo", "tvcombo.vcproj", "{B5D74697-F615-4DCB-AA8B-935F6372F01C}" |  | ||||||
| 	ProjectSection(ProjectDependencies) = postProject |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125} |  | ||||||
| 		{24884928-0501-4CF2-BC8A-180AFC23B2AF} = {24884928-0501-4CF2-BC8A-180AFC23B2AF} |  | ||||||
| 		{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} = {AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} |  | ||||||
| 	EndProjectSection |  | ||||||
| EndProject |  | ||||||
| Global |  | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution |  | ||||||
| 		Debug|Win32 = Debug|Win32 |  | ||||||
| 		Release|Win32 = Release|Win32 |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(ProjectConfigurationPlatforms) = postSolution |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{F592B023-E1F3-4A1E-841E-662DEE497435}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{F592B023-E1F3-4A1E-841E-662DEE497435}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{F592B023-E1F3-4A1E-841E-662DEE497435}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{F592B023-E1F3-4A1E-841E-662DEE497435}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(SolutionProperties) = preSolution |  | ||||||
| 		HideSolutionNode = FALSE |  | ||||||
| 	EndGlobalSection |  | ||||||
| EndGlobal |  | ||||||
| @@ -1,654 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="8.00" |  | ||||||
| 	Name="libupnp" |  | ||||||
| 	ProjectGUID="{6227F51A-1498-4C4A-B213-F6FDED605125}" |  | ||||||
| 	RootNamespace="libupnp" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="2" |  | ||||||
| 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops" |  | ||||||
| 			UseOfMFC="0" |  | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="false" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 				PreprocessorDefinitions="NDEBUG" |  | ||||||
| 				MkTypLibCompatible="true" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				TargetEnvironment="1" |  | ||||||
| 				TypeLibraryName=".\Release/libupnp.tlb" |  | ||||||
| 				HeaderFileName="" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="2" |  | ||||||
| 				InlineFunctionExpansion="1" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\pthreads\include;..\..\ixml\src\inc;..\..\ixml\inc;..\..\threadutil\inc;..\..\upnp\inc;..\..\upnp\src\inc;..\inc;..\msvc" |  | ||||||
| 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				StringPooling="true" |  | ||||||
| 				RuntimeLibrary="0" |  | ||||||
| 				EnableFunctionLevelLinking="true" |  | ||||||
| 				PrecompiledHeaderFile=".\Release/libupnp.pch" |  | ||||||
| 				AssemblerListingLocation="$(OutDir)\" |  | ||||||
| 				ObjectFile="$(OutDir)\" |  | ||||||
| 				ProgramDataBaseFileName="$(OutDir)\" |  | ||||||
| 				BrowseInformation="1" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 				PreprocessorDefinitions="NDEBUG" |  | ||||||
| 				Culture="1031" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="odbc32.lib odbccp32.lib ..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib  iphlpapi.lib" |  | ||||||
| 				OutputFile="$(OutDir)\libupnp.dll" |  | ||||||
| 				LinkIncremental="1" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				ProgramDatabaseFile=".\Release/libupnp.pdb" |  | ||||||
| 				ImportLibrary=".\Release/libupnp.lib" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				OutputFile=".\Release/libupnp.bsc" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="2" |  | ||||||
| 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops" |  | ||||||
| 			UseOfMFC="0" |  | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="false" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 				PreprocessorDefinitions="_DEBUG" |  | ||||||
| 				MkTypLibCompatible="true" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				TargetEnvironment="1" |  | ||||||
| 				TypeLibraryName=".\Debug/libupnp.tlb" |  | ||||||
| 				HeaderFileName="" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\pthreads\include;..\..\ixml\src\inc;..\..\ixml\inc;..\..\threadutil\inc;..\..\upnp\inc;..\..\upnp\src\inc;..\inc;..\msvc" |  | ||||||
| 				PreprocessorDefinitions="DEBUG;WIN32;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="1" |  | ||||||
| 				PrecompiledHeaderFile="$(OutDir)\libupnp.pch" |  | ||||||
| 				AssemblerListingLocation="$(OutDir)\" |  | ||||||
| 				ObjectFile="$(OutDir)\" |  | ||||||
| 				ProgramDataBaseFileName="$(OutDir)\" |  | ||||||
| 				BrowseInformation="1" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 				PreprocessorDefinitions="_DEBUG" |  | ||||||
| 				Culture="1031" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib iphlpapi.lib ixml.lib" |  | ||||||
| 				OutputFile="$(OutDir)\libupnp.dll" |  | ||||||
| 				LinkIncremental="2" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				AdditionalLibraryDirectories="$(OutDir)\..\ixml" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				ProgramDatabaseFile="$(OutDir)\libupnp.pdb" |  | ||||||
| 				ImportLibrary="$(OutDir)\libupnp.lib" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				OutputFile="$(OutDir)\libupnp.bsc" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="sources" |  | ||||||
| 			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\ActionComplete.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\ActionRequest.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\attr.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\client_table\client_table.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\Discovery.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\document.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\element.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\Event.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\EventSubscribe.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\FileInfo.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\FreeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\gena\gena_callback2.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\gena\gena_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\gena\gena_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\httpparser.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\httpreadwrite.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inet_pton.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixml.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlmembuf.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlparser.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\LinkedList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\uuid\md5.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\membuffer.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\miniserver\miniserver.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\namedNodeMap.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\node.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\nodeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\parsetools.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\service_table\service_table.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\soap\soap_common.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\soap\soap_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\soap\soap_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\sock.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_server.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\statcodes.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\StateVarComplete.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\StateVarRequest.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\strintmap.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\SubscriptionRequest.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\uuid\sysdep.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\ThreadPool.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\TimerThread.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\upnp_timeout.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\upnpapi.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\upnpdebug.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\UpnpString.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\upnptools.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\uri\uri.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\urlconfig\urlconfig.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\uuid\uuid.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\webserver.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\win_dll.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="headers" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\ActionComplete.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\actionrequest.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\client_table.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\config.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\discovery.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\Event.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\EventSubscribe.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\FileInfo.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gena.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gena_ctrlpt.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gena_device.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\global.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gmtdate.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\http_client.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\httpparser.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\httpreadwrite.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\inet_pton.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\md5.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\membuffer.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\miniserver.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\netall.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\parsetools.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\server.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\service_table.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\soaplib.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\sock.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\ssdplib.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\statcodes.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\StateVarComplete.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\statevarrequest.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\statuscodes.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\strintmap.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\SubscriptionRequest.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\sysdep.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\unixutil.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\upnp.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\upnp_timeout.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\upnpapi.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\upnpclosesocket.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\upnpdebug.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\UpnpString.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\upnptools.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\uri.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\urlconfig.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\utilall.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\uuid.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\webserver.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<File |  | ||||||
| 			RelativePath="..\..\..\..\libupnp_win32.patch" |  | ||||||
| 			> |  | ||||||
| 		</File> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,213 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="8.00" |  | ||||||
| 	Name="threadutil" |  | ||||||
| 	ProjectGUID="{24884928-0501-4CF2-BC8A-180AFC23B2AF}" |  | ||||||
| 	RootNamespace="threadutil" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="4" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\threadutil\inc;..\..\upnp\inc;..\..\ixml\inc;..\..\pthreads\include" |  | ||||||
| 				PreprocessorDefinitions="WIN32;DEBUG" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLibrarianTool" |  | ||||||
| 				AdditionalDependencies="pthreadVC2.lib" |  | ||||||
| 				AdditionalLibraryDirectories="..\..\pthreads\lib" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory="$(SolutionDir)$(ConfigurationName)" |  | ||||||
| 			IntermediateDirectory="$(ConfigurationName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\FreeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\LinkedList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\ThreadPool.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\TimerThread.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\FreeList.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\ithread.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\LinkedList.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\ThreadPool.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\TimerThread.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,216 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="8.00" |  | ||||||
| 	Name="tvcombo" |  | ||||||
| 	ProjectGUID="{B5D74697-F615-4DCB-AA8B-935F6372F01C}" |  | ||||||
| 	RootNamespace="tvcombo" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvcombo;..\..\upnp\sample\tvcombo\linux" |  | ||||||
| 				PreprocessorDefinitions="WIN32;DEBUG" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib" |  | ||||||
| 				AdditionalLibraryDirectories=""$(OutDir)";"out.vc8.$(ConfigurationName)\ixml";"out.vc8.$(ConfigurationName)\threadutil";"out.vc8.$(ConfigurationName)\libupnp"" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory="$(SolutionDir)$(ConfigurationName)" |  | ||||||
| 			IntermediateDirectory="$(ConfigurationName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\linux\upnp_tv_combo_main.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,208 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="8.00" |  | ||||||
| 	Name="tvctrlpt" |  | ||||||
| 	ProjectGUID="{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}" |  | ||||||
| 	RootNamespace="tvctrlpt" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvctrlpt;..\..\upnp\sample\tvctrlpt\linux" |  | ||||||
| 				PreprocessorDefinitions="WIN32;DEBUG" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib" |  | ||||||
| 				AdditionalLibraryDirectories=""$(OutDir)";"out.vc8.$(ConfigurationName)\ixml";"out.vc8.$(ConfigurationName)\threadutil";"out.vc8.$(ConfigurationName)\libupnp"" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory="$(SolutionDir)$(ConfigurationName)" |  | ||||||
| 			IntermediateDirectory="$(ConfigurationName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvctrlpt\linux\upnp_tv_ctrlpt_main.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,208 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="8.00" |  | ||||||
| 	Name="tvdevice" |  | ||||||
| 	ProjectGUID="{F592B023-E1F3-4A1E-841E-662DEE497435}" |  | ||||||
| 	RootNamespace="tvdevice" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvdevice;..\..\upnp\sample\tvdevice\linux" |  | ||||||
| 				PreprocessorDefinitions="WIN32;DEBUG" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib" |  | ||||||
| 				AdditionalLibraryDirectories=""$(OutDir)";"out.vc8.$(ConfigurationName)\ixml";"out.vc8.$(ConfigurationName)\threadutil";"out.vc8.$(ConfigurationName)\libupnp"" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory="$(SolutionDir)$(ConfigurationName)" |  | ||||||
| 			IntermediateDirectory="$(ConfigurationName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				Detect64BitPortabilityProblems="true" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebDeploymentTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvdevice\linux\upnp_tv_device_main.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,216 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="9.00" |  | ||||||
| 	Name="ixml" |  | ||||||
| 	ProjectGUID="{9C2C266D-35A3-465F-A297-0E21D54E5C89}" |  | ||||||
| 	RootNamespace="ixml" |  | ||||||
| 	TargetFrameworkVersion="196613" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="4" |  | ||||||
| 			CharacterSet="0" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc;..\..\upnp\inc" |  | ||||||
| 				PreprocessorDefinitions="DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLibrarianTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="4" |  | ||||||
| 			CharacterSet="0" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="2" |  | ||||||
| 				EnableIntrinsicFunctions="true" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc" |  | ||||||
| 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				EnableFunctionLevelLinking="true" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLibrarianTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\attr.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\document.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\element.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixml.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmldebug.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlmembuf.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlparser.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\namedNodeMap.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\node.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\nodeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\inc\ixml.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\inc\ixmldebug.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\inc\ixmlmembuf.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\inc\ixmlparser.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,63 +0,0 @@ | |||||||
|  |  | ||||||
| Microsoft Visual Studio Solution File, Format Version 10.00 |  | ||||||
| # Visual Studio 2008 |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libupnp", "libupnp.vcproj", "{6227F51A-1498-4C4A-B213-F6FDED605125}" |  | ||||||
| 	ProjectSection(ProjectDependencies) = postProject |  | ||||||
| 		{9C2C266D-35A3-465F-A297-0E21D54E5C89} = {9C2C266D-35A3-465F-A297-0E21D54E5C89} |  | ||||||
| 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D} = {1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D} |  | ||||||
| 	EndProjectSection |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ixml", "ixml.vcproj", "{9C2C266D-35A3-465F-A297-0E21D54E5C89}" |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "threadutil", "threadutil.vcproj", "{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}" |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvctrlpt", "tvctrlpt.vcproj", "{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}" |  | ||||||
| 	ProjectSection(ProjectDependencies) = postProject |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125} |  | ||||||
| 	EndProjectSection |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvdevice", "tvdevice.vcproj", "{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}" |  | ||||||
| 	ProjectSection(ProjectDependencies) = postProject |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125} |  | ||||||
| 	EndProjectSection |  | ||||||
| EndProject |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvcombo", "tvcombo.vcproj", "{6365804B-22C6-4D5E-91F3-0C052EB55B4F}" |  | ||||||
| 	ProjectSection(ProjectDependencies) = postProject |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125} |  | ||||||
| 	EndProjectSection |  | ||||||
| EndProject |  | ||||||
| Global |  | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution |  | ||||||
| 		Debug|Win32 = Debug|Win32 |  | ||||||
| 		Release|Win32 = Release|Win32 |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(ProjectConfigurationPlatforms) = postSolution |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 		{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Debug|Win32.ActiveCfg = Debug|Win32 |  | ||||||
| 		{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Debug|Win32.Build.0 = Debug|Win32 |  | ||||||
| 		{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Release|Win32.ActiveCfg = Release|Win32 |  | ||||||
| 		{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Release|Win32.Build.0 = Release|Win32 |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(SolutionProperties) = preSolution |  | ||||||
| 		HideSolutionNode = FALSE |  | ||||||
| 	EndGlobalSection |  | ||||||
| EndGlobal |  | ||||||
| @@ -1,650 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="9,00" |  | ||||||
| 	Name="libupnp" |  | ||||||
| 	ProjectGUID="{6227F51A-1498-4C4A-B213-F6FDED605125}" |  | ||||||
| 	RootNamespace="libupnp" |  | ||||||
| 	TargetFrameworkVersion="131072" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="2" |  | ||||||
| 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops" |  | ||||||
| 			UseOfMFC="0" |  | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="false" |  | ||||||
| 			CharacterSet="0" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 				PreprocessorDefinitions="NDEBUG" |  | ||||||
| 				MkTypLibCompatible="true" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				TargetEnvironment="1" |  | ||||||
| 				TypeLibraryName=".\Release/libupnp.tlb" |  | ||||||
| 				HeaderFileName="" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="2" |  | ||||||
| 				InlineFunctionExpansion="1" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\pthreads\include,..\ixml\src\inc,..\ixml\inc,..\threadutil\inc,..\upnp\inc,..\upnp\src\inc,.\inc" |  | ||||||
| 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				StringPooling="true" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				EnableFunctionLevelLinking="true" |  | ||||||
| 				PrecompiledHeaderFile=".\Release/libupnp.pch" |  | ||||||
| 				AssemblerListingLocation=".\Release/" |  | ||||||
| 				ObjectFile=".\Release/" |  | ||||||
| 				ProgramDataBaseFileName=".\Release/" |  | ||||||
| 				BrowseInformation="1" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 				PreprocessorDefinitions="NDEBUG" |  | ||||||
| 				Culture="1031" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib iphlpapi.lib" |  | ||||||
| 				OutputFile=".\Release/libupnp.dll" |  | ||||||
| 				LinkIncremental="1" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				ProgramDatabaseFile=".\Release/libupnp.pdb" |  | ||||||
| 				RandomizedBaseAddress="1" |  | ||||||
| 				DataExecutionPrevention="0" |  | ||||||
| 				ImportLibrary=".\Release/libupnp.lib" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				OutputFile=".\Release/libupnp.bsc" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="2" |  | ||||||
| 			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops" |  | ||||||
| 			UseOfMFC="0" |  | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="false" |  | ||||||
| 			CharacterSet="0" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 				PreprocessorDefinitions="_DEBUG" |  | ||||||
| 				MkTypLibCompatible="true" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				TargetEnvironment="1" |  | ||||||
| 				TypeLibraryName=".\Debug/libupnp.tlb" |  | ||||||
| 				HeaderFileName="" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\pthreads\include;..\..\ixml\src\inc;..\..\ixml\inc;..\..\threadutil\inc;..\..\upnp\inc;..\..\upnp\src\inc;..\inc;..\msvc" |  | ||||||
| 				PreprocessorDefinitions="DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				PrecompiledHeaderFile="$(OutDir)\libupnp.pch" |  | ||||||
| 				AssemblerListingLocation="$(OutDir)\" |  | ||||||
| 				ObjectFile="$(OutDir)\" |  | ||||||
| 				ProgramDataBaseFileName="$(OutDir)\" |  | ||||||
| 				BrowseInformation="1" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 				PreprocessorDefinitions="_DEBUG" |  | ||||||
| 				Culture="1031" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib iphlpapi.lib $(TargetDir)..\ixml\ixml.lib" |  | ||||||
| 				OutputFile="$(OutDir)\libupnp.dll" |  | ||||||
| 				LinkIncremental="2" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				ProgramDatabaseFile="$(OutDir)\libupnp.pdb" |  | ||||||
| 				RandomizedBaseAddress="1" |  | ||||||
| 				DataExecutionPrevention="0" |  | ||||||
| 				ImportLibrary="$(OutDir)\libupnp.lib" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 				SuppressStartupBanner="true" |  | ||||||
| 				OutputFile="$(OutDir)\libupnp.bsc" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="sources" |  | ||||||
| 			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\ActionComplete.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\ActionRequest.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\attr.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\client_table\client_table.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\Discovery.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\document.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\element.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\Event.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\EventSubscribe.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\FileInfo.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\FreeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\gena\gena_callback2.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\gena\gena_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\gena\gena_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\httpparser.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\httpreadwrite.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inet_pton.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixml.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlmembuf.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\ixmlparser.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\LinkedList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\uuid\md5.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\membuffer.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\miniserver\miniserver.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\namedNodeMap.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\node.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\ixml\src\nodeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\parsetools.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\service_table\service_table.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\soap\soap_common.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\soap\soap_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\soap\soap_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\sock.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_server.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\statcodes.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\StateVarComplete.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\StateVarRequest.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\strintmap.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\SubscriptionRequest.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\uuid\sysdep.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\ThreadPool.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\TimerThread.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\upnp_timeout.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\upnpapi.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\upnpdebug.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\UpnpString.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\api\upnptools.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\uri\uri.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\urlconfig\urlconfig.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\util\util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\uuid\uuid.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\genlib\net\http\webserver.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\win_dll.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="headers" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\ActionComplete.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\ActionRequest.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\client_table.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\config.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\Discovery.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\Event.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\EventSubscribe.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\FileInfo.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gena.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gena_ctrlpt.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gena_device.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\global.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\gmtdate.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\http_client.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\httpparser.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\httpreadwrite.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\inet_pton.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\md5.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\membuffer.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\miniserver.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\netall.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\parsetools.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\server.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\service_table.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\soaplib.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\sock.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\ssdplib.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\statcodes.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\StateVarComplete.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\StateVarRequest.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\statuscodes.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\strintmap.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\SubscriptionRequest.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\sysdep.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\unixutil.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\upnp.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\upnp_timeout.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\upnpapi.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\upnpclosesocket.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\upnpdebug.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\UpnpString.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\inc\upnptools.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\uri.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\urlconfig.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\utilall.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\uuid.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\src\inc\webserver.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<File |  | ||||||
| 			RelativePath="..\..\..\..\libupnp_win32.patch" |  | ||||||
| 			> |  | ||||||
| 		</File> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,216 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="9,00" |  | ||||||
| 	Name="threadutil" |  | ||||||
| 	ProjectGUID="{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}" |  | ||||||
| 	RootNamespace="threadutil" |  | ||||||
| 	TargetFrameworkVersion="196613" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="4" |  | ||||||
| 			CharacterSet="0" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\threadutil\inc;..\..\upnp\inc;..\..\ixml\inc;..\..\pthreads\include" |  | ||||||
| 				PreprocessorDefinitions="DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLibrarianTool" |  | ||||||
| 				AdditionalDependencies="pthreadVC2.lib" |  | ||||||
| 				AdditionalLibraryDirectories="..\..\pthreads\lib" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="0" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="2" |  | ||||||
| 				EnableIntrinsicFunctions="true" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\threadutil\inc;..\..\upnp\inc;..\..\ixml\inc;..\..\pthreads\include" |  | ||||||
| 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				EnableFunctionLevelLinking="true" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\FreeList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\LinkedList.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\ThreadPool.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\src\TimerThread.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\FreeList.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\ithread.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\LinkedList.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\threadpool.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\threadutil\inc\TimerThread.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,214 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="9,00" |  | ||||||
| 	Name="tvcombo" |  | ||||||
| 	ProjectGUID="{6365804B-22C6-4D5E-91F3-0C052EB55B4F}" |  | ||||||
| 	RootNamespace="tvcombo" |  | ||||||
| 	TargetFrameworkVersion="196613" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\upnp\inc;..\..\upnp\sample\common;..\..\upnp\sample;..\..\ixml\inc;..\..\pthreads\include;..\inc;..\..\threadutil\inc;..\..\upnp\sample\tvcombo" |  | ||||||
| 				PreprocessorDefinitions="DEBUG;WIN32" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib $(TargetDir)..\libupnp\libupnp.lib" |  | ||||||
| 				AdditionalLibraryDirectories=""$(TargetDir)..\ixml";"$(TargetDir)..\threadutil";"$(TargetDir)..\libupnp"" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="2" |  | ||||||
| 				EnableIntrinsicFunctions="true" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				EnableFunctionLevelLinking="true" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 				CompileAs="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\linux\upnp_tv_combo_main.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,204 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="9.00" |  | ||||||
| 	Name="tvctrlpt" |  | ||||||
| 	ProjectGUID="{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}" |  | ||||||
| 	RootNamespace="sample" |  | ||||||
| 	TargetFrameworkVersion="196613" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\upnp\inc;..\..\upnp\sample\common;..\..\ixml\inc;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvctrlpt\linux;..\..\upnp\sample\tvctrlpt" |  | ||||||
| 				PreprocessorDefinitions="WIN32;DEBUG" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib" |  | ||||||
| 				AdditionalLibraryDirectories=""$(OutDir)";".\out.vc9.$(ConfigurationName)\ixml";".\out.vc9.$(ConfigurationName)\threadutil";".\out.vc9.$(ConfigurationName)\libupnp"" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory="$(SolutionDir)$(ConfigurationName)" |  | ||||||
| 			IntermediateDirectory="$(ConfigurationName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="2" |  | ||||||
| 				EnableIntrinsicFunctions="true" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				EnableFunctionLevelLinking="true" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvctrlpt\linux\upnp_tv_ctrlpt_main.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
| @@ -1,204 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> |  | ||||||
| <VisualStudioProject |  | ||||||
| 	ProjectType="Visual C++" |  | ||||||
| 	Version="9.00" |  | ||||||
| 	Name="tvdevice" |  | ||||||
| 	ProjectGUID="{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}" |  | ||||||
| 	RootNamespace="tvdevice" |  | ||||||
| 	TargetFrameworkVersion="196613" |  | ||||||
| 	> |  | ||||||
| 	<Platforms> |  | ||||||
| 		<Platform |  | ||||||
| 			Name="Win32" |  | ||||||
| 		/> |  | ||||||
| 	</Platforms> |  | ||||||
| 	<ToolFiles> |  | ||||||
| 	</ToolFiles> |  | ||||||
| 	<Configurations> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Debug|Win32" |  | ||||||
| 			OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="0" |  | ||||||
| 				AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvdevice;..\..\upnp\sample\tvdevice\linux" |  | ||||||
| 				PreprocessorDefinitions="WIN32;DEBUG" |  | ||||||
| 				MinimalRebuild="true" |  | ||||||
| 				BasicRuntimeChecks="3" |  | ||||||
| 				RuntimeLibrary="3" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="4" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib" |  | ||||||
| 				AdditionalLibraryDirectories=""$(OutDir)";".\out.vc9.$(ConfigurationName)\ixml";".\out.vc9.$(ConfigurationName)\threadutil";".\out.vc9.$(ConfigurationName)\libupnp"" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 		<Configuration |  | ||||||
| 			Name="Release|Win32" |  | ||||||
| 			OutputDirectory="$(SolutionDir)$(ConfigurationName)" |  | ||||||
| 			IntermediateDirectory="$(ConfigurationName)" |  | ||||||
| 			ConfigurationType="1" |  | ||||||
| 			CharacterSet="2" |  | ||||||
| 			WholeProgramOptimization="1" |  | ||||||
| 			> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCustomBuildTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXMLDataGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCWebServiceProxyGeneratorTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCMIDLTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCCLCompilerTool" |  | ||||||
| 				Optimization="2" |  | ||||||
| 				EnableIntrinsicFunctions="true" |  | ||||||
| 				RuntimeLibrary="2" |  | ||||||
| 				EnableFunctionLevelLinking="true" |  | ||||||
| 				WarningLevel="3" |  | ||||||
| 				DebugInformationFormat="3" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManagedResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCResourceCompilerTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPreLinkEventTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCLinkerTool" |  | ||||||
| 				GenerateDebugInformation="true" |  | ||||||
| 				OptimizeReferences="2" |  | ||||||
| 				EnableCOMDATFolding="2" |  | ||||||
| 				TargetMachine="1" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCALinkTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCManifestTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCXDCMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCBscMakeTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCFxCopTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCAppVerifierTool" |  | ||||||
| 			/> |  | ||||||
| 			<Tool |  | ||||||
| 				Name="VCPostBuildEventTool" |  | ||||||
| 			/> |  | ||||||
| 		</Configuration> |  | ||||||
| 	</Configurations> |  | ||||||
| 	<References> |  | ||||||
| 	</References> |  | ||||||
| 	<Files> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Source Files" |  | ||||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |  | ||||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvdevice\linux\upnp_tv_device_main.c" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Header Files" |  | ||||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" |  | ||||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |  | ||||||
| 			> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\common\sample_util.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 			<File |  | ||||||
| 				RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.h" |  | ||||||
| 				> |  | ||||||
| 			</File> |  | ||||||
| 		</Filter> |  | ||||||
| 		<Filter |  | ||||||
| 			Name="Resource Files" |  | ||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |  | ||||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |  | ||||||
| 			> |  | ||||||
| 		</Filter> |  | ||||||
| 	</Files> |  | ||||||
| 	<Globals> |  | ||||||
| 	</Globals> |  | ||||||
| </VisualStudioProject> |  | ||||||
							
								
								
									
										330
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										330
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -4,183 +4,73 @@ | |||||||
| # | # | ||||||
| # Process this file with autoconf to produce a configure script. | # Process this file with autoconf to produce a configure script. | ||||||
| # | # | ||||||
| # (C) Copyright 2005-2007 Rémi Turboult <r3mi@users.sourceforge.net> | # (C) Copyright 2005-2006 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| # | # | ||||||
|  |  | ||||||
| AC_PREREQ(2.60) | AC_PREREQ(2.60) | ||||||
|  |  | ||||||
| AC_INIT([libupnp], [1.6.7], [mroberto@users.sourceforge.net]) | AC_INIT([libupnp], [1.6.0], [mroberto@users.sourceforge.net]) | ||||||
| dnl ############################################################################ | # *Independently* of the above libupnp package version, the libtool version | ||||||
| dnl # *Independently* of the above libupnp package version, the libtool version | # of the 3 libraries need to be updated whenever there is a change released : | ||||||
| dnl # of the 3 libraries need to be updated whenever there is a change released: | # "current:revision:age" (this is NOT the same as the package version), where: | ||||||
| dnl # "current:revision:age" (this is NOT the same as the package version), | # 	- library code modified:		revision++ | ||||||
| dnl # where: | # 	- interfaces changed/added/removed:	current++ and revision=0 | ||||||
| dnl # 	- library code modified:		revision++ | # 	- interfaces added: 			age++ | ||||||
| dnl # 	- interfaces changed/added/removed:	current++ and revision=0 | # 	- interfaces removed:			age=0 | ||||||
| dnl # 	- interfaces added: 			age++ | # *please update only once, before a formal release, not for each change* | ||||||
| dnl # 	- interfaces removed:			age=0 | # | ||||||
| dnl # *please update only once, before a formal release, not for each change* | # For release 1.4.1, we had: | ||||||
| dnl # | #AC_SUBST([LT_VERSION_IXML],       [2:2:0]) | ||||||
| dnl ############################################################################ | #AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0]) | ||||||
| dnl # Release 1.4.1: | #AC_SUBST([LT_VERSION_UPNP],       [2:2:0]) | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:2:0]) | # | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0]) | # "current:revision:age" | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [2:2:0]) | # | ||||||
| dnl # | # - Code has changed in ixml | ||||||
| dnl ############################################################################ | #	revision: 2 -> 3 | ||||||
| dnl # Release 1.4.6: | # - Code has changed in threadutil | ||||||
| dnl # "current:revision:age" | #	revision: 2 -> 3 | ||||||
| dnl # | # - Interface added in threadutil | ||||||
| dnl # - Code has changed in ixml | #	current: 2 -> 3 | ||||||
| dnl #	revision: 2 -> 3 | #	revisiion: 3 -> 0 | ||||||
| dnl # - Code has changed in threadutil | #	age: 0 -> 1 | ||||||
| dnl #	revision: 2 -> 3 | # - Code has changed in upnp | ||||||
| dnl # - Interface added in threadutil | #	revision: 2 -> 3 | ||||||
| dnl #	current: 2 -> 3 | # | ||||||
| dnl #	revisiion: 3 -> 0 | # For release 1.4.6, we had: | ||||||
| dnl #	age: 0 -> 1 | #AC_SUBST([LT_VERSION_IXML],       [2:3:0]) | ||||||
| dnl # - Code has changed in upnp | #AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1]) | ||||||
| dnl #	revision: 2 -> 3 | #AC_SUBST([LT_VERSION_UPNP],       [2:3:0]) | ||||||
| dnl # | # | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:3:0]) | # "current:revision:age" | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1]) | # | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [2:3:0]) | # - Code has changed in ixml | ||||||
| dnl # | #	revision: 3 -> 4 | ||||||
| dnl ############################################################################ | # - Code has changed in threadutil | ||||||
| dnl # Release 1.6.0: | #	revision: 0 -> 1 | ||||||
| dnl # "current:revision:age" | # - Code has changed in upnp | ||||||
| dnl # | #	revision: 3 -> 4 | ||||||
| dnl # - Code has changed in ixml | # - Interface changed in upnp | ||||||
| dnl #	revision: 3 -> 4 | #	current: 2 -> 3 | ||||||
| dnl # - Code has changed in threadutil | #	revision: 4 -> 0 | ||||||
| dnl #	revision: 0 -> 1 | # - Interface removed in upnp | ||||||
| dnl # - Code has changed in upnp | #	age: 0 -> 0 | ||||||
| dnl #	revision: 3 -> 4 | # | ||||||
| dnl # - Interface changed in upnp | # For release 1.6.0, we had: | ||||||
| dnl #	current: 2 -> 3 | #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) | ||||||
| dnl #	revision: 4 -> 0 | #AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1]) | ||||||
| dnl # - Interface removed in upnp | #AC_SUBST([LT_VERSION_UPNP],       [3:0:0]) | ||||||
| dnl #	age: 0 -> 0 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:0:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Release 1.6.1: |  | ||||||
| dnl # "current:revision:age" |  | ||||||
| dnl # |  | ||||||
| dnl # - Code has changed in threadutil |  | ||||||
| dnl #	revision: 1 -> 2 |  | ||||||
| dnl # - Interface added in threadutil |  | ||||||
| dnl #	current: 3 -> 4 |  | ||||||
| dnl #	revision: 2 -> 0 |  | ||||||
| dnl # - Interface added in threadutil |  | ||||||
| dnl #	age: 1 -> 2 |  | ||||||
| dnl # - Code has changed in upnp |  | ||||||
| dnl #	revision: 0 -> 1 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:1:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Release 1.6.2: |  | ||||||
| dnl # "current:revision:age" |  | ||||||
| dnl # |  | ||||||
| dnl # - Code has changed in upnp |  | ||||||
| dnl #	revision: 1 -> 2 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:2:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Release 1.6.3: |  | ||||||
| dnl # "current:revision:age" |  | ||||||
| dnl # |  | ||||||
| dnl # - Code has changed in threadutil |  | ||||||
| dnl #	revision: 0 -> 1 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:1:2]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:2:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Release 1.6.4: |  | ||||||
| dnl # "current:revision:age" |  | ||||||
| dnl # |  | ||||||
| dnl # - Code has changed in threadutil |  | ||||||
| dnl #	revision: 1 -> 2 |  | ||||||
| dnl # - Code has changed in upnp |  | ||||||
| dnl #	revision: 2 -> 3 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:3:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Release 1.6.5: |  | ||||||
| dnl # "current:revision:age" |  | ||||||
| dnl # |  | ||||||
| dnl # - Code has changed in upnp |  | ||||||
| dnl #	revision: 3 -> 4 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:4:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Release 1.6.6: |  | ||||||
| dnl # "current:revision:age" |  | ||||||
| dnl # |  | ||||||
| dnl # - Code has changed in threadutil |  | ||||||
| dnl #	revision: 2 -> 3 |  | ||||||
| dnl # - Code has changed in upnp |  | ||||||
| dnl #	revision: 4 -> 5 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:3:2]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:5:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Release 1.6.7: |  | ||||||
| dnl # "current:revision:age" |  | ||||||
| dnl # |  | ||||||
| dnl # - Code has changed in upnp |  | ||||||
| dnl #	revision: 5 -> 6 |  | ||||||
| dnl # - Code has changed in threadutil |  | ||||||
| dnl #	revision: 3 -> 4 |  | ||||||
| dnl # - Interfaces have been changed, added and removed in upnp |  | ||||||
| dnl #	current: 4 -> 5 |  | ||||||
| dnl #   revision: 4 -> 0 |  | ||||||
| dnl # |  | ||||||
| dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_THREADUTIL], [5:0:2]) |  | ||||||
| dnl #AC_SUBST([LT_VERSION_UPNP],       [3:5:0]) |  | ||||||
| dnl # |  | ||||||
| dnl ############################################################################ |  | ||||||
| AC_SUBST([LT_VERSION_IXML],       [2:4:0]) | AC_SUBST([LT_VERSION_IXML],       [2:4:0]) | ||||||
| AC_SUBST([LT_VERSION_THREADUTIL], [5:0:2]) | AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1]) | ||||||
| AC_SUBST([LT_VERSION_UPNP],       [3:5:0]) | AC_SUBST([LT_VERSION_UPNP],       [3:0:0]) | ||||||
| dnl ############################################################################ |  | ||||||
| dnl # Repeating the algorithm to place it closer to the modificatin place: |  | ||||||
| dnl # 	- library code modified:		revision++ |  | ||||||
| dnl # 	- interfaces changed/added/removed:	current++ and revision=0 |  | ||||||
| dnl # 	- interfaces added: 			age++ |  | ||||||
| dnl # 	- interfaces removed:			age=0 |  | ||||||
| dnl # *please update only once, before a formal release, not for each change* |  | ||||||
| dnl ############################################################################ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_CONFIG_AUX_DIR([build-aux]) | AC_CONFIG_AUX_DIR(config.aux) | ||||||
| AC_CONFIG_MACRO_DIR([m4]) | AC_CONFIG_MACRO_DIR(m4) | ||||||
| AC_CONFIG_SRCDIR([upnp/inc/upnp.h]) | AC_CONFIG_SRCDIR(upnp/inc/upnp.h) | ||||||
|  |  | ||||||
|  |  | ||||||
| AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects dist-bzip2]) | AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects dist-bzip2]) | ||||||
|  |  | ||||||
|  |  | ||||||
| # | # | ||||||
| # Get canonical host names in host and host_os | # Get canonical host names in host and host_os | ||||||
| # | # | ||||||
| @@ -205,7 +95,8 @@ AC_REVISION([$Revision: 1.11 $]) | |||||||
| upnpmaj=`echo "$PACKAGE_VERSION" | sed 's/\..*//' ` | upnpmaj=`echo "$PACKAGE_VERSION" | sed 's/\..*//' ` | ||||||
| upnpmin=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.// ; s/[^0-9].*$//' `] | upnpmin=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.// ; s/[^0-9].*$//' `] | ||||||
| upnppatch=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.[^.]\.// ; s/[^0-9].*$//' `] | upnppatch=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.[^.]\.// ; s/[^0-9].*$//' `] | ||||||
| AC_DEFINE_UNQUOTED([UPNP_VERSION_STRING], "$PACKAGE_VERSION", [see upnpconfig.h]) | AC_DEFINE_UNQUOTED([UPNP_VERSION_STRING], "$PACKAGE_VERSION", | ||||||
|  | 	[see upnpconfig.h]) | ||||||
| AC_DEFINE_UNQUOTED([UPNP_VERSION_MAJOR], $upnpmaj, [see upnpconfig.h]) | AC_DEFINE_UNQUOTED([UPNP_VERSION_MAJOR], $upnpmaj, [see upnpconfig.h]) | ||||||
| AC_DEFINE_UNQUOTED([UPNP_VERSION_MINOR], $upnpmin, [see upnpconfig.h]) | AC_DEFINE_UNQUOTED([UPNP_VERSION_MINOR], $upnpmin, [see upnpconfig.h]) | ||||||
| AC_DEFINE_UNQUOTED([UPNP_VERSION_PATCH], $upnppatch, [see upnpconfig.h]) | AC_DEFINE_UNQUOTED([UPNP_VERSION_PATCH], $upnppatch, [see upnpconfig.h]) | ||||||
| @@ -227,6 +118,7 @@ fi | |||||||
| # | # | ||||||
| # Check for libupnp subsets | # Check for libupnp subsets | ||||||
| # | # | ||||||
|  |  | ||||||
| RT_BOOL_ARG_ENABLE([client], [yes], [control point code (client)]) | RT_BOOL_ARG_ENABLE([client], [yes], [control point code (client)]) | ||||||
| if test "x$enable_client" = xyes ; then | if test "x$enable_client" = xyes ; then | ||||||
| 	AC_DEFINE(UPNP_HAVE_CLIENT, 1, [see upnpconfig.h]) | 	AC_DEFINE(UPNP_HAVE_CLIENT, 1, [see upnpconfig.h]) | ||||||
| @@ -256,27 +148,15 @@ if test "x$enable_tools" = xyes ; then | |||||||
| 	AC_DEFINE(UPNP_HAVE_TOOLS, 1, [see upnpconfig.h]) | 	AC_DEFINE(UPNP_HAVE_TOOLS, 1, [see upnpconfig.h]) | ||||||
| fi | fi | ||||||
|  |  | ||||||
| RT_BOOL_ARG_ENABLE([ipv6], [no], [ipv6 support]) |  | ||||||
| if test "x$enable_ipv6" = xyes ; then |  | ||||||
|         AC_DEFINE(UPNP_ENABLE_IPV6, 1, [see upnpconfig.h]) |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| RT_BOOL_ARG_ENABLE([notification_reordering], [yes], [GENA notification reordering in gena_device.c]) |  | ||||||
| if test "x$enable_notification_reordering" = xyes ; then |  | ||||||
|         AC_DEFINE(UPNP_ENABLE_NOTIFICATION_REORDERING, 1, [see upnpconfig.h]) |  | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code]) | RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code]) | ||||||
|  |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # doc installation | # doc installation | ||||||
| # autoconf >= 2.60 already defines ${docdir}, but we will not use its  | # autoconf >= 2.60 already defines ${docdir}, but we will not use its  | ||||||
| # default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}. | # default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}. | ||||||
| # That would give us ${datarootdir}/doc/libupnp, and we want the package | # That would give us ${datarootdir}/doc/libupnp, and we want the package | ||||||
| # version on that. | # version on that. | ||||||
| # |  | ||||||
| docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}" | docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}" | ||||||
| AC_MSG_CHECKING([for documentation directory]) | AC_MSG_CHECKING([for documentation directory]) | ||||||
| AC_ARG_WITH( | AC_ARG_WITH( | ||||||
| @@ -291,9 +171,7 @@ AS_HELP_STRING( | |||||||
| 	[], | 	[], | ||||||
| 	[with_documentation=no]) | 	[with_documentation=no]) | ||||||
|  |  | ||||||
| # |  | ||||||
| # If something has been entered after an equal sign, assume it is the directory | # If something has been entered after an equal sign, assume it is the directory | ||||||
| # |  | ||||||
| if test x"$with_documentation" != xyes -a x"$with_documentation" != xno; then | if test x"$with_documentation" != xyes -a x"$with_documentation" != xno; then | ||||||
| 	docdir="$with_documentation" | 	docdir="$with_documentation" | ||||||
| fi | fi | ||||||
| @@ -327,9 +205,7 @@ freebsd*) | |||||||
| 	echo "Using non-specific system compiler settings" | 	echo "Using non-specific system compiler settings" | ||||||
| 	if test x"$enable_debug" = xyes; then | 	if test x"$enable_debug" = xyes; then | ||||||
| 		# AC_PROG_CC already sets CFLAGS to "-g -O2" by default | 		# AC_PROG_CC already sets CFLAGS to "-g -O2" by default | ||||||
| 		#: | 		: | ||||||
| 		# Use -O0 in debug so that variables do not get optimized out |  | ||||||
| 		AX_CFLAGS_GCC_OPTION([-O0]) |  | ||||||
| 	else | 	else | ||||||
| 		# add optimise for size | 		# add optimise for size | ||||||
| 		AX_CFLAGS_GCC_OPTION([-Os]) | 		AX_CFLAGS_GCC_OPTION([-Os]) | ||||||
| @@ -351,26 +227,9 @@ AC_DEFINE([_FILE_OFFSET_BITS], [64], [File Offset size]) | |||||||
|  |  | ||||||
|  |  | ||||||
| # | # | ||||||
| # Are we targetting Win32? | # Checks for header files | ||||||
| # |  | ||||||
| AC_MSG_CHECKING([for Win32]) |  | ||||||
| AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ |  | ||||||
| #ifdef WIN32 |  | ||||||
| 	#error Yup |  | ||||||
| #endif |  | ||||||
| ],[])], [ac_cv_win32="no"], [ac_cv_win32="yes"]) |  | ||||||
| if test "$ac_cv_win32" = "yes"; then |  | ||||||
| 	AC_MSG_RESULT([yes]) |  | ||||||
| else |  | ||||||
| 	AC_MSG_RESULT([no]) |  | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # Checks for header files (which aren't needed on Win32) |  | ||||||
| # | # | ||||||
| AC_HEADER_STDC | AC_HEADER_STDC | ||||||
| if test "$ac_cv_win32" = "no"; then |  | ||||||
| # libupnp code doesn't use autoconf variables yet, | # libupnp code doesn't use autoconf variables yet, | ||||||
| # so just abort if a header file is not found. | # so just abort if a header file is not found. | ||||||
| AC_CHECK_HEADERS( | AC_CHECK_HEADERS( | ||||||
| @@ -386,43 +245,20 @@ AC_CHECK_HEADERS( | |||||||
| 	sys/ioctl.h \ | 	sys/ioctl.h \ | ||||||
| 	sys/socket.h \ | 	sys/socket.h \ | ||||||
| 	sys/time.h \ | 	sys/time.h \ | ||||||
|  | 	sys/timeb.h \ | ||||||
| 	syslog.h \ | 	syslog.h \ | ||||||
| 	unistd.h \ | 	unistd.h \ | ||||||
| 	], | 	], | ||||||
| 	[], | 	[], | ||||||
| 	[AC_MSG_ERROR([required header file missing])]) | 	[AC_MSG_ERROR([required header file missing])]) | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # | # | ||||||
| # Checks for typedefs, structures, and compiler characteristics | # Checks for typedefs, structures, and compiler characteristics | ||||||
| #	 | #	 | ||||||
| AC_C_CONST | AC_C_CONST | ||||||
|  | AC_TYPE_SIZE_T | ||||||
| # The test for socklen_t was getting it wrong when it exists but is in ws2tcpip.h, | TYPE_SOCKLEN_T | ||||||
| # so we use a new test. |  | ||||||
| #TYPE_SOCKLEN_T |  | ||||||
|  |  | ||||||
| AC_CHECK_HEADERS([sys/types.h sys/socket.h ws2tcpip.h]) |  | ||||||
| AC_MSG_CHECKING(for socklen_t) |  | ||||||
| AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ |  | ||||||
| #ifdef HAVE_SYS_TYPES_H |  | ||||||
| 	#include <sys/types.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_SYS_SOCKET_H |  | ||||||
| 	#include <sys/socket.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_WS2TCPIP_H |  | ||||||
| 	#include <ws2tcpip.h> |  | ||||||
| #endif |  | ||||||
| ],[ socklen_t t = 0; return t; ]) |  | ||||||
| ],[ac_cv_socklen_t="yes"],[ac_cv_socklen_t="no"]) |  | ||||||
| if test "$ac_cv_socklen_t" = "yes"; then |  | ||||||
| 	AC_MSG_RESULT([yes]) |  | ||||||
| else |  | ||||||
| 	AC_MSG_RESULT([no, using int]) |  | ||||||
| 	AC_DEFINE(socklen_t, int, [Type for storing the length of struct sockaddr]) |  | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # | # | ||||||
| @@ -431,50 +267,14 @@ fi | |||||||
| AC_FUNC_VPRINTF | AC_FUNC_VPRINTF | ||||||
| AC_FUNC_FSEEKO | AC_FUNC_FSEEKO | ||||||
| AC_CHECK_FUNCS(ftime,, [AC_CHECK_LIB(compat, ftime)]) | AC_CHECK_FUNCS(ftime,, [AC_CHECK_LIB(compat, ftime)]) | ||||||
| # |  | ||||||
| # Solaris needs -lsocket -lnsl -lrt |  | ||||||
| AC_SEARCH_LIBS([bind],           [socket]) |  | ||||||
| AC_SEARCH_LIBS([gethostbyname],  [nsl]) |  | ||||||
| AC_SEARCH_LIBS([sched_getparam], [rt]) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # | # | ||||||
| # Checks for POSIX Threads | # Checks for POSIX Threads | ||||||
| # | # | ||||||
| echo "--------------------------- pthread stuff -------------------------------------" |  | ||||||
| ACX_PTHREAD( | ACX_PTHREAD( | ||||||
| 	[], | 	[], | ||||||
| 	[AC_MSG_ERROR([POSIX threads are required to build this program])]) | 	[AC_MSG_ERROR([POSIX threads are required to build this program])]) | ||||||
| # |  | ||||||
| # Update environment variables for pthreads |  | ||||||
| # |  | ||||||
| CC="$PTHREAD_CC" |  | ||||||
| CFLAGS="$PTHREAD_CFLAGS $CFLAGS" |  | ||||||
| LIBS="$PTHREAD_LIBS $LIBS" |  | ||||||
| # |  | ||||||
| # Determine if pthread_rwlock_t is available |  | ||||||
| # |  | ||||||
| echo "----------------------- pthread_rwlock_t stuff --------------------------------" |  | ||||||
| AC_MSG_CHECKING([if pthread_rwlock_t is available]) |  | ||||||
| AC_LANG([C]) |  | ||||||
| AC_COMPILE_IFELSE( |  | ||||||
| 	[AC_LANG_PROGRAM( |  | ||||||
| 		[#include <pthread.h>], |  | ||||||
| 		[pthread_rwlock_t *x;])], |  | ||||||
| 	[AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t]) |  | ||||||
| 		AC_MSG_RESULT([yes, supported without any options])], |  | ||||||
| 	[AC_COMPILE_IFELSE( |  | ||||||
| 		[AC_LANG_PROGRAM( |  | ||||||
| 			[#define _GNU_SOURCE |  | ||||||
| 			#include <pthread.h>], |  | ||||||
| 			[pthread_rwlock_t *x;])], |  | ||||||
| 		[AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t]) |  | ||||||
| 			CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" |  | ||||||
| 			AC_MSG_RESULT([yes, definition of _GNU_SOURCE required])], |  | ||||||
| 		[AC_DEFINE([UPNP_USE_RWLOCK], [0], [Do not use pthread_rwlock_t]) |  | ||||||
| 			AC_MSG_RESULT([no, needs to fallback to pthread_mutex]) |  | ||||||
| 			AC_MSG_ERROR([pthread_rwlock_t not available])])]) |  | ||||||
| echo "-------------------------------------------------------------------------------" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_CONFIG_FILES([ | AC_CONFIG_FILES([ | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								docs/dist/Makefile.am
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								docs/dist/Makefile.am
									
									
									
									
										vendored
									
									
								
							| @@ -39,7 +39,7 @@ EXTRA_DIST = \ | |||||||
|     ./html/upnp/UPNP_E_SOCKET_ERROR-208.html \ |     ./html/upnp/UPNP_E_SOCKET_ERROR-208.html \ | ||||||
|     ./html/upnp/UPNP_E_CANCELED-210.html \ |     ./html/upnp/UPNP_E_CANCELED-210.html \ | ||||||
|     ./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \ |     ./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \ | ||||||
|     ./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCEPTED-302.html \ |     ./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCAPTED-302.html \ | ||||||
|     ./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \ |     ./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \ | ||||||
|     ./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \ |     ./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \ | ||||||
|     ./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \ |     ./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \ | ||||||
| @@ -295,7 +295,7 @@ if WITH_DOCUMENTATION | |||||||
|         ./html/upnp/UPNP_E_SOCKET_ERROR-208.html \ |         ./html/upnp/UPNP_E_SOCKET_ERROR-208.html \ | ||||||
|         ./html/upnp/UPNP_E_CANCELED-210.html \ |         ./html/upnp/UPNP_E_CANCELED-210.html \ | ||||||
|         ./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \ |         ./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \ | ||||||
|         ./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCEPTED-302.html \ |         ./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCAPTED-302.html \ | ||||||
|         ./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \ |         ./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \ | ||||||
|         ./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \ |         ./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \ | ||||||
|         ./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \ |         ./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \ | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # "Makefile.am" for "libupnp/ixml" | # "Makefile.am" for "libupnp/ixml" | ||||||
| # | # | ||||||
| # (C) Copyright 2005 R<>mi Turboult <r3mi@users.sourceforge.net> | # (C) Copyright 2005 R<>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| # | # | ||||||
|  |  | ||||||
| SUBDIRS 		= doc | SUBDIRS 		= doc | ||||||
| @@ -24,23 +24,15 @@ libixml_la_LDFLAGS	= -version-info $(LT_VERSION_IXML) \ | |||||||
| 			  -export-symbols-regex '^ixml.*' | 			  -export-symbols-regex '^ixml.*' | ||||||
|  |  | ||||||
| libixml_la_SOURCES	= \ | libixml_la_SOURCES	= \ | ||||||
| 			src/attr.c \ | 			src/ixml.c src/node.c src/ixmlparser.c \ | ||||||
| 			src/document.c \ | 			src/ixmlmembuf.c src/nodeList.c \ | ||||||
| 			src/element.c \ | 			src/element.c src/attr.c src/document.c \ | ||||||
| 			src/inc/ixmlmembuf.h \ |  | ||||||
| 			src/inc/ixmlparser.h \ |  | ||||||
| 			src/ixml.c \ |  | ||||||
| 			src/ixmldebug.c \ |  | ||||||
| 			src/ixmlparser.c \ |  | ||||||
| 			src/ixmlmembuf.c \ |  | ||||||
| 			src/namedNodeMap.c \ | 			src/namedNodeMap.c \ | ||||||
| 			src/node.c \ | 			src/inc/ixmlmembuf.h src/inc/ixmlparser.h | ||||||
| 			src/nodeList.c |  | ||||||
|  |  | ||||||
| upnpincludedir		= $(includedir)/upnp | upnpincludedir		= $(includedir)/upnp | ||||||
| upnpinclude_HEADERS	= \ | upnpinclude_HEADERS	= inc/ixml.h  | ||||||
| 			inc/ixml.h \ |  | ||||||
| 			inc/ixmldebug.h |  | ||||||
|  |  | ||||||
| check_PROGRAMS          = test_document | check_PROGRAMS          = test_document | ||||||
| TESTS                   = test/test_document.sh | TESTS                   = test/test_document.sh | ||||||
| @@ -55,3 +47,4 @@ dist-hook: | |||||||
| clean-local: | clean-local: | ||||||
| 	@if [ -d bin ] ; then  rm -rf bin ; fi | 	@if [ -d bin ] ; then  rm -rf bin ; fi | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										3440
									
								
								ixml/inc/ixml.h
									
									
									
									
									
								
							
							
						
						
									
										3440
									
								
								ixml/inc/ixml.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,41 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef IXMLDEBUG_H |  | ||||||
| #define IXMLDEBUG_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "UpnpGlobal.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  * |  | ||||||
|  * \brief Auxiliar routines to aid debugging. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Prints the debug statement either on the standard output or log file |  | ||||||
|  * along with the information from where this debug statement is coming. |  | ||||||
|  */  |  | ||||||
| #ifdef DEBUG |  | ||||||
| void IxmlPrintf( |  | ||||||
| 	/*! [in] Printf like format specification. */ |  | ||||||
| 	const char* FmtStr, |  | ||||||
| 	/*! [in] Printf like Variable number of arguments that will go in the debug |  | ||||||
| 	 * statement. */ |  | ||||||
| 	...) |  | ||||||
| #if (__GNUC__ >= 3) |  | ||||||
| 	/* This enables printf like format checking by the compiler */ |  | ||||||
| 	__attribute__((format (__printf__, 1, 2))) |  | ||||||
| #endif |  | ||||||
| ; |  | ||||||
| #else /* DEBUG */ |  | ||||||
| static UPNP_INLINE void IxmlPrintf( |  | ||||||
| 	const char* FmtStr, |  | ||||||
| 	...) {} |  | ||||||
| #endif /* DEBUG */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* IXMLDEBUG_H */ |  | ||||||
|  |  | ||||||
| @@ -1,53 +1,60 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ixmlparser.h" | #include "ixmlparser.h" | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| #include <string.h> | *   Function: Attr_init | ||||||
|  | *       Initializes an attribute node | ||||||
|  | *       External function. | ||||||
| void ixmlAttr_init(IN IXML_Attr *attr) | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlAttr_init( IN IXML_Attr * attr ) | ||||||
| { | { | ||||||
| 	if (attr != NULL) { |     if( attr != NULL ) { | ||||||
| 		memset(attr, 0, sizeof (IXML_Attr)); |         memset( attr, 0, sizeof( IXML_Attr ) ); | ||||||
| 	} |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| void ixmlAttr_free(IN IXML_Attr *attr) | *   Function: Attr_free | ||||||
|  | *       Frees an attribute node. | ||||||
|  | *       external function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlAttr_free( IN IXML_Attr * attr ) | ||||||
| { | { | ||||||
| 	if (attr != NULL) { |     if( attr != NULL ) { | ||||||
| 		ixmlNode_free((IXML_Node *)attr); |         ixmlNode_free( ( IXML_Node * ) attr ); | ||||||
| 	} |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										1130
									
								
								ixml/src/document.c
									
									
									
									
									
								
							
							
						
						
									
										1130
									
								
								ixml/src/document.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1432
									
								
								ixml/src/element.c
									
									
									
									
									
								
							
							
						
						
									
										1432
									
								
								ixml/src/element.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,173 +1,77 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef IXML_MEMBUF_H |  | ||||||
| #define IXML_MEMBUF_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  | #ifndef _IXML_MEMBUF_H | ||||||
|  | #define _IXML_MEMBUF_H | ||||||
|  |  | ||||||
|  | #include <stdlib.h> | ||||||
| #include "ixml.h" | #include "ixml.h" | ||||||
|  |  | ||||||
|  | #define MINVAL( a, b ) ( (a) < (b) ? (a) : (b) ) | ||||||
|  | #define MAXVAL( a, b ) ( (a) > (b) ? (a) : (b) ) | ||||||
|  |  | ||||||
| #include <stdlib.h> /* for size_t */ | #ifndef WIN32 | ||||||
|  |  #define	UPNP_INLINE inline | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define MEMBUF_DEF_SIZE_INC		20 | ||||||
|  |  | ||||||
|  |  | ||||||
| #define MINVAL(a, b) ( (a) < (b) ? (a) : (b) ) | typedef struct // ixml_membuf  | ||||||
| #define MAXVAL(a, b) ( (a) > (b) ? (a) : (b) ) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define MEMBUF_DEF_SIZE_INC 20 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief The ixml_membuf type. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { | { | ||||||
| 	char *buf;	 | 	char	*buf; | ||||||
| 	size_t length; | 				 | ||||||
| 	size_t capacity; | 	size_t	length; | ||||||
| 	size_t size_inc; | 	size_t	capacity; | ||||||
|  | 	size_t	size_inc; | ||||||
|  |  | ||||||
| } ixml_membuf; | } ixml_membuf; | ||||||
|  |  | ||||||
|  | //-------------------------------------------------- | ||||||
|  | //////////////// functions ///////////////////////// | ||||||
|  | //-------------------------------------------------- | ||||||
|  | /* | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif // __cplusplus | ||||||
|  | */ | ||||||
|  |  | ||||||
| /*! | void ixml_membuf_init(INOUT ixml_membuf *m); | ||||||
|  * \brief ixml_membuf initialization routine. | void ixml_membuf_destroy(INOUT ixml_membuf *m); | ||||||
|  */ | int ixml_membuf_assign(INOUT ixml_membuf *m, IN const void *buf,  | ||||||
| void ixml_membuf_init( | 					 IN size_t buf_len ); | ||||||
| 	/*! [in,out] The memory buffer to initializa. */ | int ixml_membuf_assign_str(INOUT ixml_membuf *m, IN const char *c_str ); | ||||||
| 	ixml_membuf *m); | int ixml_membuf_append(INOUT ixml_membuf *m, IN const void *buf); | ||||||
|  | int ixml_membuf_append_str(INOUT ixml_membuf *m, IN const char *c_str); | ||||||
|  | int ixml_membuf_insert(INOUT ixml_membuf *m, IN const void* buf,  | ||||||
| /*! | 					 IN size_t buf_len, int index ); | ||||||
|  * \brief ixml_membuf clearing routine. |  | ||||||
|  * |  | ||||||
|  * The internal buffer is deleted and ixml_membuf_init() is called in the end |  | ||||||
|  * to reinitialize the buffer. |  | ||||||
|  */ |  | ||||||
| void ixml_membuf_destroy( |  | ||||||
| 	/*! [in,out] The memory buffer to clear. */ |  | ||||||
| 	ixml_membuf *m); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Copies the contents o a buffer to the designated ixml_membuf. |  | ||||||
|  * |  | ||||||
|  * The previous contents of the ixml_membuf are destroyed. |  | ||||||
|  * |  | ||||||
|  * \return IXML_SUCCESS if successfull, or the error code returned |  | ||||||
|  * by ixml_membuf_set_size(). |  | ||||||
|  * |  | ||||||
|  * \sa ixml_membuf_assign_str(). |  | ||||||
|  */ |  | ||||||
| int ixml_membuf_assign( |  | ||||||
| 	/*! [in,out] The memory buffer on which to operate. */ |  | ||||||
| 	ixml_membuf *m, |  | ||||||
| 	/*! [in] The input buffer to copy from. */ |  | ||||||
| 	const void *buf,  |  | ||||||
| 	/*! [in] The number of bytes to copy from the input buffer. */ |  | ||||||
| 	size_t buf_len); |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Copies a \b NULL terminated string to the ixml_buffer. |  | ||||||
|  * |  | ||||||
|  * This is a convenience function that internally uses ixml_membuf_assign(). |  | ||||||
|  * |  | ||||||
|  * \return The return value of ixml_membuf_assign(). |  | ||||||
|  * |  | ||||||
|  * \sa ixml_membuf_assign(). |  | ||||||
|  */ |  | ||||||
| int ixml_membuf_assign_str( |  | ||||||
| 	/*! [in,out] The memory buffer on which to operate. */ |  | ||||||
| 	ixml_membuf *m, |  | ||||||
| 	/*! [in] The input string to copy from. */ |  | ||||||
| 	const char *c_str); |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Appends one byte to the designated ixml_membuffer. |  | ||||||
|  * |  | ||||||
|  * This is a convenience function that internally uses ixml_membuf_insert(). |  | ||||||
|  * |  | ||||||
|  * \return The return value of ixml_membuf_insert(). |  | ||||||
|  * |  | ||||||
|  * \sa ixml_membuf_insert() |  | ||||||
|  */ |  | ||||||
| int ixml_membuf_append( |  | ||||||
| 	/*! [in,out] The memory buffer on which to operate. */ |  | ||||||
| 	ixml_membuf *m, |  | ||||||
| 	/*! [in] The pointer to the byte to append. */ |  | ||||||
| 	const void *buf); |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Appends the contents of a \b NULL terminated string to the designated |  | ||||||
|  * ixml_membuf. |  | ||||||
|  * |  | ||||||
|  * This is a convenience function that internally uses ixml_membuf_insert(). |  | ||||||
|  * |  | ||||||
|  * \return The return value of ixml_membuf_insert(). |  | ||||||
|  * |  | ||||||
|  * \sa ixml_membuf_insert(). |  | ||||||
|  */ |  | ||||||
| int ixml_membuf_append_str( |  | ||||||
| 	/*! [in,out] The memory buffer on which to operate. */ |  | ||||||
| 	ixml_membuf *m, |  | ||||||
| 	/*! [in] The input string to copy from. */ |  | ||||||
| 	const char *c_str); |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  * |  | ||||||
|  * \return |  | ||||||
|  * 	\li 0 if successfull. |  | ||||||
|  * 	\li IXML_INDEX_SIZE_ERR if the index parameter is out of range. |  | ||||||
|  * 	\li Or the return code of ixml_membuf_set_size() |  | ||||||
|  * |  | ||||||
|  * \sa ixml_membuf_set_size() |  | ||||||
|  */ |  | ||||||
| int ixml_membuf_insert( |  | ||||||
| 	/*! [in,out] The memory buffer on which to operate. */ |  | ||||||
| 	ixml_membuf *m, |  | ||||||
| 	/*! [in] The pointer to the input buffer. */ |  | ||||||
| 	const void *buf,  |  | ||||||
| 	/*! [in] The buffer length. */ |  | ||||||
| 	size_t buf_len, |  | ||||||
| 	/*! [in] The point of insertion relative to the beggining of the |  | ||||||
| 	 * ixml_membuf internal buffer. */ |  | ||||||
| 	int index); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* IXML_MEMBUF_H */ |  | ||||||
|  |  | ||||||
|  | #endif // _IXML_MEMBUF_H | ||||||
|   | |||||||
| @@ -1,49 +1,41 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef IXMLPARSER_H |  | ||||||
| #define IXMLPARSER_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|   |   | ||||||
|  | #ifndef _IXMLPARSER_H | ||||||
|  | #define _IXMLPARSER_H | ||||||
|  |  | ||||||
| #include "ixml.h" | #include "ixml.h" | ||||||
| #include "ixmlmembuf.h" | #include "ixmlmembuf.h" | ||||||
|  |  | ||||||
|  | // Parser definitions | ||||||
| /* Parser definitions */ |  | ||||||
| #define QUOT        """ | #define QUOT        """ | ||||||
| #define LT          "<" | #define LT          "<" | ||||||
| #define GT          ">" | #define GT          ">" | ||||||
| @@ -52,218 +44,77 @@ | |||||||
| #define ESC_HEX     "&#x" | #define ESC_HEX     "&#x" | ||||||
| #define ESC_DEC     "&#" | #define ESC_DEC     "&#" | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct _IXML_NamespaceURI  | typedef struct _IXML_NamespaceURI  | ||||||
| { | { | ||||||
| 	char *nsURI; |     char                        *nsURI; | ||||||
| 	char *prefix; |     char                        *prefix; | ||||||
| 	struct _IXML_NamespaceURI *nextNsURI; |     struct _IXML_NamespaceURI   *nextNsURI; | ||||||
| } IXML_NamespaceURI; | } IXML_NamespaceURI; | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct _IXML_ElementStack | typedef struct _IXML_ElementStack | ||||||
| { | { | ||||||
| 	char *element; |     char                    *element; | ||||||
| 	char *prefix; |     char                    *prefix; | ||||||
| 	char *namespaceUri; |     char                    *namespaceUri; | ||||||
| 	IXML_NamespaceURI *pNsURI; |     IXML_NamespaceURI            *pNsURI; | ||||||
| 	struct _IXML_ElementStack *nextElement; |     struct _IXML_ElementStack    *nextElement; | ||||||
| } IXML_ElementStack; | } IXML_ElementStack; | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	eELEMENT, |     eELEMENT, | ||||||
| 	eATTRIBUTE, |     eATTRIBUTE, | ||||||
| 	eCONTENT, |     eCONTENT, | ||||||
| } PARSER_STATE; | } PARSER_STATE; | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct _Parser | typedef struct _Parser | ||||||
| { | { | ||||||
| 	/*! Data buffer. */ |     char            *dataBuffer;	//data buffer | ||||||
| 	char *dataBuffer; |     char            *curPtr;		//ptr to the token parsed  | ||||||
| 	/*! Pointer to the token parsed. */ |     char            *savePtr;		//Saves for backup | ||||||
| 	char *curPtr; |     ixml_membuf     lastElem; | ||||||
| 	/*! Saves for backup. */ |     ixml_membuf     tokenBuf;     | ||||||
| 	char *savePtr; |  | ||||||
| 	ixml_membuf lastElem; |     IXML_Node           *pNeedPrefixNode; | ||||||
| 	ixml_membuf tokenBuf;     |     IXML_ElementStack   *pCurElement; | ||||||
| 	IXML_Node *pNeedPrefixNode; |     IXML_Node           *currentNodePtr; | ||||||
| 	IXML_ElementStack *pCurElement; |     PARSER_STATE        state; | ||||||
| 	IXML_Node *currentNodePtr; |  | ||||||
| 	PARSER_STATE state; |     BOOL                bHasTopLevel; | ||||||
| 	BOOL bHasTopLevel; |  | ||||||
| } Parser; | } Parser; | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Check to see whether name is a valid xml name. |  | ||||||
|  */ |  | ||||||
| BOOL Parser_isValidXmlName( |  | ||||||
| 	/*! [in] The string to be checked. */ |  | ||||||
| 	const DOMString name); |  | ||||||
|  |  | ||||||
|  | int     Parser_LoadDocument( IXML_Document **retDoc, const char * xmlFile, BOOL file); | ||||||
|  | BOOL    Parser_isValidXmlName( const DOMString name); | ||||||
|  | int     Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr); | ||||||
|  | void    Parser_freeNodeContent( IXML_Node *IXML_Nodeptr); | ||||||
|  |  | ||||||
| /*! | void    Parser_setErrorChar( char c ); | ||||||
|  * \brief Sets the error character. |  | ||||||
|  * |  | ||||||
|  * If 'c' is 0 (default), the parser is strict about XML encoding: |  | ||||||
|  * invalid UTF-8 sequences or "&" entities are rejected, and the parsing  |  | ||||||
|  * aborts. |  | ||||||
|  * |  | ||||||
|  * If 'c' is not 0, the parser is relaxed: invalid UTF-8 characters |  | ||||||
|  * are replaced by this character, and invalid "&" entities are left |  | ||||||
|  * untranslated. The parsing is then allowed to continue. |  | ||||||
|  */ |  | ||||||
| void Parser_setErrorChar( |  | ||||||
| 	/*! [in] The character to become the error character. */ |  | ||||||
| 	char c); |  | ||||||
|  |  | ||||||
|  | void    ixmlAttr_free(IXML_Attr *attrNode); | ||||||
|  | void    ixmlAttr_init(IXML_Attr *attrNode); | ||||||
|  |  | ||||||
| /*! | int     ixmlElement_setTagName(IXML_Element *element, const char *tagName); | ||||||
|  * \brief Fees a node contents. |  | ||||||
|  */ |  | ||||||
| void Parser_freeNodeContent( |  | ||||||
| 	/*! [in] The Node to process. */ |  | ||||||
| 	IXML_Node *IXML_Nodeptr); |  | ||||||
|  |  | ||||||
| int Parser_LoadDocument(IXML_Document **retDoc, const char * xmlFile, BOOL file); | void    ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap); | ||||||
|  | int     ixmlNamedNodeMap_addToNamedNodeMap(IXML_NamedNodeMap **nnMap, IXML_Node *add); | ||||||
|  |  | ||||||
| int Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr); | void    ixmlNode_init(IXML_Node *IXML_Nodeptr); | ||||||
|  | BOOL    ixmlNode_compare(IXML_Node *srcIXML_Node, IXML_Node *destIXML_Node); | ||||||
|  |  | ||||||
|  | void    ixmlNode_getElementsByTagName( IXML_Node *n, const char *tagname, IXML_NodeList **list); | ||||||
|  | void    ixmlNode_getElementsByTagNameNS( IXML_Node *IXML_Node, const char *namespaceURI, | ||||||
|  |                 const char *localName, IXML_NodeList **list); | ||||||
|  |  | ||||||
| void ixmlAttr_init(IXML_Attr *attrNode); | int     ixmlNode_setNodeProperties(IXML_Node* node, IXML_Node *src); | ||||||
|  | int     ixmlNode_setNodeName( IXML_Node* node, const DOMString qualifiedName); | ||||||
|  |  | ||||||
| /*! | void    ixmlNodeList_init(IXML_NodeList *nList); | ||||||
|  * \brief Set the given element's tagName. | int     ixmlNodeList_addToNodeList(IXML_NodeList **nList, IXML_Node *add); | ||||||
|  * |  | ||||||
|  * \return One of the following: |  | ||||||
|  * 	\li \b IXML_SUCCESS, if successfull. |  | ||||||
|  * 	\li \b IXML_FAILED, if element of tagname is \b NULL. |  | ||||||
|  * 	\li \b IXML_INSUFFICIENT_MEMORY, if there is no memory to allocate the |  | ||||||
|  * 		buffer for the element's tagname. |  | ||||||
|  */ |  | ||||||
| int ixmlElement_setTagName( |  | ||||||
| 	/*! [in] The element to change the tagname. */ |  | ||||||
| 	IXML_Element *element, |  | ||||||
| 	/*! [in] The new tagName for the element. */ |  | ||||||
| 	const char *tagName); |  | ||||||
|  |  | ||||||
|  | #endif  // _IXMLPARSER_H | ||||||
| /*! |  | ||||||
|  * \brief Initializes a NamedNodeMap object. |  | ||||||
|  */ |  | ||||||
| void ixmlNamedNodeMap_init( |  | ||||||
| 	/*! [in] The named node map to process. */ |  | ||||||
| 	IXML_NamedNodeMap *nnMap); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Add a node to a NamedNodeMap. |  | ||||||
|  * |  | ||||||
|  * \return IXML_SUCCESS or failure. |  | ||||||
|  */ |  | ||||||
| int ixmlNamedNodeMap_addToNamedNodeMap( |  | ||||||
| 	/* [in] The named node map. */ |  | ||||||
| 	IXML_NamedNodeMap **nnMap, |  | ||||||
| 	/* [in] The node to add. */ |  | ||||||
| 	IXML_Node *add); |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Add a node to nodelist. |  | ||||||
|  */ |  | ||||||
| int ixmlNodeList_addToNodeList( |  | ||||||
| 	/*! [in] The pointer to the nodelist. */ |  | ||||||
| 	IXML_NodeList **nList, |  | ||||||
| 	/*! [in] The node to add. */ |  | ||||||
| 	IXML_Node *add); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Intializes a node. |  | ||||||
|  */ |  | ||||||
| void ixmlNode_init( |  | ||||||
| 	/*! [in] The \b Node to iniatialize. */ |  | ||||||
| 	IN IXML_Node *nodeptr); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Compare two nodes to see whether they are the same node. |  | ||||||
|  * Parent, sibling and children node are ignored. |  | ||||||
|  * |  | ||||||
|  * \return |  | ||||||
|  * 	\li TRUE, the two nodes are the same. |  | ||||||
|  * 	\li FALSE, the two nodes are not the same. |  | ||||||
|  */ |  | ||||||
| BOOL ixmlNode_compare( |  | ||||||
| 	/*! [in] The first \b Node. */ |  | ||||||
| 	IXML_Node *srcNode, |  | ||||||
| 	/*! [in] The second \b Node. */ |  | ||||||
|  	IXML_Node *destNode); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Returns a nodeList of all descendant Elements with a given tagName, |  | ||||||
|  * in the order in which they are encountered in a traversal of this element |  | ||||||
|  * tree. |  | ||||||
|  */ |  | ||||||
| void ixmlNode_getElementsByTagName( |  | ||||||
| 	/*! [in] The \b Node tree. */ |  | ||||||
| 	IXML_Node *n, |  | ||||||
| 	/*! [in] The tag name to match. */ |  | ||||||
| 	const char *tagname, |  | ||||||
| 	/*! [out] The output \b NodeList. */ |  | ||||||
| 	IXML_NodeList **list); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Returns a nodeList of all the descendant Elements with a given local |  | ||||||
|  * name and namespace URI in the order in which they are encountered in a |  | ||||||
|  * preorder traversal of this Elememt tree.		 |  | ||||||
|  */ |  | ||||||
| void ixmlNode_getElementsByTagNameNS( |  | ||||||
| 	/*! [in] The \b Element tree. */ |  | ||||||
| 	IXML_Node *n, |  | ||||||
| 	/*! [in] The name space to match. */ |  | ||||||
| 	const char *namespaceURI, |  | ||||||
| 	/*! [in] The local name to match. */ |  | ||||||
| 	const char *localName, |  | ||||||
| 	/*! [out] The output \b NodeList. */ |  | ||||||
| 	IXML_NodeList **list); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  * |  | ||||||
|  * \return  |  | ||||||
|  */ |  | ||||||
| int ixmlNode_setNodeName( |  | ||||||
| 	/*! [in] The \b Node. */ |  | ||||||
| 	IXML_Node *node, |  | ||||||
| 	/*! [in] . */ |  | ||||||
| 	const DOMString qualifiedName); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  * |  | ||||||
|  * \return  |  | ||||||
|  */ |  | ||||||
| int ixmlNode_setNodeProperties( |  | ||||||
| 	/*! [in] . */ |  | ||||||
| 	IXML_Node *destNode, |  | ||||||
| 	/*! [in] . */ |  | ||||||
| 	IXML_Node *src); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Initializes a nodelist  |  | ||||||
|  */ |  | ||||||
| void ixmlNodeList_init( |  | ||||||
| 	/*! [in,out] The \b NodeList to initialize. */ |  | ||||||
| 	IXML_NodeList *nList); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif  /* IXMLPARSER_H */ |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										936
									
								
								ixml/src/ixml.c
									
									
									
									
									
								
							
							
						
						
									
										936
									
								
								ixml/src/ixml.c
									
									
									
									
									
								
							| @@ -1,469 +1,531 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ixmldebug.h" |  | ||||||
| #include "ixmlmembuf.h" | #include "ixmlmembuf.h" | ||||||
| #include "ixmlparser.h" | #include "ixmlparser.h" | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| #include <stdlib.h> /* for free() */ | *   copy_with_escape | ||||||
| #include <string.h> | * | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
| /*! | static void | ||||||
|  * \brief Appends a string to a buffer, substituting some characters by escape | copy_with_escape( INOUT ixml_membuf * buf, | ||||||
|  * sequences. |                   IN const char *p ) | ||||||
|  */ |  | ||||||
| static void copy_with_escape( |  | ||||||
| 	/*! [in,out] The input/output buffer. */ |  | ||||||
| 	ixml_membuf *buf, |  | ||||||
| 	/*! [in] The string to copy from. */ |  | ||||||
| 	const char *p) |  | ||||||
| { | { | ||||||
| 	int i; |     int i; | ||||||
| 	int plen; |     int plen; | ||||||
|  |  | ||||||
| 	if (p == NULL) { |     if( p == NULL ) | ||||||
| 		return; |         return; | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	plen = strlen( p ); |     plen = strlen( p ); | ||||||
|  |  | ||||||
| 	for (i = 0; i < plen; i++) { |     for( i = 0; i < plen; i++ ) { | ||||||
| 		switch (p[i]) { |         switch ( p[i] ) { | ||||||
| 		case '<': |             case '<': | ||||||
| 			ixml_membuf_append_str(buf, "<"); |                 ixml_membuf_append_str( buf, "<" ); | ||||||
| 			break; |                 break; | ||||||
|  |  | ||||||
| 		case '>': |             case '>': | ||||||
| 			ixml_membuf_append_str(buf, ">"); |                 ixml_membuf_append_str( buf, ">" ); | ||||||
| 			break; |                 break; | ||||||
|  |  | ||||||
| 		case '&': |             case '&': | ||||||
| 			ixml_membuf_append_str(buf, "&"); |                 ixml_membuf_append_str( buf, "&" ); | ||||||
| 			break; |                 break; | ||||||
|  |  | ||||||
| 		case '\'': |             case '\'': | ||||||
| 			ixml_membuf_append_str(buf, "'"); |                 ixml_membuf_append_str( buf, "'" ); | ||||||
| 			break; |                 break; | ||||||
|  |  | ||||||
| 		case '\"': |             case '\"': | ||||||
| 			ixml_membuf_append_str(buf, """); |                 ixml_membuf_append_str( buf, """ ); | ||||||
| 			break; |                 break; | ||||||
|  |  | ||||||
| 		default: |             default: | ||||||
| 			ixml_membuf_append(buf, &p[i]); |                 ixml_membuf_append( buf, &p[i] ); | ||||||
| 			break; |         } | ||||||
| 		} |     } | ||||||
| 	} | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *	ixmlPrintDomTreeRecursive | ||||||
|  | *       It is a recursive function to print all the node in a tree. | ||||||
|  | *       Internal to parser only. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr, | ||||||
|  |                            IN ixml_membuf * buf ) | ||||||
|  | { | ||||||
|  |     const char *nodeName = NULL; | ||||||
|  |     const char *nodeValue = NULL; | ||||||
|  |     IXML_Node *child = NULL, | ||||||
|  |      *sibling = NULL; | ||||||
|  |  | ||||||
|  |     if( nodeptr != NULL ) { | ||||||
|  |         nodeName = ( const char * )ixmlNode_getNodeName( nodeptr ); | ||||||
|  |         nodeValue = ixmlNode_getNodeValue( nodeptr ); | ||||||
|  |  | ||||||
|  |         switch ( ixmlNode_getNodeType( nodeptr ) ) { | ||||||
|  |  | ||||||
|  |             case eTEXT_NODE: | ||||||
|  |                 copy_with_escape( buf, nodeValue ); | ||||||
|  |                 break; | ||||||
|  |  | ||||||
|  |             case eCDATA_SECTION_NODE: | ||||||
|  |                 ixml_membuf_append_str( buf, "<![CDATA[" ); | ||||||
|  |                 ixml_membuf_append_str( buf, nodeValue ); | ||||||
|  |                 ixml_membuf_append_str( buf, "]]>" ); | ||||||
|  |                 break; | ||||||
|  |  | ||||||
|  |             case ePROCESSING_INSTRUCTION_NODE: | ||||||
|  |                 ixml_membuf_append_str( buf, "<?" ); | ||||||
|  |                 ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |                 ixml_membuf_append_str( buf, " " ); | ||||||
|  |                 copy_with_escape( buf, nodeValue ); | ||||||
|  |                 ixml_membuf_append_str( buf, "?>\n" ); | ||||||
|  |                 break; | ||||||
|  |  | ||||||
|  |             case eDOCUMENT_NODE: | ||||||
|  |                 ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild | ||||||
|  |                                            ( nodeptr ), buf ); | ||||||
|  |                 break; | ||||||
|  |  | ||||||
|  |             case eATTRIBUTE_NODE: | ||||||
|  |                 ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |                 ixml_membuf_append_str( buf, "=\"" ); | ||||||
|  |                 copy_with_escape( buf, nodeValue ); | ||||||
|  |                 ixml_membuf_append_str( buf, "\"" ); | ||||||
|  |  | ||||||
|  |                 if( nodeptr->nextSibling != NULL ) { | ||||||
|  |                     ixml_membuf_append_str( buf, " " ); | ||||||
|  |                     ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf ); | ||||||
|  |                 } | ||||||
|  |                 break; | ||||||
|  |  | ||||||
|  |             case eELEMENT_NODE: | ||||||
|  |                 ixml_membuf_append_str( buf, "<" ); | ||||||
|  |                 ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |  | ||||||
|  |                 if( nodeptr->firstAttr != NULL ) { | ||||||
|  |                     ixml_membuf_append_str( buf, " " ); | ||||||
|  |                     ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 child = ixmlNode_getFirstChild( nodeptr ); | ||||||
|  |                 if( ( child != NULL ) | ||||||
|  |                     && ( ixmlNode_getNodeType( child ) == | ||||||
|  |                          eELEMENT_NODE ) ) { | ||||||
|  |                     ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|  |                 } else { | ||||||
|  |                     ixml_membuf_append_str( buf, ">" ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 //  output the children | ||||||
|  |                 ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild | ||||||
|  |                                            ( nodeptr ), buf ); | ||||||
|  |  | ||||||
|  |                 // Done with children.  Output the end tag. | ||||||
|  |                 ixml_membuf_append_str( buf, "</" ); | ||||||
|  |                 ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |  | ||||||
|  |                 sibling = ixmlNode_getNextSibling( nodeptr ); | ||||||
|  |                 if( sibling != NULL | ||||||
|  |                     && ixmlNode_getNodeType( sibling ) == eTEXT_NODE ) { | ||||||
|  |                     ixml_membuf_append_str( buf, ">" ); | ||||||
|  |                 } else { | ||||||
|  |                     ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|  |                 } | ||||||
|  |                 ixmlPrintDomTreeRecursive( ixmlNode_getNextSibling | ||||||
|  |                                            ( nodeptr ), buf ); | ||||||
|  |                 break; | ||||||
|  |  | ||||||
|  |             default: | ||||||
|  |                 break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlPrintDomTree | ||||||
|  | *       Print a DOM tree. | ||||||
|  | *       Element, and Attribute nodes are handled differently. | ||||||
|  | *       We don't want to print the Element and Attribute nodes' sibling. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlPrintDomTree( IN IXML_Node * nodeptr, | ||||||
|  |                   IN ixml_membuf * buf ) | ||||||
|  | { | ||||||
|  |     const char *nodeName = NULL; | ||||||
|  |     const char *nodeValue = NULL; | ||||||
|  |     IXML_Node *child = NULL; | ||||||
|  |  | ||||||
|  |     if( ( nodeptr == NULL ) || ( buf == NULL ) ) { | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     nodeName = ( const char * )ixmlNode_getNodeName( nodeptr ); | ||||||
|  |     nodeValue = ixmlNode_getNodeValue( nodeptr ); | ||||||
|  |  | ||||||
|  |     switch ( ixmlNode_getNodeType( nodeptr ) ) { | ||||||
|  |  | ||||||
|  |         case eTEXT_NODE: | ||||||
|  |         case eCDATA_SECTION_NODE: | ||||||
|  |         case ePROCESSING_INSTRUCTION_NODE: | ||||||
|  |         case eDOCUMENT_NODE: | ||||||
|  |             ixmlPrintDomTreeRecursive( nodeptr, buf ); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         case eATTRIBUTE_NODE: | ||||||
|  |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |             ixml_membuf_append_str( buf, "=\"" ); | ||||||
|  |             copy_with_escape( buf, nodeValue ); | ||||||
|  |             ixml_membuf_append_str( buf, "\"" ); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         case eELEMENT_NODE: | ||||||
|  |             ixml_membuf_append_str( buf, "<" ); | ||||||
|  |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |  | ||||||
|  |             if( nodeptr->firstAttr != NULL ) { | ||||||
|  |                 ixml_membuf_append_str( buf, " " ); | ||||||
|  |                 ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             child = ixmlNode_getFirstChild( nodeptr ); | ||||||
|  |             if( ( child != NULL ) | ||||||
|  |                 && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) { | ||||||
|  |                 ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|  |             } else { | ||||||
|  |                 ixml_membuf_append_str( buf, ">" ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             //  output the children | ||||||
|  |             ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild( nodeptr ), | ||||||
|  |                                        buf ); | ||||||
|  |  | ||||||
|  |             // Done with children.  Output the end tag. | ||||||
|  |             ixml_membuf_append_str( buf, "</" ); | ||||||
|  |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |             ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlDomTreetoString | ||||||
|  | *       Converts a DOM tree into a text string | ||||||
|  | *       Element, and Attribute nodes are handled differently. | ||||||
|  | *       We don't want to print the Element and Attribute nodes' sibling. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlDomTreetoString( IN IXML_Node * nodeptr, | ||||||
|  |                      IN ixml_membuf * buf ) | ||||||
|  | { | ||||||
|  |     const char *nodeName = NULL; | ||||||
|  |     const char *nodeValue = NULL; | ||||||
|  |     IXML_Node *child = NULL; | ||||||
|  |  | ||||||
|  |     if( ( nodeptr == NULL ) || ( buf == NULL ) ) { | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     nodeName = ( const char * )ixmlNode_getNodeName( nodeptr ); | ||||||
|  |     nodeValue = ixmlNode_getNodeValue( nodeptr ); | ||||||
|  |  | ||||||
|  |     switch ( ixmlNode_getNodeType( nodeptr ) ) { | ||||||
|  |  | ||||||
|  |         case eTEXT_NODE: | ||||||
|  |         case eCDATA_SECTION_NODE: | ||||||
|  |         case ePROCESSING_INSTRUCTION_NODE: | ||||||
|  |         case eDOCUMENT_NODE: | ||||||
|  |             ixmlPrintDomTreeRecursive( nodeptr, buf ); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         case eATTRIBUTE_NODE: | ||||||
|  |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |             ixml_membuf_append_str( buf, "=\"" ); | ||||||
|  |             copy_with_escape( buf, nodeValue ); | ||||||
|  |             ixml_membuf_append_str( buf, "\"" ); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         case eELEMENT_NODE: | ||||||
|  |             ixml_membuf_append_str( buf, "<" ); | ||||||
|  |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |  | ||||||
|  |             if( nodeptr->firstAttr != NULL ) { | ||||||
|  |                 ixml_membuf_append_str( buf, " " ); | ||||||
|  |                 ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             child = ixmlNode_getFirstChild( nodeptr ); | ||||||
|  |             if( ( child != NULL ) | ||||||
|  |                 && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) { | ||||||
|  |                 ixml_membuf_append_str( buf, ">" ); | ||||||
|  |             } else { | ||||||
|  |                 ixml_membuf_append_str( buf, ">" ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             //  output the children | ||||||
|  |             ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild( nodeptr ), | ||||||
|  |                                        buf ); | ||||||
|  |  | ||||||
|  |             // Done with children.  Output the end tag. | ||||||
|  |             ixml_membuf_append_str( buf, "</" ); | ||||||
|  |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|  |             ixml_membuf_append_str( buf, ">" ); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlLoadDocumentEx | ||||||
|  | *       Parses the given file, and returns the DOM tree from it. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | int | ||||||
|  | ixmlLoadDocumentEx( IN const char *xmlFile, | ||||||
|  |                     IXML_Document ** doc ) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     if( ( xmlFile == NULL ) || ( doc == NULL ) ) { | ||||||
|  |         return IXML_INVALID_PARAMETER; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return Parser_LoadDocument( doc, xmlFile, TRUE ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlLoadDocument | ||||||
|  | *       Parses the given file, and returns the DOM tree from it. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | IXML_Document * | ||||||
|  | ixmlLoadDocument( IN const char *xmlFile ) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     IXML_Document *doc = NULL; | ||||||
|  |  | ||||||
|  |     ixmlLoadDocumentEx( xmlFile, &doc ); | ||||||
|  |     return doc; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlPrintDocument | ||||||
|  | *       Prints entire document, prepending XML prolog first. | ||||||
|  | *       Puts lots of white spaces. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  |  | ||||||
|  | DOMString | ||||||
|  | ixmlPrintDocument(IXML_Document *doc) | ||||||
|  | { | ||||||
|  |     IXML_Node* rootNode = ( IXML_Node * )doc; | ||||||
|  |     ixml_membuf memBuf; | ||||||
|  |     ixml_membuf *buf = &memBuf; | ||||||
|  |  | ||||||
|  |     if( rootNode == NULL ) { | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ixml_membuf_init( buf ); | ||||||
|  |     ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" ); | ||||||
|  |     ixmlPrintDomTree( rootNode, buf ); | ||||||
|  |     return buf->buf; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlPrintNode | ||||||
|  | *       Print DOM tree under node. Puts lots of white spaces | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | DOMString | ||||||
|  | ixmlPrintNode( IN IXML_Node * node ) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     ixml_membuf memBuf; | ||||||
|  |     ixml_membuf *buf = &memBuf; | ||||||
|  |  | ||||||
|  |     if( node == NULL ) { | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ixml_membuf_init( buf ); | ||||||
|  |     ixmlPrintDomTree( node, buf ); | ||||||
|  |     return buf->buf; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlDocumenttoString | ||||||
|  | *       converts DOM tree under node to text string, | ||||||
|  | *       prepending XML prolog first. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  |  | ||||||
|  | DOMString | ||||||
|  | ixmlDocumenttoString(IXML_Document *doc) | ||||||
|  | { | ||||||
|  |     IXML_Node* rootNode = ( IXML_Node * )doc; | ||||||
|  |     ixml_membuf memBuf; | ||||||
|  |     ixml_membuf *buf = &memBuf; | ||||||
|  |  | ||||||
|  |     if( rootNode == NULL ) { | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ixml_membuf_init( buf ); | ||||||
|  |     ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" ); | ||||||
|  |     ixmlDomTreetoString( rootNode, buf ); | ||||||
|  |     return buf->buf; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlNodetoString | ||||||
|  | *       converts DOM tree under node to text string | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | DOMString | ||||||
|  | ixmlNodetoString( IN IXML_Node * node ) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     ixml_membuf memBuf; | ||||||
|  |     ixml_membuf *buf = &memBuf; | ||||||
|  |  | ||||||
|  |     if( node == NULL ) { | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ixml_membuf_init( buf ); | ||||||
|  |     ixmlDomTreetoString( node, buf ); | ||||||
|  |     return buf->buf; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
|  | *   ixmlRelaxParser | ||||||
|  | *       Makes the XML parser more tolerant to malformed text. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlRelaxParser(char errorChar) | ||||||
|  | { | ||||||
|  |     Parser_setErrorChar( errorChar ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*================================================================ | ||||||
|  * \brief Recursive function to print all the node in a tree. | *   ixmlParseBufferEx | ||||||
|  * Internal to parser only. | *       Parse xml file stored in buffer. | ||||||
|  */ | *       External function. | ||||||
| static void ixmlPrintDomTreeRecursive( | * | ||||||
| 	/*! [in] \todo documentation. */ | *=================================================================*/ | ||||||
| 	IXML_Node *nodeptr, | int | ||||||
| 	/*! [in] \todo documentation. */ | ixmlParseBufferEx( IN const char *buffer, | ||||||
| 	ixml_membuf *buf) |                    IXML_Document ** retDoc ) | ||||||
| { | { | ||||||
| 	const char *nodeName = NULL; |  | ||||||
| 	const char *nodeValue = NULL; |  | ||||||
| 	IXML_Node *child = NULL, |  | ||||||
| 	*sibling = NULL; |  | ||||||
|  |  | ||||||
| 	if (nodeptr != NULL) { |     if( ( buffer == NULL ) || ( retDoc == NULL ) ) { | ||||||
| 		nodeName = (const char *)ixmlNode_getNodeName(nodeptr); |         return IXML_INVALID_PARAMETER; | ||||||
| 		nodeValue = ixmlNode_getNodeValue(nodeptr); |     } | ||||||
|  |  | ||||||
| 		switch (ixmlNode_getNodeType(nodeptr)) { |     if( buffer[0] == '\0' ) { | ||||||
| 		case eTEXT_NODE: |         return IXML_INVALID_PARAMETER; | ||||||
| 			copy_with_escape(buf, nodeValue); |     } | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case eCDATA_SECTION_NODE: |     return Parser_LoadDocument( retDoc, buffer, FALSE ); | ||||||
| 			ixml_membuf_append_str(buf, "<![CDATA["); |  | ||||||
| 			ixml_membuf_append_str(buf, nodeValue); |  | ||||||
| 			ixml_membuf_append_str(buf, "]]>"); |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case ePROCESSING_INSTRUCTION_NODE: |  | ||||||
| 			ixml_membuf_append_str(buf, "<?"); |  | ||||||
| 			ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 			ixml_membuf_append_str(buf, " "); |  | ||||||
| 			copy_with_escape(buf, nodeValue); |  | ||||||
| 			ixml_membuf_append_str(buf, "?>\n"); |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case eDOCUMENT_NODE: |  | ||||||
| 			ixmlPrintDomTreeRecursive( |  | ||||||
| 				ixmlNode_getFirstChild(nodeptr), buf); |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case eATTRIBUTE_NODE: |  | ||||||
| 			ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 			ixml_membuf_append_str(buf, "=\""); |  | ||||||
| 			copy_with_escape(buf, nodeValue); |  | ||||||
| 			ixml_membuf_append_str(buf, "\""); |  | ||||||
| 			if (nodeptr->nextSibling != NULL) { |  | ||||||
| 				ixml_membuf_append_str(buf, " "); |  | ||||||
| 				ixmlPrintDomTreeRecursive(nodeptr->nextSibling, buf); |  | ||||||
| 			} |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case eELEMENT_NODE: |  | ||||||
| 			ixml_membuf_append_str(buf, "<"); |  | ||||||
| 			ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 			if (nodeptr->firstAttr != NULL) { |  | ||||||
| 				ixml_membuf_append_str(buf, " "); |  | ||||||
| 				ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf); |  | ||||||
| 			} |  | ||||||
| 			child = ixmlNode_getFirstChild(nodeptr); |  | ||||||
| 			if (child != NULL && |  | ||||||
| 			    ixmlNode_getNodeType(child) == eELEMENT_NODE) { |  | ||||||
| 				ixml_membuf_append_str(buf, ">\r\n"); |  | ||||||
| 			} else { |  | ||||||
| 				ixml_membuf_append_str(buf, ">"); |  | ||||||
| 			} |  | ||||||
| 			//  output the children |  | ||||||
| 			ixmlPrintDomTreeRecursive( |  | ||||||
| 				ixmlNode_getFirstChild(nodeptr), buf); |  | ||||||
|  |  | ||||||
| 			// Done with children.  Output the end tag. |  | ||||||
| 			ixml_membuf_append_str(buf, "</"); |  | ||||||
| 			ixml_membuf_append_str(buf, nodeName); |  | ||||||
|  |  | ||||||
| 			sibling = ixmlNode_getNextSibling(nodeptr); |  | ||||||
| 			if (sibling != NULL && |  | ||||||
| 			    ixmlNode_getNodeType(sibling) == eTEXT_NODE) { |  | ||||||
| 				ixml_membuf_append_str( buf, ">" ); |  | ||||||
| 			} else { |  | ||||||
| 				ixml_membuf_append_str( buf, ">\r\n" ); |  | ||||||
| 			} |  | ||||||
| 			ixmlPrintDomTreeRecursive( |  | ||||||
| 				ixmlNode_getNextSibling(nodeptr), buf); |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		default: |  | ||||||
| 			IxmlPrintf("(%s::ixmlPrintDomTreeRecursive) line %d: " |  | ||||||
| 				"Warning, unknown node type %d\n", |  | ||||||
| 				__FILE__, __LINE__, ixmlNode_getNodeType(nodeptr)); |  | ||||||
| 			break; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| /*! | *   ixmlParseBuffer | ||||||
|  * \brief Print a DOM tree. | *       Parse xml file stored in buffer. | ||||||
|  * | *       External function. | ||||||
|  * Element, and Attribute nodes are handled differently. We don't want to print | * | ||||||
|  * the Element and Attribute nodes' sibling. | *=================================================================*/ | ||||||
|  */ | IXML_Document * | ||||||
| static void ixmlPrintDomTree( | ixmlParseBuffer( IN const char *buffer ) | ||||||
| 	/*! [in] \todo documentation. */ |  | ||||||
| 	IXML_Node *nodeptr, |  | ||||||
| 	/*! [in] \todo documentation. */ |  | ||||||
| 	ixml_membuf *buf) |  | ||||||
| { | { | ||||||
| 	const char *nodeName = NULL; |     IXML_Document *doc = NULL; | ||||||
| 	const char *nodeValue = NULL; |  | ||||||
| 	IXML_Node *child = NULL; |  | ||||||
|  |  | ||||||
| 	if (nodeptr == NULL || buf == NULL) { |     ixmlParseBufferEx( buffer, &doc ); | ||||||
| 		return; |     return doc; | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	nodeName = (const char *)ixmlNode_getNodeName(nodeptr); |  | ||||||
| 	nodeValue = ixmlNode_getNodeValue(nodeptr); |  | ||||||
| 	switch (ixmlNode_getNodeType(nodeptr)) { |  | ||||||
| 	case eTEXT_NODE: |  | ||||||
| 	case eCDATA_SECTION_NODE: |  | ||||||
| 	case ePROCESSING_INSTRUCTION_NODE: |  | ||||||
| 	case eDOCUMENT_NODE: |  | ||||||
| 		ixmlPrintDomTreeRecursive(nodeptr, buf); |  | ||||||
| 		break; |  | ||||||
|  |  | ||||||
| 	case eATTRIBUTE_NODE: |  | ||||||
| 		ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 		ixml_membuf_append_str(buf, "=\""); |  | ||||||
| 		copy_with_escape(buf, nodeValue); |  | ||||||
| 		ixml_membuf_append_str(buf, "\""); |  | ||||||
| 		break; |  | ||||||
|  |  | ||||||
| 	case eELEMENT_NODE: |  | ||||||
| 		ixml_membuf_append_str(buf, "<"); |  | ||||||
| 		ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 		if (nodeptr->firstAttr != NULL) { |  | ||||||
| 			ixml_membuf_append_str(buf, " "); |  | ||||||
| 			ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf); |  | ||||||
| 		} |  | ||||||
| 		child = ixmlNode_getFirstChild(nodeptr); |  | ||||||
| 		if (child != NULL && |  | ||||||
| 		    ixmlNode_getNodeType(child) == eELEMENT_NODE) { |  | ||||||
| 			ixml_membuf_append_str(buf, ">\r\n"); |  | ||||||
| 		} else { |  | ||||||
| 			ixml_membuf_append_str(buf, ">"); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// output the children |  | ||||||
| 		ixmlPrintDomTreeRecursive( |  | ||||||
| 			ixmlNode_getFirstChild(nodeptr), buf); |  | ||||||
|  |  | ||||||
| 		// Done with children. Output the end tag. |  | ||||||
| 		ixml_membuf_append_str(buf, "</"); |  | ||||||
| 		ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 		ixml_membuf_append_str(buf, ">\r\n"); |  | ||||||
| 		break; |  | ||||||
|  |  | ||||||
| 	default: |  | ||||||
| 		IxmlPrintf("(%s::ixmlPrintDomTree) line %d: " |  | ||||||
| 			"Warning, unknown node type %d\n", |  | ||||||
| 			__FILE__, __LINE__, ixmlNode_getNodeType(nodeptr)); |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| /*! | *   ixmlCloneDOMString | ||||||
|  * \brief Converts a DOM tree into a text string. | *       Clones a DOM String. | ||||||
|  * | *       External function. | ||||||
|  * Element, and Attribute nodes are handled differently. We don't want to print | * | ||||||
|  * the Element and Attribute nodes' sibling. | *=================================================================*/ | ||||||
|  */ | DOMString | ||||||
| static void ixmlDomTreetoString( | ixmlCloneDOMString( IN const DOMString src ) | ||||||
| 	/*! [in] \todo documentation. */ |  | ||||||
| 	IXML_Node *nodeptr, |  | ||||||
| 	/*! [in] \todo documentation. */ |  | ||||||
| 	ixml_membuf *buf) |  | ||||||
| { | { | ||||||
| 	const char *nodeName = NULL; |     if( src == NULL ) { | ||||||
| 	const char *nodeValue = NULL; |         return NULL; | ||||||
| 	IXML_Node *child = NULL; |     } | ||||||
|  |  | ||||||
| 	if (nodeptr == NULL || buf == NULL) { |     return ( strdup( src ) ); | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	nodeName = (const char *)ixmlNode_getNodeName(nodeptr); |  | ||||||
| 	nodeValue = ixmlNode_getNodeValue(nodeptr); |  | ||||||
|  |  | ||||||
| 	switch (ixmlNode_getNodeType(nodeptr)) { |  | ||||||
| 	case eTEXT_NODE: |  | ||||||
| 	case eCDATA_SECTION_NODE: |  | ||||||
| 	case ePROCESSING_INSTRUCTION_NODE: |  | ||||||
| 	case eDOCUMENT_NODE: |  | ||||||
| 		ixmlPrintDomTreeRecursive(nodeptr, buf); |  | ||||||
| 		break; |  | ||||||
|  |  | ||||||
| 	case eATTRIBUTE_NODE: |  | ||||||
| 		ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 		ixml_membuf_append_str(buf, "=\""); |  | ||||||
| 		copy_with_escape(buf, nodeValue ); |  | ||||||
| 		ixml_membuf_append_str(buf, "\""); |  | ||||||
| 		break; |  | ||||||
|  |  | ||||||
| 	case eELEMENT_NODE: |  | ||||||
| 		ixml_membuf_append_str(buf, "<"); |  | ||||||
| 		ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 		if (nodeptr->firstAttr != NULL) { |  | ||||||
| 			ixml_membuf_append_str(buf, " "); |  | ||||||
| 			ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf); |  | ||||||
| 		} |  | ||||||
| 		child = ixmlNode_getFirstChild(nodeptr); |  | ||||||
| 		if (child != NULL && |  | ||||||
| 		    ixmlNode_getNodeType(child) == eELEMENT_NODE) { |  | ||||||
| 			ixml_membuf_append_str(buf, ">"); |  | ||||||
| 		} else { |  | ||||||
| 			ixml_membuf_append_str(buf, ">"); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		//  output the children |  | ||||||
| 		ixmlPrintDomTreeRecursive(ixmlNode_getFirstChild(nodeptr), buf); |  | ||||||
|  |  | ||||||
| 		// Done with children.  Output the end tag. |  | ||||||
| 		ixml_membuf_append_str(buf, "</"); |  | ||||||
| 		ixml_membuf_append_str(buf, nodeName); |  | ||||||
| 		ixml_membuf_append_str(buf, ">"); |  | ||||||
| 		break; |  | ||||||
|  |  | ||||||
| 	default: |  | ||||||
| 		IxmlPrintf("(%s::ixmlDomTreetoString) line %d: " |  | ||||||
| 			"Warning, unknown node type %d\n", |  | ||||||
| 			__FILE__, __LINE__, ixmlNode_getNodeType(nodeptr)); |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| int ixmlLoadDocumentEx(const char *xmlFile, IXML_Document **doc) | *   ixmlFreeDOMString | ||||||
|  | *       Frees a DOM String. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlFreeDOMString( IN DOMString buf ) | ||||||
| { | { | ||||||
| 	if (xmlFile == NULL || doc == NULL) { |     if( buf != NULL ) { | ||||||
| 		return IXML_INVALID_PARAMETER; |         free( buf ); | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	return Parser_LoadDocument(doc, xmlFile, TRUE); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| IXML_Document *ixmlLoadDocument(const char *xmlFile) |  | ||||||
| { |  | ||||||
| 	IXML_Document *doc = NULL; |  | ||||||
|  |  | ||||||
| 	ixmlLoadDocumentEx(xmlFile, &doc); |  | ||||||
|  |  | ||||||
| 	return doc; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DOMString ixmlPrintDocument(IXML_Document *doc) |  | ||||||
| { |  | ||||||
| 	IXML_Node* rootNode = (IXML_Node *)doc; |  | ||||||
| 	ixml_membuf memBuf; |  | ||||||
| 	ixml_membuf *buf = &memBuf; |  | ||||||
|  |  | ||||||
| 	if(rootNode == NULL) { |  | ||||||
| 		return NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ixml_membuf_init(buf); |  | ||||||
| 	ixml_membuf_append_str(buf, "<?xml version=\"1.0\"?>\r\n"); |  | ||||||
| 	ixmlPrintDomTree(rootNode, buf); |  | ||||||
|  |  | ||||||
| 	return buf->buf; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DOMString ixmlPrintNode(IXML_Node *node) |  | ||||||
| { |  | ||||||
| 	ixml_membuf memBuf; |  | ||||||
| 	ixml_membuf *buf = &memBuf; |  | ||||||
|  |  | ||||||
| 	if (node == NULL) { |  | ||||||
| 		return NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ixml_membuf_init(buf); |  | ||||||
| 	ixmlPrintDomTree(node, buf); |  | ||||||
|  |  | ||||||
| 	return buf->buf; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DOMString ixmlDocumenttoString(IXML_Document *doc) |  | ||||||
| { |  | ||||||
| 	IXML_Node* rootNode = (IXML_Node *)doc; |  | ||||||
| 	ixml_membuf memBuf; |  | ||||||
| 	ixml_membuf *buf = &memBuf; |  | ||||||
|  |  | ||||||
| 	if(rootNode == NULL) { |  | ||||||
| 		return NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ixml_membuf_init(buf); |  | ||||||
| 	ixml_membuf_append_str(buf, "<?xml version=\"1.0\"?>\r\n"); |  | ||||||
| 	ixmlDomTreetoString(rootNode, buf); |  | ||||||
|  |  | ||||||
| 	return buf->buf; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DOMString ixmlNodetoString(IXML_Node *node) |  | ||||||
| { |  | ||||||
| 	ixml_membuf memBuf; |  | ||||||
| 	ixml_membuf *buf = &memBuf; |  | ||||||
|  |  | ||||||
| 	if (node == NULL) { |  | ||||||
| 		return NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ixml_membuf_init(buf); |  | ||||||
| 	ixmlDomTreetoString(node, buf); |  | ||||||
|  |  | ||||||
| 	return buf->buf; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void ixmlRelaxParser(char errorChar) |  | ||||||
| { |  | ||||||
| 	Parser_setErrorChar(errorChar); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int ixmlParseBufferEx(const char *buffer, IXML_Document **retDoc) |  | ||||||
| { |  | ||||||
| 	if (buffer == NULL || retDoc == NULL) { |  | ||||||
| 		return IXML_INVALID_PARAMETER; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (buffer[0] == '\0') { |  | ||||||
| 		return IXML_INVALID_PARAMETER; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return Parser_LoadDocument(retDoc, buffer, FALSE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| IXML_Document *ixmlParseBuffer(const char *buffer) |  | ||||||
| { |  | ||||||
| 	IXML_Document *doc = NULL; |  | ||||||
|  |  | ||||||
| 	ixmlParseBufferEx(buffer, &doc); |  | ||||||
|  |  | ||||||
| 	return doc; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DOMString ixmlCloneDOMString(const DOMString src) |  | ||||||
| { |  | ||||||
| 	if (src == NULL) { |  | ||||||
| 		return NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return strdup(src); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void ixmlFreeDOMString(DOMString buf) |  | ||||||
| { |  | ||||||
| 	if (buf != NULL) { |  | ||||||
| 		free(buf); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,31 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "autoconfig.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ixmldebug.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdarg.h> |  | ||||||
| #include <stdio.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef DEBUG |  | ||||||
| void IxmlPrintf( |  | ||||||
| 	const char *FmtStr, |  | ||||||
| 	...) |  | ||||||
| { |  | ||||||
| 	va_list ArgList; |  | ||||||
| 	 |  | ||||||
| 	va_start(ArgList, FmtStr); |  | ||||||
| 	vfprintf(stdout, FmtStr, ArgList); |  | ||||||
| 	fflush(stdout); |  | ||||||
| 	va_end(ArgList); |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| @@ -1,218 +1,236 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ixmlmembuf.h" |  | ||||||
| #include "ixml.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  | #include "ixmlmembuf.h" | ||||||
|  | #include "ixml.h" | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| /*! | *   ixml_membuf_set_size | ||||||
|  * \brief Increases or decreases buffer capacity so that at least 'new_length' | * | ||||||
|  * bytes can be stored. | *   Increases or decreases buffer cap so that at least | ||||||
|  * | *   'new_length' bytes can be stored | ||||||
|  * On error, m's fields do not change. | * | ||||||
|  * | *   On error, m's fields do not change. | ||||||
|  * \return | * | ||||||
|  * 	\li UPNP_E_SUCCESS | *   returns: | ||||||
|  * 	\li UPNP_E_OUTOF_MEMORY | *       UPNP_E_SUCCESS | ||||||
|  */ | *       UPNP_E_OUTOF_MEMORY | ||||||
| static int ixml_membuf_set_size( | * | ||||||
| 	/*! [in,out] The memory buffer. */ | *=================================================================*/ | ||||||
| 	INOUT ixml_membuf *m, | static int | ||||||
| 	/*! [in] The new lenght. */ | ixml_membuf_set_size( INOUT ixml_membuf * m, | ||||||
| 	IN size_t new_length) |                       IN size_t new_length ) | ||||||
| { | { | ||||||
| 	size_t diff; |     size_t diff; | ||||||
| 	size_t alloc_len; |     size_t alloc_len; | ||||||
| 	char *temp_buf; |     char *temp_buf; | ||||||
|  |  | ||||||
| 	if (new_length >= m->length) { |     if( new_length >= m->length )   // increase length | ||||||
| 		/* increase length */ |     { | ||||||
| 		/* need more mem? */ |         // need more mem? | ||||||
| 		if (new_length <= m->capacity) { |         if( new_length <= m->capacity ) { | ||||||
| 			/* have enough mem; done */ |             return 0;           // have enough mem; done | ||||||
| 			return 0; |         } | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		diff = new_length - m->length; |         diff = new_length - m->length; | ||||||
| 		alloc_len = MAXVAL(m->size_inc, diff) + m->capacity; |         alloc_len = MAXVAL( m->size_inc, diff ) + m->capacity; | ||||||
| 	} else { |     } else                      // decrease length | ||||||
| 		// decrease length |     { | ||||||
| 		assert(new_length <= m->length); |         assert( new_length <= m->length ); | ||||||
|  |  | ||||||
| 		// if diff is 0..m->size_inc, don't free |         // if diff is 0..m->size_inc, don't free | ||||||
| 		if ((m->capacity - new_length) <= m->size_inc) { |         if( ( m->capacity - new_length ) <= m->size_inc ) { | ||||||
| 			return 0; |             return 0; | ||||||
| 		} |         } | ||||||
| 		alloc_len = new_length + m->size_inc; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	assert(alloc_len >= new_length); |         alloc_len = new_length + m->size_inc; | ||||||
|  |     } | ||||||
|  |  | ||||||
| 	temp_buf = realloc(m->buf, alloc_len + 1); |     assert( alloc_len >= new_length ); | ||||||
| 	if (temp_buf == NULL) { |  | ||||||
| 		/* try smaller size */ |  | ||||||
| 		alloc_len = new_length; |  | ||||||
| 		temp_buf = realloc(m->buf, alloc_len + 1); |  | ||||||
| 		if (temp_buf == NULL) { |  | ||||||
| 			return IXML_INSUFFICIENT_MEMORY; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	/* save */ |  | ||||||
| 	m->buf = temp_buf; |  | ||||||
| 	m->capacity = alloc_len; |  | ||||||
|  |  | ||||||
| 	return 0; |     temp_buf = realloc( m->buf, alloc_len + 1 ); | ||||||
|  |     if( temp_buf == NULL ) { | ||||||
|  |         // try smaller size | ||||||
|  |         alloc_len = new_length; | ||||||
|  |         temp_buf = realloc( m->buf, alloc_len + 1 ); | ||||||
|  |  | ||||||
|  |         if( temp_buf == NULL ) { | ||||||
|  |             return IXML_INSUFFICIENT_MEMORY; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     // save | ||||||
|  |     m->buf = temp_buf; | ||||||
|  |     m->capacity = alloc_len; | ||||||
|  |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| void ixml_membuf_init(ixml_membuf *m) | *   membuffer_init | ||||||
|  | * | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixml_membuf_init( INOUT ixml_membuf * m ) | ||||||
| { | { | ||||||
| 	assert(m != NULL); |     assert( m != NULL ); | ||||||
|  |  | ||||||
| 	m->size_inc = MEMBUF_DEF_SIZE_INC; |     m->size_inc = MEMBUF_DEF_SIZE_INC; | ||||||
| 	m->buf = NULL; |     m->buf = NULL; | ||||||
| 	m->length = 0; |     m->length = 0; | ||||||
| 	m->capacity = 0; |     m->capacity = 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| void ixml_membuf_destroy(ixml_membuf *m) | *   membuffer_destroy | ||||||
|  | * | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixml_membuf_destroy( INOUT ixml_membuf * m ) | ||||||
| { | { | ||||||
| 	if (m == NULL) { |     if( m == NULL ) { | ||||||
| 		return; |         return; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	free(m->buf); |     free( m->buf ); | ||||||
| 	ixml_membuf_init(m); |     ixml_membuf_init( m ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| int ixml_membuf_assign( | *   ixml_membuf_assign | ||||||
| 	ixml_membuf *m, | * | ||||||
| 	const void *buf, | * | ||||||
| 	size_t buf_len) | *=================================================================*/ | ||||||
|  | int | ||||||
|  | ixml_membuf_assign( INOUT ixml_membuf * m, | ||||||
|  |                     IN const void *buf, | ||||||
|  |                     IN size_t buf_len ) | ||||||
| { | { | ||||||
| 	int return_code; |     int return_code; | ||||||
|  |  | ||||||
| 	assert(m != NULL); |     assert( m != NULL ); | ||||||
|  |  | ||||||
| 	// set value to null |     // set value to null | ||||||
| 	if (buf == NULL) { |     if( buf == NULL ) { | ||||||
| 		ixml_membuf_destroy(m); |         ixml_membuf_destroy( m ); | ||||||
| 		return IXML_SUCCESS; |         return IXML_SUCCESS; | ||||||
| 	} |     } | ||||||
| 	// alloc mem |     // alloc mem | ||||||
| 	return_code = ixml_membuf_set_size(m, buf_len); |     return_code = ixml_membuf_set_size( m, buf_len ); | ||||||
| 	if (return_code != 0) { |     if( return_code != 0 ) { | ||||||
| 		return return_code; |         return return_code; | ||||||
| 	} |     } | ||||||
|  |     // copy | ||||||
|  |     memcpy( m->buf, buf, buf_len ); | ||||||
|  |     m->buf[buf_len] = 0;        // null-terminate | ||||||
|  |  | ||||||
| 	// copy |     m->length = buf_len; | ||||||
| 	memcpy(m->buf, buf, buf_len); |  | ||||||
|  |  | ||||||
| 	// null-terminate |     return IXML_SUCCESS; | ||||||
| 	m->buf[buf_len] = 0; |  | ||||||
| 	m->length = buf_len; |  | ||||||
|  |  | ||||||
| 	return IXML_SUCCESS; |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| int ixml_membuf_assign_str( | *   ixml_membuf_assign_str | ||||||
| 	ixml_membuf *m, | * | ||||||
| 	const char *c_str) | * | ||||||
|  | *=================================================================*/ | ||||||
|  | int | ||||||
|  | ixml_membuf_assign_str( INOUT ixml_membuf * m, | ||||||
|  |                         IN const char *c_str ) | ||||||
| { | { | ||||||
| 	return ixml_membuf_assign(m, c_str, strlen(c_str)); |     return ixml_membuf_assign( m, c_str, strlen( c_str ) ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| int ixml_membuf_append( | *   ixml_membuf_append | ||||||
| 	INOUT ixml_membuf *m, | * | ||||||
| 	IN const void *buf) | * | ||||||
|  | *=================================================================*/ | ||||||
|  | int | ||||||
|  | ixml_membuf_append( INOUT ixml_membuf * m, | ||||||
|  |                     IN const void *buf ) | ||||||
| { | { | ||||||
| 	assert(m != NULL); |     assert( m != NULL ); | ||||||
|  |  | ||||||
| 	return ixml_membuf_insert(m, buf, 1, m->length); |     return ixml_membuf_insert( m, buf, 1, m->length ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| int ixml_membuf_append_str( | *   ixml_membuf_append_str | ||||||
| 	INOUT ixml_membuf *m, | * | ||||||
| 	IN const char *c_str) | * | ||||||
|  | *=================================================================*/ | ||||||
|  | int | ||||||
|  | ixml_membuf_append_str( INOUT ixml_membuf * m, | ||||||
|  |                         IN const char *c_str ) | ||||||
| { | { | ||||||
| 	return ixml_membuf_insert(m, c_str, strlen(c_str), m->length); |     return ixml_membuf_insert( m, c_str, strlen( c_str ), m->length ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| int ixml_membuf_insert( | *   ixml_membuf_insert | ||||||
| 	INOUT ixml_membuf *m, | * | ||||||
| 	IN const void *buf, | * | ||||||
| 	IN size_t buf_len, | *=================================================================*/ | ||||||
| 	int index) | int | ||||||
|  | ixml_membuf_insert( INOUT ixml_membuf * m, | ||||||
|  |                     IN const void *buf, | ||||||
|  |                     IN size_t buf_len, | ||||||
|  |                     int index ) | ||||||
| { | { | ||||||
| 	int return_code = 0; |     int return_code; | ||||||
|  |  | ||||||
| 	assert(m != NULL); |     assert( m != NULL ); | ||||||
|  |  | ||||||
| 	if (index < 0 || index > (int)m->length) { |     if( index < 0 || index > ( int )m->length ) | ||||||
| 		return IXML_INDEX_SIZE_ERR; |         return IXML_INDEX_SIZE_ERR; | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (buf == NULL || buf_len == 0) { |     if( buf == NULL || buf_len == 0 ) { | ||||||
| 		return 0; |         return 0; | ||||||
| 	} |     } | ||||||
| 	/* alloc mem */ |     // alloc mem | ||||||
| 	return_code = ixml_membuf_set_size(m, m->length + buf_len); |     return_code = ixml_membuf_set_size( m, m->length + buf_len ); | ||||||
| 	if (return_code != 0) { |     if( return_code != 0 ) { | ||||||
| 		return return_code; |         return return_code; | ||||||
| 	} |     } | ||||||
| 	/* insert data */ |     // insert data | ||||||
| 	/* move data to right of insertion point */ |     // move data to right of insertion point | ||||||
| 	memmove(m->buf + index + buf_len, m->buf + index, m->length - index); |     memmove( m->buf + index + buf_len, m->buf + index, m->length - index ); | ||||||
| 	memcpy(m->buf + index, buf, buf_len); |     memcpy( m->buf + index, buf, buf_len ); | ||||||
| 	m->length += buf_len; |     m->length += buf_len; | ||||||
| 	/* Null terminate */ |     m->buf[m->length] = 0;      // null-terminate | ||||||
| 	m->buf[m->length] = 0; |  | ||||||
|  |  | ||||||
| 	return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,195 +1,242 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ixmlparser.h" | #include "ixmlparser.h" | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| #include <assert.h> | *   NamedNodeMap_getItemNumber | ||||||
| #include <stdlib.h> /* for free(), malloc() */ | *       return the item number of a item in NamedNodeMap. | ||||||
| #include <string.h> | *       Internal to parser only. | ||||||
|  | *   Parameters: | ||||||
|  | *       name: the name of the item to find | ||||||
| /*! | *    | ||||||
|  * \brief Return the item number of a item in NamedNodeMap. | *=================================================================*/ | ||||||
|  */ | unsigned long | ||||||
| static unsigned long ixmlNamedNodeMap_getItemNumber( | ixmlNamedNodeMap_getItemNumber( IN IXML_NamedNodeMap * nnMap, | ||||||
| 	/*! [in] The named node map to process. */ |                                 IN const char *name ) | ||||||
| 	IN IXML_NamedNodeMap *nnMap, |  | ||||||
| 	/*! [in] The name of the item to find. */ |  | ||||||
| 	IN const char *name) |  | ||||||
| { | { | ||||||
| 	IXML_Node *tempNode; |     IXML_Node *tempNode; | ||||||
| 	unsigned long returnItemNo = 0; |     unsigned long returnItemNo = 0; | ||||||
|  |  | ||||||
| 	assert(nnMap != NULL && name != NULL); |     assert( nnMap != NULL && name != NULL ); | ||||||
| 	if (nnMap == NULL || name == NULL) { |     if( ( nnMap == NULL ) || ( name == NULL ) ) { | ||||||
| 		return IXML_INVALID_ITEM_NUMBER; |         return IXML_INVALID_ITEM_NUMBER; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	tempNode = nnMap->nodeItem; |     tempNode = nnMap->nodeItem; | ||||||
| 	while (tempNode != NULL) { |     while( tempNode != NULL ) { | ||||||
| 		if (strcmp(name, tempNode->nodeName) == 0) { |         if( strcmp( name, tempNode->nodeName ) == 0 ) { | ||||||
| 			return returnItemNo; |             return returnItemNo; | ||||||
| 		} |         } | ||||||
| 		tempNode = tempNode->nextSibling; |  | ||||||
| 		returnItemNo++; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return IXML_INVALID_ITEM_NUMBER; |         tempNode = tempNode->nextSibling; | ||||||
|  |         returnItemNo++; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return IXML_INVALID_ITEM_NUMBER; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| void ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap) | *   NamedNodeMap_init | ||||||
|  | *       Initializes a NamedNodeMap object. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlNamedNodeMap_init( IN IXML_NamedNodeMap * nnMap ) | ||||||
| { | { | ||||||
| 	assert(nnMap != NULL); |     assert( nnMap != NULL ); | ||||||
|  |     memset( nnMap, 0, sizeof( IXML_NamedNodeMap ) ); | ||||||
| 	memset(nnMap, 0, sizeof (IXML_NamedNodeMap)); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| IXML_Node *ixmlNamedNodeMap_getNamedItem( | *   NamedNodeMap_getNamedItem | ||||||
| 	IXML_NamedNodeMap *nnMap, | *       Retrieves a node specified by name. | ||||||
| 	const DOMString name) | *       External function. | ||||||
|  | * | ||||||
|  | *   Parameter: | ||||||
|  | *       name: type nodeName of a node to retrieve. | ||||||
|  | * | ||||||
|  | *   Return Value: | ||||||
|  | *       A Node with the specified nodeName, or null if it | ||||||
|  | *       does not identify any node in this map. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | IXML_Node * | ||||||
|  | ixmlNamedNodeMap_getNamedItem( IN IXML_NamedNodeMap * nnMap, | ||||||
|  |                                IN const char *name ) | ||||||
| { | { | ||||||
| 	long index; |     long index; | ||||||
|  |  | ||||||
| 	if (nnMap == NULL || name == NULL) { |     if( ( nnMap == NULL ) || ( name == NULL ) ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	index = ixmlNamedNodeMap_getItemNumber(nnMap, name); |     index = ixmlNamedNodeMap_getItemNumber( nnMap, name ); | ||||||
| 	if (index == IXML_INVALID_ITEM_NUMBER) { |     if( index == IXML_INVALID_ITEM_NUMBER ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} else { |     } else { | ||||||
| 		return ixmlNamedNodeMap_item(nnMap, (unsigned long)index); |         return ( ixmlNamedNodeMap_item( nnMap, ( unsigned long )index ) ); | ||||||
| 	} |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| IXML_Node *ixmlNamedNodeMap_item( | *   NamedNodeMap_item | ||||||
| 	IN IXML_NamedNodeMap *nnMap, | *       Returns the indexth item in the map. If index is greater than or | ||||||
| 	IN unsigned long index ) | *       equal to the number of nodes in this map, this returns null. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *   Parameter: | ||||||
|  | *       index: index into this map. | ||||||
|  | * | ||||||
|  | *   Return Value: | ||||||
|  | *       The node at the indexth position in the map, or null if that is | ||||||
|  | *       not a valid index. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | IXML_Node * | ||||||
|  | ixmlNamedNodeMap_item( IN IXML_NamedNodeMap * nnMap, | ||||||
|  |                        IN unsigned long index ) | ||||||
| { | { | ||||||
| 	IXML_Node *tempNode; |     IXML_Node *tempNode; | ||||||
| 	unsigned int i; |     unsigned int i; | ||||||
|  |  | ||||||
| 	if (nnMap == NULL) { |     if( nnMap == NULL ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (index > ixmlNamedNodeMap_getLength(nnMap) - 1) { |     if( index > ixmlNamedNodeMap_getLength( nnMap ) - 1 ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	tempNode = nnMap->nodeItem; |     tempNode = nnMap->nodeItem; | ||||||
| 	for (i = 0; i < index && tempNode != NULL; ++i) { |     for( i = 0; i < index && tempNode != NULL; ++i ) { | ||||||
| 		tempNode = tempNode->nextSibling; |         tempNode = tempNode->nextSibling; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	return tempNode; |     return tempNode; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| unsigned long ixmlNamedNodeMap_getLength(IXML_NamedNodeMap *nnMap) | *   NamedNodeMap_getLength	 | ||||||
|  | *       Return the number of Nodes in this map.        | ||||||
|  | *       External function. | ||||||
|  | *    | ||||||
|  | *   Parameters: | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | unsigned long | ||||||
|  | ixmlNamedNodeMap_getLength( IN IXML_NamedNodeMap * nnMap ) | ||||||
| { | { | ||||||
| 	IXML_Node *tempNode; |     IXML_Node *tempNode; | ||||||
| 	unsigned long length = 0; |     unsigned long length = 0; | ||||||
|  |  | ||||||
| 	if (nnMap != NULL) { |     if( nnMap != NULL ) { | ||||||
| 		tempNode = nnMap->nodeItem; |         tempNode = nnMap->nodeItem; | ||||||
| 		for (length = 0; tempNode != NULL; ++length) { |         for( length = 0; tempNode != NULL; ++length ) { | ||||||
| 			tempNode = tempNode->nextSibling; |             tempNode = tempNode->nextSibling; | ||||||
| 		} |         } | ||||||
| 	} |     } | ||||||
|  |     return length; | ||||||
| 	return length; |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| void ixmlNamedNodeMap_free(IXML_NamedNodeMap *nnMap) | *   ixmlNamedNodeMap_free | ||||||
|  | *       frees a NamedNodeMap. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlNamedNodeMap_free( IXML_NamedNodeMap * nnMap ) | ||||||
| { | { | ||||||
| 	IXML_NamedNodeMap *pNext; |     IXML_NamedNodeMap *pNext; | ||||||
|  |  | ||||||
| 	while (nnMap != NULL) { |     while( nnMap != NULL ) { | ||||||
| 		pNext = nnMap->next; |         pNext = nnMap->next; | ||||||
| 		free(nnMap); |         free( nnMap ); | ||||||
| 		nnMap = pNext; |         nnMap = pNext; | ||||||
| 	} |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| int ixmlNamedNodeMap_addToNamedNodeMap( | *   NamedNodeMap_addToNamedNodeMap | ||||||
| 	IXML_NamedNodeMap **nnMap, | *       add a node to a NamedNodeMap. | ||||||
| 	IXML_Node *add) | *       Internal to parser only. | ||||||
|  | *   Parameters: | ||||||
|  | *       add: the node to add into NamedNodeMap. | ||||||
|  | *   Return: | ||||||
|  | *       IXML_SUCCESS or failure. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | int | ||||||
|  | ixmlNamedNodeMap_addToNamedNodeMap( IN IXML_NamedNodeMap ** nnMap, | ||||||
|  |                                     IN IXML_Node * add ) | ||||||
| { | { | ||||||
| 	IXML_NamedNodeMap *traverse = NULL; |     IXML_NamedNodeMap *traverse = NULL, | ||||||
| 	IXML_NamedNodeMap *p = NULL; |      *p = NULL; | ||||||
| 	IXML_NamedNodeMap *newItem = NULL; |     IXML_NamedNodeMap *newItem = NULL; | ||||||
|  |  | ||||||
| 	if(add == NULL) { |     if( add == NULL ) { | ||||||
| 		return IXML_SUCCESS; |         return IXML_SUCCESS; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (*nnMap == NULL) { |     if( *nnMap == NULL )        // nodelist is empty | ||||||
| 		// nodelist is empty |     { | ||||||
| 		*nnMap = (IXML_NamedNodeMap *)malloc(sizeof (IXML_NamedNodeMap)); |         *nnMap = | ||||||
| 		if (*nnMap == NULL) { |             ( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) ); | ||||||
| 			return IXML_INSUFFICIENT_MEMORY; |         if( *nnMap == NULL ) { | ||||||
| 		} |             return IXML_INSUFFICIENT_MEMORY; | ||||||
| 		ixmlNamedNodeMap_init(*nnMap); |         } | ||||||
| 	} |         ixmlNamedNodeMap_init( *nnMap ); | ||||||
| 	if ((*nnMap)->nodeItem == NULL) { |     } | ||||||
| 		(*nnMap)->nodeItem = add; |  | ||||||
| 	} else { |  | ||||||
| 		traverse = *nnMap; |  | ||||||
| 		p = traverse; |  | ||||||
| 		while (traverse != NULL) { |  | ||||||
| 			p = traverse; |  | ||||||
| 			traverse = traverse->next; |  | ||||||
| 		} |  | ||||||
| 		newItem = (IXML_NamedNodeMap *)malloc(sizeof (IXML_NamedNodeMap)); |  | ||||||
| 		if (newItem == NULL) { |  | ||||||
| 			return IXML_INSUFFICIENT_MEMORY; |  | ||||||
| 		} |  | ||||||
| 		p->next = newItem; |  | ||||||
| 		newItem->nodeItem = add; |  | ||||||
| 		newItem->next = NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return IXML_SUCCESS; |     if( ( *nnMap )->nodeItem == NULL ) { | ||||||
|  |         ( *nnMap )->nodeItem = add; | ||||||
|  |     } else { | ||||||
|  |         traverse = *nnMap; | ||||||
|  |         p = traverse; | ||||||
|  |         while( traverse != NULL ) { | ||||||
|  |             p = traverse; | ||||||
|  |             traverse = traverse->next; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         newItem = | ||||||
|  |             ( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) ); | ||||||
|  |         if( newItem == NULL ) { | ||||||
|  |             return IXML_INSUFFICIENT_MEMORY; | ||||||
|  |         } | ||||||
|  |         p->next = newItem; | ||||||
|  |         newItem->nodeItem = add; | ||||||
|  |         newItem->next = NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return IXML_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2788
									
								
								ixml/src/node.c
									
									
									
									
									
								
							
							
						
						
									
										2788
									
								
								ixml/src/node.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,152 +1,176 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ixmlparser.h" | #include "ixmlparser.h" | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| #include <assert.h> | *   ixmlNodeList_init | ||||||
| #include <string.h> | *       initializes a nodelist  | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
| void ixmlNodeList_init(IXML_NodeList *nList) | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlNodeList_init( IXML_NodeList * nList ) | ||||||
| { | { | ||||||
| 	assert(nList != NULL); |     assert( nList != NULL ); | ||||||
|  |  | ||||||
|  |     memset( nList, 0, sizeof( IXML_NodeList ) ); | ||||||
|  |  | ||||||
| 	memset(nList, 0, sizeof (IXML_NodeList)); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| IXML_Node *ixmlNodeList_item( | *   ixmlNodeList_item | ||||||
| 	IXML_NodeList *nList, | *       Returns the indexth item in the collection. If index is greater | ||||||
| 	unsigned long index) | *       than or equal to the number of nodes in the list, this returns  | ||||||
|  | *       null. | ||||||
|  | *       External function. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | IXML_Node * | ||||||
|  | ixmlNodeList_item( IXML_NodeList * nList, | ||||||
|  |                    unsigned long index ) | ||||||
| { | { | ||||||
| 	IXML_NodeList *next; |     IXML_NodeList *next; | ||||||
| 	unsigned int i; |     unsigned int i; | ||||||
|  |  | ||||||
| 	// if the list ptr is NULL |     // if the list ptr is NULL | ||||||
| 	if (nList == NULL) { |     if( nList == NULL ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
| 	// if index is more than list length |     // if index is more than list length | ||||||
| 	if (index > ixmlNodeList_length(nList) - 1) { |     if( index > ixmlNodeList_length( nList ) - 1 ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	next = nList; |     next = nList; | ||||||
| 	for (i = 0; i < index && next != NULL; ++i) { |     for( i = 0; i < index && next != NULL; ++i ) { | ||||||
| 		next = next->next; |         next = next->next; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (next == NULL) { |     if( next == NULL ) return NULL; | ||||||
| 		return NULL; |  | ||||||
| 	} |     return next->nodeItem; | ||||||
|  |  | ||||||
| 	return next->nodeItem; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| int ixmlNodeList_addToNodeList( | /*================================================================ | ||||||
| 	IXML_NodeList **nList, | *   ixmlNodeList_addToNodeList | ||||||
| 	IXML_Node *add) | *       Add a node to nodelist | ||||||
|  | *       Internal to parser only. | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | int | ||||||
|  | ixmlNodeList_addToNodeList( IN IXML_NodeList ** nList, | ||||||
|  |                             IN IXML_Node * add ) | ||||||
| { | { | ||||||
| 	IXML_NodeList *traverse = NULL; |     IXML_NodeList *traverse, | ||||||
| 	IXML_NodeList *p = NULL; |      *p = NULL; | ||||||
| 	IXML_NodeList *newListItem; |     IXML_NodeList *newListItem; | ||||||
|  |  | ||||||
| 	assert(add != NULL); |     assert( add != NULL ); | ||||||
|  |  | ||||||
| 	if (add == NULL) { |     if( add == NULL ) { | ||||||
| 		return IXML_FAILED; |         return IXML_FAILED; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (*nList == NULL) { |     if( *nList == NULL )        // nodelist is empty | ||||||
| 		// nodelist is empty |     { | ||||||
| 		*nList = (IXML_NodeList *)malloc(sizeof (IXML_NodeList)); |         *nList = ( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) ); | ||||||
| 		if (*nList == NULL) { |         if( *nList == NULL ) { | ||||||
| 			return IXML_INSUFFICIENT_MEMORY; |             return IXML_INSUFFICIENT_MEMORY; | ||||||
| 		} |         } | ||||||
|  |  | ||||||
| 		ixmlNodeList_init(*nList); |         ixmlNodeList_init( *nList ); | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if ((*nList)->nodeItem == NULL) { |     if( ( *nList )->nodeItem == NULL ) { | ||||||
| 		(*nList)->nodeItem = add; |         ( *nList )->nodeItem = add; | ||||||
| 	} else { |     } else { | ||||||
| 		traverse = *nList; |         traverse = *nList; | ||||||
| 		while (traverse != NULL) { |         while( traverse != NULL ) { | ||||||
| 			p = traverse; |             p = traverse; | ||||||
| 			traverse = traverse->next; |             traverse = traverse->next; | ||||||
| 		} |         } | ||||||
|  |  | ||||||
| 		newListItem = (IXML_NodeList *)malloc(sizeof (IXML_NodeList)); |         newListItem = | ||||||
| 		if (newListItem == NULL) { |             ( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) ); | ||||||
| 			return IXML_INSUFFICIENT_MEMORY; |         if( newListItem == NULL ) { | ||||||
| 		} |             return IXML_INSUFFICIENT_MEMORY; | ||||||
| 		p->next = newListItem; |         } | ||||||
| 		newListItem->nodeItem = add; |         p->next = newListItem; | ||||||
| 		newListItem->next = NULL; |         newListItem->nodeItem = add; | ||||||
| 	} |         newListItem->next = NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
| 	return IXML_SUCCESS; |     return IXML_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| unsigned long ixmlNodeList_length(IXML_NodeList *nList) | *   ixmlNodeList_length | ||||||
|  | *       Returns the number of nodes in the list.  The range of valid | ||||||
|  | *       child node indices is 0 to length-1 inclusive. | ||||||
|  | *       External function.        | ||||||
|  | * | ||||||
|  | *=================================================================*/ | ||||||
|  | unsigned long | ||||||
|  | ixmlNodeList_length( IN IXML_NodeList * nList ) | ||||||
| { | { | ||||||
| 	IXML_NodeList *list; |     IXML_NodeList *list; | ||||||
| 	unsigned long length = 0; |     unsigned long length = 0; | ||||||
|  |  | ||||||
| 	list = nList; |     list = nList; | ||||||
| 	while (list != NULL) { |     while( list != NULL ) { | ||||||
| 		++length; |         ++length; | ||||||
| 		list = list->next; |         list = list->next; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	return length; |     return length; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /*================================================================ | ||||||
| void ixmlNodeList_free(IXML_NodeList *nList) | *   ixmlNodeList_free | ||||||
|  | *       frees a nodeList | ||||||
|  | *       External function | ||||||
|  | *        | ||||||
|  | *=================================================================*/ | ||||||
|  | void | ||||||
|  | ixmlNodeList_free( IN IXML_NodeList * nList ) | ||||||
| { | { | ||||||
| 	IXML_NodeList *next; |     IXML_NodeList *next; | ||||||
|  |  | ||||||
|  |     while( nList != NULL ) { | ||||||
|  |         next = nList->next; | ||||||
|  |  | ||||||
|  |         free( nList ); | ||||||
|  |         nList = next; | ||||||
|  |     } | ||||||
|  |  | ||||||
| 	while (nList != NULL) { |  | ||||||
| 		next = nList->next; |  | ||||||
| 		free(nList); |  | ||||||
| 		nList = next; |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										0
									
								
								ixml/test/test_document.sh
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										0
									
								
								ixml/test/test_document.sh
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -6,6 +6,6 @@ includedir=@includedir@ | |||||||
| Name: libupnp | Name: libupnp | ||||||
| Description: Linux SDK for UPnP Devices | Description: Linux SDK for UPnP Devices | ||||||
| Version: @VERSION@ | Version: @VERSION@ | ||||||
| Libs: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ -L${libdir} -lupnp -lthreadutil -lixml  | Libs: @PTHREAD_LIBS@ -L${libdir} -lupnp -lthreadutil -lixml  | ||||||
| Cflags: @PTHREAD_CFLAGS@ -I${includedir}/upnp | Cflags: @PTHREAD_CFLAGS@ -I${includedir}/upnp | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| Version: 1.6.7 | Version: 1.4.2 | ||||||
| Summary: Universal Plug and Play (UPnP) SDK | Summary: Universal Plug and Play (UPnP) SDK | ||||||
| Name: libupnp | Name: libupnp | ||||||
| Release: 1%{?dist} | Release: 1%{?dist} | ||||||
| @@ -77,12 +77,6 @@ make install DESTDIR=$RPM_BUILD_ROOT | |||||||
| rm -rf %{buildroot} | rm -rf %{buildroot} | ||||||
|  |  | ||||||
| %changelog | %changelog | ||||||
| * Mon Nov 19 2007 Marcelo Jimenez <mroberto@users.sourceforge.net> - 1.6.2-1 |  | ||||||
| - Update to version 1.6.2 |  | ||||||
|  |  | ||||||
| * Mon Nov 19 2007 Marcelo Jimenez <mroberto@users.sourceforge.net> - 1.4.7-1 |  | ||||||
| - Update to version 1.4.7 |  | ||||||
|  |  | ||||||
| * Fri Feb 02 2007 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.2-1 | * Fri Feb 02 2007 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.2-1 | ||||||
| - Update to version 1.4.2 | - Update to version 1.4.2 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ AC_DEFUN([RT_BOOL_ARG_ENABLE],[ | |||||||
| 		               )]) | 		               )]) | ||||||
| 	test "x$enable_[$1]" != [x]m4_if([$2],[yes],[no],[yes]) dnl | 	test "x$enable_[$1]" != [x]m4_if([$2],[yes],[no],[yes]) dnl | ||||||
| 		&& enable_[]Name=[$2] | 		&& enable_[]Name=[$2] | ||||||
| 	AC_MSG_RESULT($enable_[]Name) | 	AC_MSG_RESULT($enable_[]Name)dnl | ||||||
| 	AM_CONDITIONAL([ENABLE_]NAME, test x"$enable_[]Name" = xyes) | 	AM_CONDITIONAL([ENABLE_]NAME, test x"$enable_[]Name" = xyes) | ||||||
| 	dnl | 	dnl | ||||||
| 	m4_popdef([NAME])dnl | 	m4_popdef([NAME])dnl | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| AM_CPPFLAGS		= -I$(srcdir)/inc -I$(srcdir)/src/inc | AM_CPPFLAGS		= -I$(srcdir)/inc -I$(srcdir)/src/inc | ||||||
|  | AM_CFLAGS		= $(PTHREAD_CFLAGS) | ||||||
|  |  | ||||||
| if ENABLE_DEBUG | if ENABLE_DEBUG | ||||||
|     AM_CPPFLAGS		+= -DDEBUG -DSTATS |     AM_CPPFLAGS		+= -DDEBUG -DSTATS | ||||||
| @@ -20,11 +21,12 @@ libthreadutil_la_LDFLAGS = -version-info $(LT_VERSION_THREADUTIL) | |||||||
|  |  | ||||||
| libthreadutil_la_SOURCES = \ | libthreadutil_la_SOURCES = \ | ||||||
| 			src/FreeList.c src/LinkedList.c \ | 			src/FreeList.c src/LinkedList.c \ | ||||||
| 			src/ThreadPool.c src/TimerThread.c | 			src/ThreadPool.c src/TimerThread.c \ | ||||||
|  | 			src/iasnprintf.c | ||||||
|  |  | ||||||
| upnpincludedir		= $(includedir)/upnp | upnpincludedir		= $(includedir)/upnp | ||||||
| upnpinclude_HEADERS	= \ | upnpinclude_HEADERS	= \ | ||||||
| 			inc/FreeList.h inc/LinkedList.h \ | 			inc/FreeList.h inc/LinkedList.h \ | ||||||
| 			inc/ThreadPool.h inc/TimerThread.h \ | 			inc/ThreadPool.h inc/TimerThread.h \ | ||||||
| 			inc/ithread.h | 			inc/iasnprintf.h inc/ithread.h | ||||||
|  |  | ||||||
|   | |||||||
| @@ -29,134 +29,70 @@ | |||||||
|  * |  * | ||||||
|  ******************************************************************************/ |  ******************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef THREADPOOL_H | #ifndef THREADPOOL_H | ||||||
| #define THREADPOOL_H | #define THREADPOOL_H | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "FreeList.h" |  | ||||||
| #include "ithread.h" |  | ||||||
| #include "LinkedList.h" |  | ||||||
| #include "UpnpInet.h" |  | ||||||
| #include "UpnpGlobal.h" /* for UPNP_INLINE, EXPORT_SPEC */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <errno.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
| 	#include <time.h> |  | ||||||
| 	struct timezone |  | ||||||
| 	{ |  | ||||||
| 		int  tz_minuteswest; /* minutes W of Greenwich */ |  | ||||||
| 		int  tz_dsttime;     /* type of dst correction */ |  | ||||||
| 	}; |  | ||||||
| 	int gettimeofday(struct timeval *tv, struct timezone *tz); |  | ||||||
| #else /* WIN32 */ |  | ||||||
| 	#include <sys/param.h> |  | ||||||
| 	#include <sys/time.h> /* for gettimeofday() */ |  | ||||||
| 	#if defined(__OSX__) || defined(__APPLE__) || defined(__NetBSD__) |  | ||||||
| 		#include <sys/resource.h>	/* for setpriority() */ |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /* Size of job free list */ | ||||||
| /*! Size of job free list */ |  | ||||||
| #define JOBFREELISTSIZE 100 | #define JOBFREELISTSIZE 100 | ||||||
|  |  | ||||||
|  |  | ||||||
| #define INFINITE_THREADS -1 | #define INFINITE_THREADS -1 | ||||||
|  |  | ||||||
|  |  | ||||||
| #define EMAXTHREADS (-8 & 1<<29) | #define EMAXTHREADS (-8 & 1<<29) | ||||||
|  |  | ||||||
|  | /* Invalid Policy */ | ||||||
| /*! Invalid Policy */ |  | ||||||
| #define INVALID_POLICY (-9 & 1<<29) | #define INVALID_POLICY (-9 & 1<<29) | ||||||
|  |  | ||||||
|  | /* Invalid JOB Id */ | ||||||
| /*! Invalid JOB Id */ |  | ||||||
| #define INVALID_JOB_ID (-2 & 1<<29) | #define INVALID_JOB_ID (-2 & 1<<29) | ||||||
|  |  | ||||||
|  | typedef enum duration {SHORT_TERM,PERSISTENT} Duration; | ||||||
|  |  | ||||||
| typedef enum duration { | typedef enum priority {LOW_PRIORITY, | ||||||
| 	SHORT_TERM, | 		       MED_PRIORITY, | ||||||
| 	PERSISTENT | 		       HIGH_PRIORITY} ThreadPriority; | ||||||
| } Duration; |  | ||||||
|  | #define DEFAULT_PRIORITY MED_PRIORITY /* default priority used by TPJobInit */ | ||||||
|  | #define DEFAULT_MIN_THREADS 1	      /* default minimum used by TPAttrInit */ | ||||||
|  | #define DEFAULT_MAX_THREADS 10	      /* default max used by TPAttrInit	*/ | ||||||
|  | #define DEFAULT_JOBS_PER_THREAD 10    /* default jobs per thread used by TPAttrInit */ | ||||||
|  | #define DEFAULT_STARVATION_TIME	500   /* default starvation time used by TPAttrInit */ | ||||||
|  | #define DEFAULT_IDLE_TIME 10 * 1000   /* default idle time used by TPAttrInit */ | ||||||
|  | #define DEFAULT_FREE_ROUTINE NULL     /* default free routine used TPJobInit */ | ||||||
|  | #define DEFAULT_MAX_JOBS_TOTAL 100    /* default max jobs used TPAttrInit */ | ||||||
|  |  | ||||||
|  | #define STATS 1 /* always include stats because code change is minimal */ | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum priority { | /* Statistics */ | ||||||
| 	LOW_PRIORITY, | #ifdef WIN32 /* TODO: check why STATSONLY fails during compilation */ | ||||||
| 	MED_PRIORITY, | 	#undef STATS | ||||||
| 	HIGH_PRIORITY | #endif | ||||||
| } ThreadPriority; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default priority used by TPJobInit */ |  | ||||||
| #define DEFAULT_PRIORITY MED_PRIORITY |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default minimum used by TPAttrInit */ |  | ||||||
| #define DEFAULT_MIN_THREADS 1 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default max used by TPAttrInit */ |  | ||||||
| #define DEFAULT_MAX_THREADS 10 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default stack size used by TPAttrInit */ |  | ||||||
| #define DEFAULT_STACK_SIZE 0 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default jobs per thread used by TPAttrInit */ |  | ||||||
| #define DEFAULT_JOBS_PER_THREAD 10 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default starvation time used by TPAttrInit */ |  | ||||||
| #define DEFAULT_STARVATION_TIME	500 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default idle time used by TPAttrInit */ |  | ||||||
| #define DEFAULT_IDLE_TIME 10 * 1000 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default free routine used TPJobInit */ |  | ||||||
| #define DEFAULT_FREE_ROUTINE NULL |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! default max jobs used TPAttrInit */ |  | ||||||
| #define DEFAULT_MAX_JOBS_TOTAL 100 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Statistics. |  | ||||||
|  * |  | ||||||
|  * Always include stats because code change is minimal. |  | ||||||
|  */ |  | ||||||
| #define STATS 1 |  | ||||||
|  |  | ||||||
|  | #ifdef STATS | ||||||
|  | 	#define STATSONLY(x) x | ||||||
|  | #else | ||||||
|  | 	#define STATSONLY(x) | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
| 	#define DEBUG 1 | 	#define DEBUG 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #include "LinkedList.h" | ||||||
|  | #include <sys/timeb.h> | ||||||
|  | #include "FreeList.h" | ||||||
|  |  | ||||||
|  | #include "ithread.h" | ||||||
|  | #include <errno.h> | ||||||
|  | #include <sys/timeb.h> | ||||||
|  | #define EXPORT | ||||||
| typedef int PolicyType; | typedef int PolicyType; | ||||||
|  |  | ||||||
|  |  | ||||||
| #define DEFAULT_POLICY SCHED_OTHER | #define DEFAULT_POLICY SCHED_OTHER | ||||||
|  | #define DEFAULT_SCHED_PARAM 0 /* default priority */ | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Name: free_routine |  * Name: free_routine | ||||||
| @@ -166,7 +102,6 @@ typedef int PolicyType; | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| typedef void (*free_routine)(void *arg); | typedef void (*free_routine)(void *arg); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Name: ThreadPoolAttr |  * Name: ThreadPoolAttr | ||||||
|  * |  * | ||||||
| @@ -176,35 +111,28 @@ typedef void (*free_routine)(void *arg); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| typedef struct THREADPOOLATTR | typedef struct THREADPOOLATTR | ||||||
| { | { | ||||||
| 	/* minThreads, ThreadPool will always maintain at least this many threads */ |   int minThreads;     /* minThreads, ThreadPool will always maintain at least | ||||||
| 	int minThreads; |                          this many threads */ | ||||||
|  |  | ||||||
| 	/* maxThreads, ThreadPool will never have more than this number of threads */ |   int maxThreads;     /* maxThreads, ThreadPool will never have more than this | ||||||
| 	int maxThreads; |                          number of threads */ | ||||||
|  |  | ||||||
| 	/* stackSize (in bytes), this is the minimum stack size allocated for each |   int maxIdleTime;    /* maxIdleTime (in milliseconds) | ||||||
| 	 * thread */ |                          this is the maximum time a thread will remain idle | ||||||
| 	size_t stackSize; |                          before dying */ | ||||||
|  |  | ||||||
| 	/* maxIdleTime (in milliseconds) this is the maximum time a thread will |   int jobsPerThread;  /* jobs per thread to maintain */ | ||||||
| 	 * remain idle before dying */ |  | ||||||
| 	int maxIdleTime; |  | ||||||
|  |  | ||||||
| 	/* jobs per thread to maintain */ |   int maxJobsTotal;   /* maximum number of jobs that can be queued totally. */ | ||||||
| 	int jobsPerThread; |  | ||||||
|  |  | ||||||
| 	/* maximum number of jobs that can be queued totally. */ |   int starvationTime; /* the time a low priority or med priority | ||||||
| 	int maxJobsTotal; | 	                 job waits before getting bumped | ||||||
|  |                          up a priority (in milliseconds) */ | ||||||
|  |  | ||||||
| 	/* the time a low priority or med priority job waits before getting bumped |   PolicyType schedPolicy; /* scheduling policy to use */ | ||||||
| 	 * up a priority (in milliseconds) */ |  | ||||||
| 	int starvationTime; |  | ||||||
|  |  | ||||||
| 	/* scheduling policy to use */ |  | ||||||
| 	PolicyType schedPolicy; |  | ||||||
| } ThreadPoolAttr; | } ThreadPoolAttr; | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Name: ThreadPool |  * Name: ThreadPool | ||||||
|  * |  * | ||||||
| @@ -213,82 +141,96 @@ typedef struct THREADPOOLATTR | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| typedef struct THREADPOOLJOB | typedef struct THREADPOOLJOB | ||||||
| { | { | ||||||
| 	start_routine func; |   start_routine func; | ||||||
| 	void *arg; |   void *arg; | ||||||
| 	free_routine free_func; |   free_routine free_func; | ||||||
| 	struct timeval requestTime; |   struct timeb requestTime; | ||||||
| 	int priority; |   int priority; | ||||||
| 	int jobId; |   int jobId; | ||||||
| } ThreadPoolJob; | } ThreadPoolJob; | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Name: ThreadPoolStats |  * Name: ThreadPoolStats | ||||||
|  * |  * | ||||||
|  *  Description: |  *  Description: | ||||||
|  *     Structure to hold statistics |  *     Structure to hold statistics | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
|  |  | ||||||
|  | #ifdef STATS | ||||||
|  |  | ||||||
| typedef struct TPOOLSTATS | typedef struct TPOOLSTATS | ||||||
| { | { | ||||||
| 	double totalTimeHQ; |   double totalTimeHQ; | ||||||
| 	int totalJobsHQ; |   int totalJobsHQ; | ||||||
| 	double avgWaitHQ; |   double avgWaitHQ; | ||||||
| 	double totalTimeMQ; |   double totalTimeMQ; | ||||||
| 	int totalJobsMQ; |   int totalJobsMQ; | ||||||
| 	double avgWaitMQ; |   double avgWaitMQ; | ||||||
| 	double totalTimeLQ; |   double totalTimeLQ; | ||||||
| 	int totalJobsLQ; |   int totalJobsLQ; | ||||||
| 	double avgWaitLQ; |   double avgWaitLQ; | ||||||
| 	double totalWorkTime; |   double totalWorkTime; | ||||||
| 	double totalIdleTime; |   double totalIdleTime; | ||||||
| 	int workerThreads; |   int workerThreads; | ||||||
| 	int idleThreads; |   int idleThreads; | ||||||
| 	int persistentThreads; |   int persistentThreads; | ||||||
| 	int totalThreads; |   int totalThreads; | ||||||
| 	int maxThreads; |   int maxThreads; | ||||||
| 	int currentJobsHQ; |   int currentJobsHQ; | ||||||
| 	int currentJobsLQ; |   int currentJobsLQ; | ||||||
| 	int currentJobsMQ; |   int currentJobsMQ; | ||||||
| } ThreadPoolStats; | }ThreadPoolStats; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /**************************************************************************** | ||||||
|  * \brief A thread pool similar to the thread pool in the UPnP SDK. |  * Name: ThreadPool | ||||||
|  * |  * | ||||||
|  * Allows jobs to be scheduled for running by threads in a  |  *  Description: | ||||||
|  * thread pool. The thread pool is initialized with a  |  *     A thread pool similar to the thread pool in the UPnP SDK. | ||||||
|  * minimum and maximum thread number as well as a max idle time |  *     Allows jobs to be scheduled for running by threads in a  | ||||||
|  * and a jobs per thread ratio. If a worker thread waits the whole |  *     thread pool. The thread pool is initialized with a  | ||||||
|  * max idle time without receiving a job and the thread pool |  *     minimum and maximum thread number as well as a  | ||||||
|  * currently has more threads running than the minimum |  *	   max idle time | ||||||
|  * then the worker thread will exit. If when  |  *     and a jobs per thread ratio. If a worker thread waits the whole | ||||||
|  * scheduling a job the current job to thread ratio |  *     max idle time without receiving a job and the thread pool | ||||||
|  * becomes greater than the set ratio and the thread pool currently has |  *     currently has more threads running than the minimum | ||||||
|  * less than the maximum threads then a new thread will |  *     then the worker thread will exit. If when  | ||||||
|  * be created. |  *     scheduling a job the current job to thread ratio | ||||||
|  */ |  *     becomes greater than the set ratio and the thread pool currently has | ||||||
|  |  *     less than the maximum threads then a new thread will | ||||||
|  |  *     be created. | ||||||
|  |  * | ||||||
|  |  *****************************************************************************/ | ||||||
|  |  | ||||||
| typedef struct THREADPOOL | typedef struct THREADPOOL | ||||||
| { | { | ||||||
| 	ithread_mutex_t mutex;		/* mutex to protect job qs */ |   ithread_mutex_t mutex; /* mutex to protect job qs */ | ||||||
| 	ithread_cond_t condition;	/* condition variable to signal Q */ |   ithread_cond_t condition; /* condition variable to signal Q */ | ||||||
| 	ithread_cond_t start_and_shutdown; /* condition variable for start and stop */ |   ithread_cond_t start_and_shutdown; /* condition variable for start  | ||||||
| 	int lastJobId;			/* ids for jobs */ |                                         and stop */ | ||||||
| 	int shutdown;			/* whether or not we are shutting down */ |   int lastJobId; /* ids for jobs */ | ||||||
| 	int totalThreads;		/* total number of threads */ |   int shutdown;  /* whether or not we are shutting down */ | ||||||
| 	int busyThreads;		/* number of threads that are currently executing jobs */ |   int totalThreads;      /* total number of threads */ | ||||||
| 	int persistentThreads;		/* number of persistent threads */ |   int persistentThreads; /* number of persistent threads */ | ||||||
| 	FreeList jobFreeList;		/* free list of jobs */ |   FreeList jobFreeList;  /* free list of jobs */ | ||||||
| 	LinkedList lowJobQ;		/* low priority job Q */ |   LinkedList lowJobQ;    /* low priority job Q */ | ||||||
| 	LinkedList medJobQ;		/* med priority job Q */ |   LinkedList medJobQ;    /* med priority job Q */ | ||||||
| 	LinkedList highJobQ;		/* high priority job Q */ |   LinkedList highJobQ;   /* high priority job Q */ | ||||||
| 	ThreadPoolJob *persistentJob;	/* persistent job */ |   ThreadPoolJob *persistentJob; /* persistent job */ | ||||||
| 	ThreadPoolAttr attr;		/* thread pool attributes */ |   | ||||||
|  |   ThreadPoolAttr attr; /* thread pool attributes */ | ||||||
|  |    | ||||||
|  | #ifdef STATS | ||||||
|  |   /* statistics */ | ||||||
|  |   ThreadPoolStats stats; | ||||||
|  | #endif | ||||||
|   |   | ||||||
| 	/* statistics */ |  | ||||||
| 	ThreadPoolStats stats; |  | ||||||
| } ThreadPool; | } ThreadPool; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolInit |  * Function: ThreadPoolInit | ||||||
|  * |  * | ||||||
| @@ -325,8 +267,8 @@ typedef struct THREADPOOL | |||||||
|  *      INVALID_POLICY if schedPolicy can't be set |  *      INVALID_POLICY if schedPolicy can't be set | ||||||
|  *      EMAXTHREADS if minimum threads is greater than maximum threads |  *      EMAXTHREADS if minimum threads is greater than maximum threads | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr); | int ThreadPoolInit(ThreadPool *tp, | ||||||
|  |   ThreadPoolAttr *attr); | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolAddPersistent |  * Function: ThreadPoolAddPersistent | ||||||
| @@ -348,8 +290,9 @@ int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr); | |||||||
|  *      EOUTOFMEM not enough memory to add job. |  *      EOUTOFMEM not enough memory to add job. | ||||||
|  *      EMAXTHREADS not enough threads to add persistent job. |  *      EMAXTHREADS not enough threads to add persistent job. | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int ThreadPoolAddPersistent(ThreadPool*tp, ThreadPoolJob *job, int *jobId); | int ThreadPoolAddPersistent (ThreadPool*tp, | ||||||
|  |   ThreadPoolJob *job, | ||||||
|  |   int *jobId); | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolGetAttr |  * Function: ThreadPoolGetAttr | ||||||
| @@ -364,9 +307,8 @@ int ThreadPoolAddPersistent(ThreadPool*tp, ThreadPoolJob *job, int *jobId); | |||||||
|  *      0 on success, nonzero on failure |  *      0 on success, nonzero on failure | ||||||
|  *      Always returns 0. |  *      Always returns 0. | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out); | int ThreadPoolGetAttr(ThreadPool *tp, | ||||||
|  |   ThreadPoolAttr *out); | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolSetAttr |  * Function: ThreadPoolSetAttr | ||||||
|  * |  * | ||||||
| @@ -380,8 +322,8 @@ int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out); | |||||||
|  *      0 on success, nonzero on failure |  *      0 on success, nonzero on failure | ||||||
|  *      Returns INVALID_POLICY if policy can not be set. |  *      Returns INVALID_POLICY if policy can not be set. | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr); | int ThreadPoolSetAttr(ThreadPool *tp, | ||||||
|  |   ThreadPoolAttr *attr); | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolAdd |  * Function: ThreadPoolAdd | ||||||
| @@ -400,8 +342,9 @@ int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr); | |||||||
|  *      0 on success, nonzero on failure |  *      0 on success, nonzero on failure | ||||||
|  *      EOUTOFMEM if not enough memory to add job. |  *      EOUTOFMEM if not enough memory to add job. | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int ThreadPoolAdd (ThreadPool*tp, ThreadPoolJob *job, int *jobId); | int ThreadPoolAdd (ThreadPool*tp, | ||||||
|  |   ThreadPoolJob *job, | ||||||
|  |   int *jobId); | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolRemove |  * Function: ThreadPoolRemove | ||||||
| @@ -418,7 +361,8 @@ int ThreadPoolAdd (ThreadPool*tp, ThreadPoolJob *job, int *jobId); | |||||||
|  *      0 on success, nonzero on failure. |  *      0 on success, nonzero on failure. | ||||||
|  *      INVALID_JOB_ID if job not found.  |  *      INVALID_JOB_ID if job not found.  | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int ThreadPoolRemove(ThreadPool *tp, int jobId, ThreadPoolJob *out); | int ThreadPoolRemove(ThreadPool *tp, | ||||||
|  |   int jobId, ThreadPoolJob *out); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -455,7 +399,6 @@ int ThreadPoolShutdown(ThreadPool *tp); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg); | int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPJobSetPriority |  * Function: TPJobSetPriority | ||||||
|  * |  * | ||||||
| @@ -469,7 +412,6 @@ int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority); | int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPJobSetFreeFunction |  * Function: TPJobSetFreeFunction | ||||||
|  * |  * | ||||||
| @@ -497,7 +439,6 @@ int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPAttrInit(ThreadPoolAttr *attr); | int TPAttrInit(ThreadPoolAttr *attr); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPAttrSetMaxThreads |  * Function: TPAttrSetMaxThreads | ||||||
|  * |  * | ||||||
| @@ -511,7 +452,6 @@ int TPAttrInit(ThreadPoolAttr *attr); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads); | int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPAttrSetMinThreads |  * Function: TPAttrSetMinThreads | ||||||
|  * |  * | ||||||
| @@ -525,21 +465,6 @@ int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads); | int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: TPAttrSetStackSize |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Sets the stack size for the thread pool attributes. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      attr - must be valid thread pool attributes. |  | ||||||
|  *      stackSize - value to set |  | ||||||
|  *  Returns: |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *****************************************************************************/ |  | ||||||
| int TPAttrSetStackSize(ThreadPoolAttr *attr, size_t stackSize); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPAttrSetIdleTime |  * Function: TPAttrSetIdleTime | ||||||
|  * |  * | ||||||
| @@ -552,7 +477,6 @@ int TPAttrSetStackSize(ThreadPoolAttr *attr, size_t stackSize); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime); | int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPAttrSetJobsPerThread |  * Function: TPAttrSetJobsPerThread | ||||||
|  * |  * | ||||||
| @@ -566,7 +490,6 @@ int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread); | int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPAttrSetStarvationTime |  * Function: TPAttrSetStarvationTime | ||||||
|  * |  * | ||||||
| @@ -580,7 +503,6 @@ int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime); | int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: TPAttrSetSchedPolicy |  * Function: TPAttrSetSchedPolicy | ||||||
|  * |  * | ||||||
| @@ -608,7 +530,6 @@ int TPAttrSetSchedPolicy(ThreadPoolAttr *attr, PolicyType schedPolicy); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal); | int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal); | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolGetStats |  * Function: ThreadPoolGetStats | ||||||
|  * |  * | ||||||
| @@ -623,20 +544,14 @@ int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal); | |||||||
|  *      Always returns 0. |  *      Always returns 0. | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| #ifdef STATS | #ifdef STATS | ||||||
| 	EXPORT_SPEC int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats); | 	EXPORT int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats); | ||||||
|  |  | ||||||
| 	EXPORT_SPEC void ThreadPoolPrintStats(ThreadPoolStats *stats); | 	EXPORT void ThreadPoolPrintStats(ThreadPoolStats *stats); | ||||||
| #else |  | ||||||
| 	static UPNP_INLINE int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats) {} |  | ||||||
|  |  | ||||||
| 	static UPNP_INLINE void ThreadPoolPrintStats(ThreadPoolStats *stats) {} |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #endif /* ThreadPool */ | ||||||
| #endif /* THREADPOOL_H */ |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										66
									
								
								threadutil/inc/iasnprintf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								threadutil/inc/iasnprintf.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | /******************************************************************************* | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  |  * All rights reserved.  | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without  | ||||||
|  |  * modification, are permitted provided that the following conditions are met:  | ||||||
|  |  * | ||||||
|  |  * * Redistributions of source code must retain the above copyright notice,  | ||||||
|  |  * this list of conditions and the following disclaimer.  | ||||||
|  |  * * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  |  * this list of conditions and the following disclaimer in the documentation  | ||||||
|  |  * and/or other materials provided with the distribution.  | ||||||
|  |  * * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  |  * may be used to endorse or promote products derived from this software  | ||||||
|  |  * without specific prior written permission. | ||||||
|  |  *  | ||||||
|  |  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  |  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  |  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  |  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  |  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  |  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  |  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  |  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  |  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  |  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  |  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  * | ||||||
|  |  ******************************************************************************/ | ||||||
|  |  | ||||||
|  | #include <stdarg.h> | ||||||
|  |  | ||||||
|  | #define EXPORT | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Allocates enough memory for the | ||||||
|  |  * Formatted string, up to max | ||||||
|  |  * specified. | ||||||
|  |  * With max set to -1, allocates | ||||||
|  |  * as much size as needed. | ||||||
|  |  * Memory must be freed using free. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | EXPORT int iasnprintf(char **ret, | ||||||
|  | 	       int incr, | ||||||
|  | 	       int max, | ||||||
|  | 	       const char * fmt, ...) | ||||||
|  | #ifndef SPARC_SOLARIS | ||||||
|  |  #if (__GNUC__ >= 3) | ||||||
|  | 	__attribute__((format (__printf__, 4, 5))); | ||||||
|  |  #else | ||||||
|  |  ; | ||||||
|  |  #endif | ||||||
|  |  EXPORT void iasnprintfFree(char *); | ||||||
|  | #else | ||||||
|  | ; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
| @@ -29,288 +29,144 @@ | |||||||
|  * |  * | ||||||
|  ******************************************************************************/ |  ******************************************************************************/ | ||||||
|  |  | ||||||
|  | #ifndef ITHREADH | ||||||
| #ifndef ITHREAD_H | #define ITHREADH | ||||||
| #define ITHREAD_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #if !defined(WIN32) |  | ||||||
| 	#include <sys/param.h> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "UpnpGlobal.h" /* For UPNP_INLINE, EXPORT_SPEC */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <pthread.h> | #include <pthread.h> | ||||||
| #ifdef WIN32 | #ifndef WIN32 | ||||||
| 	/* Do not #include <unistd.h> */ |  | ||||||
| #else |  | ||||||
| 	#include <unistd.h> | 	#include <unistd.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #ifdef __FreeBSD__ | ||||||
| #if defined(BSD) | #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE | ||||||
| 	#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef PTHREAD_MUTEX_RECURSIVE | #ifdef PTHREAD_MUTEX_RECURSIVE | ||||||
| 	/* This system has SuS2-compliant mutex attributes. | /* This system has SuS2-compliant mutex attributes. | ||||||
| 	 * E.g. on Cygwin, where we don't have the old nonportable (NP) symbols |  * E.g. on Cygwin, where we don't have the old nonportable (NP) symbols | ||||||
| 	 */ |  */ | ||||||
| 	#define ITHREAD_MUTEX_FAST_NP       PTHREAD_MUTEX_NORMAL | #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL | ||||||
| 	#define ITHREAD_MUTEX_RECURSIVE_NP  PTHREAD_MUTEX_RECURSIVE | #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE | ||||||
| 	#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK | #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK | ||||||
| #else /* PTHREAD_MUTEX_RECURSIVE */ | #else | ||||||
| 	#define ITHREAD_MUTEX_FAST_NP       PTHREAD_MUTEX_FAST_NP | #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_FAST_NP | ||||||
| 	#define ITHREAD_MUTEX_RECURSIVE_NP  PTHREAD_MUTEX_RECURSIVE_NP | #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE_NP | ||||||
| 	#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP | #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP | ||||||
| #endif /* PTHREAD_MUTEX_RECURSIVE */ | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #define ITHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE |  | ||||||
| #define ITHREAD_PROCESS_SHARED  PTHREAD_PROCESS_SHARED |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define ITHREAD_CANCELED PTHREAD_CANCELED | #define ITHREAD_CANCELED PTHREAD_CANCELED | ||||||
|  |  | ||||||
|    |    | ||||||
| #define ITHREAD_STACK_MIN PTHREAD_STACK_MIN |   /*************************************************************************** | ||||||
|  |    * Name: ithread_t | ||||||
|  |    * | ||||||
|  |    *  Description: | ||||||
|  |    *      Thread handle. | ||||||
|  |    *      typedef to pthread_t. | ||||||
|  |    *      Internal Use Only. | ||||||
|  |    ***************************************************************************/ | ||||||
|  |   typedef pthread_t ithread_t;  | ||||||
|  |    | ||||||
|  |   /**************************************************************************** | ||||||
|  |    * Name: ithread_attr_t | ||||||
|  |    * | ||||||
|  |    *  Description: | ||||||
|  |    *      Thread attribute. | ||||||
|  |    *      typedef to pthread_attr_t | ||||||
|  |    *      Internal Use Only | ||||||
|  |    ***************************************************************************/ | ||||||
|  |   typedef pthread_attr_t ithread_attr_t;	 | ||||||
|  |  | ||||||
|  |  | ||||||
| /*************************************************************************** |   /**************************************************************************** | ||||||
|  * Name: ithread_t |    * Name: start_routine | ||||||
|  * |    * | ||||||
|  *  Description: |    *  Description: | ||||||
|  *      Thread handle. |    *      Thread start routine  | ||||||
|  *      typedef to pthread_t. |    *      Internal Use Only. | ||||||
|  *      Internal Use Only. |    ***************************************************************************/ | ||||||
|  ***************************************************************************/ |   typedef void * (*start_routine) (void *arg); | ||||||
| typedef pthread_t ithread_t; |  | ||||||
|  |  | ||||||
|    |    | ||||||
| /**************************************************************************** |   /**************************************************************************** | ||||||
|  * Name: ithread_attr_t |    * Name: ithread_cond_t | ||||||
|  * |    * | ||||||
|  *  Description: |    *  Description: | ||||||
|  *      Thread attribute. |    *      condition variable. | ||||||
|  *      typedef to pthread_attr_t |    *      typedef to pthread_cond_t | ||||||
|  *      Internal Use Only |    *      Internal Use Only. | ||||||
|  ***************************************************************************/ |    ***************************************************************************/ | ||||||
| typedef pthread_attr_t ithread_attr_t;	 |   typedef pthread_cond_t ithread_cond_t; | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |   /**************************************************************************** | ||||||
|  * Name: start_routine |    * Name: ithread_mutexattr_t | ||||||
|  * |    * | ||||||
|  *  Description: |    *  Description: | ||||||
|  *      Thread start routine  |    *      Mutex attribute. | ||||||
|  *      Internal Use Only. |    *      typedef to pthread_mutexattr_t | ||||||
|  ***************************************************************************/ |    *      Internal Use Only | ||||||
| typedef void *(*start_routine)(void *arg); |    ***************************************************************************/ | ||||||
|  |   typedef pthread_mutexattr_t ithread_mutexattr_t;	 | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |   /**************************************************************************** | ||||||
|  * Name: ithread_cond_t |    * Name: ithread_mutex_t | ||||||
|  * |    * | ||||||
|  *  Description: |    *  Description: | ||||||
|  *      condition variable. |    *      Mutex. | ||||||
|  *      typedef to pthread_cond_t |    *      typedef to pthread_mutex_t | ||||||
|  *      Internal Use Only. |    *      Internal Use Only. | ||||||
|  ***************************************************************************/ |    ***************************************************************************/ | ||||||
| typedef pthread_cond_t ithread_cond_t; |   typedef pthread_mutex_t ithread_mutex_t; | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |   /**************************************************************************** | ||||||
|  * Name: ithread_mutexattr_t |    * Name: ithread_condattr_t | ||||||
|  * |    * | ||||||
|  *  Description: |    *  Description: | ||||||
|  *      Mutex attribute. |    *      Condition attribute. | ||||||
|  *      typedef to pthread_mutexattr_t |    *      typedef to pthread_condattr_t | ||||||
|  *      Internal Use Only |    *      NOT USED | ||||||
|  ***************************************************************************/ |    *      Internal Use Only | ||||||
| typedef pthread_mutexattr_t ithread_mutexattr_t;	 |    ***************************************************************************/ | ||||||
|  |   typedef pthread_condattr_t ithread_condattr_t;	 | ||||||
|  |  | ||||||
|  |   /**************************************************************************** | ||||||
|  |    * Function: ithread_mutexattr_init | ||||||
|  |    * | ||||||
|  |    *  Description: | ||||||
|  |    *      Initializes a mutex attribute variable. | ||||||
|  |    *      Used to set the type of the mutex. | ||||||
|  |    *  Parameters: | ||||||
|  |    *      ithread_mutexattr_init * attr (must be valid non NULL pointer to  | ||||||
|  |    *                                     pthread_mutexattr_t) | ||||||
|  |    *  Returns: | ||||||
|  |    *      0 on success, Nonzero on failure. | ||||||
|  |    *      Always returns 0. | ||||||
|  |    *      See man page for pthread_mutexattr_init | ||||||
|  |    ***************************************************************************/ | ||||||
|    |    | ||||||
| /**************************************************************************** |  | ||||||
|  * Name: ithread_mutex_t |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Mutex. |  | ||||||
|  *      typedef to pthread_mutex_t |  | ||||||
|  *      Internal Use Only. |  | ||||||
|  ***************************************************************************/ |  | ||||||
| typedef pthread_mutex_t ithread_mutex_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Name: ithread_condattr_t |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Condition attribute. |  | ||||||
|  *      typedef to pthread_condattr_t |  | ||||||
|  *      NOT USED |  | ||||||
|  *      Internal Use Only |  | ||||||
|  ***************************************************************************/ |  | ||||||
| typedef pthread_condattr_t ithread_condattr_t;	 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Name: ithread_rwlockattr_t |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Mutex attribute. |  | ||||||
|  *      typedef to pthread_rwlockattr_t |  | ||||||
|  *      Internal Use Only |  | ||||||
|  ***************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| typedef pthread_rwlockattr_t ithread_rwlockattr_t;	 |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Name: ithread_rwlock_t |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Condition attribute. |  | ||||||
|  *      typedef to pthread_rwlock_t |  | ||||||
|  *      Internal Use Only |  | ||||||
|  ***************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| typedef pthread_rwlock_t ithread_rwlock_t; |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_initialize_library |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Initializes the library. Does nothing in all implementations, except |  | ||||||
|  *      when statically linked for WIN32. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      none. |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  ***************************************************************************/ |  | ||||||
| static UPNP_INLINE int ithread_initialize_library(void) { |  | ||||||
| 	int ret = 0; |  | ||||||
|  |  | ||||||
| #if defined(WIN32) && defined(PTW32_STATIC_LIB) |  | ||||||
| 	ret = !pthread_win32_process_attach_np(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_cleanup_library |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Clean up library resources. Does nothing in all implementations, except |  | ||||||
|  *      when statically linked for WIN32. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      none. |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  ***************************************************************************/ |  | ||||||
| static UPNP_INLINE int ithread_cleanup_library(void) { |  | ||||||
| 	int ret = 0; |  | ||||||
|  |  | ||||||
| #if defined(WIN32) && defined(PTW32_STATIC_LIB) |  | ||||||
| 	ret = !pthread_win32_process_detach_np(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_initialize_thread |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Initializes the thread. Does nothing in all implementations, except |  | ||||||
|  *      when statically linked for WIN32. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      none. |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  ***************************************************************************/ |  | ||||||
| static UPNP_INLINE int ithread_initialize_thread(void) { |  | ||||||
| 	int ret = 0; |  | ||||||
|  |  | ||||||
| #if defined(WIN32) && defined(PTW32_STATIC_LIB) |  | ||||||
| 	ret = !pthread_win32_thread_attach_np(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_cleanup_thread |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Clean up thread resources. Does nothing in all implementations, except |  | ||||||
|  *      when statically linked for WIN32. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      none. |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  ***************************************************************************/ |  | ||||||
| static UPNP_INLINE int ithread_cleanup_thread(void) { |  | ||||||
| 	int ret = 0; |  | ||||||
|  |  | ||||||
| #if defined(WIN32) && defined(PTW32_STATIC_LIB) |  | ||||||
| 	ret = !pthread_win32_thread_detach_np(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_mutexattr_init |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Initializes a mutex attribute variable. |  | ||||||
|  *      Used to set the type of the mutex. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_mutexattr_init * attr (must be valid non NULL pointer to  |  | ||||||
|  *                                     pthread_mutexattr_t) |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_mutexattr_init |  | ||||||
|  ***************************************************************************/ |  | ||||||
| #define ithread_mutexattr_init pthread_mutexattr_init | #define ithread_mutexattr_init pthread_mutexattr_init | ||||||
|    |    | ||||||
|  |   /**************************************************************************** | ||||||
| /**************************************************************************** |    * Function: ithread_mutexattr_destroy | ||||||
|  * Function: ithread_mutexattr_destroy |    * | ||||||
|  * |    *  Description: | ||||||
|  *  Description: |    *      Releases any resources held by the mutex attribute. | ||||||
|  *      Releases any resources held by the mutex attribute. |    *      Currently there are no resources associated with the attribute | ||||||
|  *      Currently there are no resources associated with the attribute |    *  Parameters: | ||||||
|  *  Parameters: |    *      ithread_mutexattr_t * attr (must be valid non NULL pointer to  | ||||||
|  *      ithread_mutexattr_t * attr (must be valid non NULL pointer to  |    *                                  pthread_mutexattr_t) | ||||||
|  *                                  pthread_mutexattr_t) |    *  Returns: | ||||||
|  *  Returns: |    *      0 on success, Nonzero on failure. | ||||||
|  *      0 on success, Nonzero on failure. |    *      Always returns 0. | ||||||
|  *      Always returns 0. |    *      See man page for pthread_mutexattr_destroy | ||||||
|  *      See man page for pthread_mutexattr_destroy |    ***************************************************************************/ | ||||||
|  ***************************************************************************/ |  | ||||||
| #define ithread_mutexattr_destroy pthread_mutexattr_destroy | #define ithread_mutexattr_destroy pthread_mutexattr_destroy | ||||||
|    |    | ||||||
|    |    | ||||||
| @@ -324,7 +180,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *                       ITHREAD_MUTEX_ERRORCHECK_NP |  *                       ITHREAD_MUTEX_ERRORCHECK_NP | ||||||
|  * |  * | ||||||
|  *  Parameters: |  *  Parameters: | ||||||
|  *      ithread_mutexattr_t * attr (must be valid non NULL pointer to  |  *      ithread_mutexattr_t * mutex (must be valid non NULL pointer to  | ||||||
|  *                                   ithread_mutexattr_t) |  *                                   ithread_mutexattr_t) | ||||||
|  *      int kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP |  *      int kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP | ||||||
|  *                or ITHREAD_MUTEX_ERRORCHECK_NP) |  *                or ITHREAD_MUTEX_ERRORCHECK_NP) | ||||||
| @@ -334,9 +190,9 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *      See man page for pthread_mutexattr_setkind_np |  *      See man page for pthread_mutexattr_setkind_np | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| #ifdef PTHREAD_MUTEX_RECURSIVE | #ifdef PTHREAD_MUTEX_RECURSIVE | ||||||
| 	#define ithread_mutexattr_setkind_np pthread_mutexattr_settype | #define ithread_mutexattr_setkind_np pthread_mutexattr_settype | ||||||
| #else | #else | ||||||
| 	#define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np | #define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
| @@ -349,7 +205,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *                       ITHREAD_MUTEX_ERRORCHECK_NP |  *                       ITHREAD_MUTEX_ERRORCHECK_NP | ||||||
|  * |  * | ||||||
|  *  Parameters: |  *  Parameters: | ||||||
|  *      ithread_mutexattr_t * attr (must be valid non NULL pointer to  |  *      ithread_mutexattr_t * mutex (must be valid non NULL pointer to  | ||||||
|  *                                   pthread_mutexattr_t) |  *                                   pthread_mutexattr_t) | ||||||
|  *      int *kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP |  *      int *kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP | ||||||
|  *                or ITHREAD_MUTEX_ERRORCHECK_NP) |  *                or ITHREAD_MUTEX_ERRORCHECK_NP) | ||||||
| @@ -359,9 +215,9 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *      See man page for pthread_mutexattr_getkind_np |  *      See man page for pthread_mutexattr_getkind_np | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| #ifdef PTHREAD_MUTEX_RECURSIVE | #ifdef PTHREAD_MUTEX_RECURSIVE | ||||||
| 	#define ithread_mutexattr_getkind_np pthread_mutexattr_gettype | #define ithread_mutexattr_getkind_np pthread_mutexattr_gettype | ||||||
| #else | #else | ||||||
| 	#define ithread_mutexattr_getkind_np pthread_mutexattr_getkind_np | #define ithread_mutexattr_getkind_np pthread_mutexattr_getkind_np | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|    |    | ||||||
| @@ -382,7 +238,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| #define ithread_mutex_init pthread_mutex_init | #define ithread_mutex_init pthread_mutex_init | ||||||
|    |    | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ithread_mutex_lock |  * Function: ithread_mutex_lock | ||||||
|  * |  * | ||||||
| @@ -437,187 +292,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
| #define ithread_mutex_destroy pthread_mutex_destroy | #define ithread_mutex_destroy pthread_mutex_destroy | ||||||
|  |  | ||||||
|    |    | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlockattr_init |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Initializes a rwlock attribute variable to default values. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      const ithread_rwlockattr_init *attr (must be valid non NULL pointer to  |  | ||||||
|  *                                           pthread_rwlockattr_t) |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlockattr_init |  | ||||||
|  ***************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlockattr_init pthread_rwlockattr_init |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlockattr_destroy |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Releases any resources held by the rwlock attribute. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlockattr_t *attr (must be valid non NULL pointer to  |  | ||||||
|  *                                  pthread_rwlockattr_t) |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlockattr_destroy |  | ||||||
|  ***************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlockattr_destroy pthread_rwlockattr_destroy |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|    |  | ||||||
|    |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlockatttr_setpshared |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Sets the rwlock type in the attribute. |  | ||||||
|  *      Valid types are: ITHREAD_PROCESS_PRIVATE  |  | ||||||
|  *                       ITHREAD_PROCESS_SHARED |  | ||||||
|  * |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlockattr_t * attr (must be valid non NULL pointer to  |  | ||||||
|  *                                   ithread_rwlockattr_t) |  | ||||||
|  *      int kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED) |  | ||||||
|  * |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success. Nonzero on failure. |  | ||||||
|  *      Returns EINVAL if the kind is not supported. |  | ||||||
|  *      See man page for pthread_rwlockattr_setkind_np |  | ||||||
|  *****************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlockatttr_setpshared pthread_rwlockatttr_setpshared |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlockatttr_getpshared |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Gets the rwlock type in the attribute. |  | ||||||
|  *      Valid types are: ITHREAD_PROCESS_PRIVATE  |  | ||||||
|  *                       ITHREAD_PROCESS_SHARED  |  | ||||||
|  * |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlockattr_t * attr (must be valid non NULL pointer to  |  | ||||||
|  *                                   pthread_rwlockattr_t) |  | ||||||
|  *      int *kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED) |  | ||||||
|  * |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success. Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlockatttr_getpshared |  | ||||||
|  *****************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlockatttr_getpshared pthread_rwlockatttr_getpshared |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|    |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlock_init |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Initializes rwlock. |  | ||||||
|  *      Must be called before use. |  | ||||||
|  *       |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) |  | ||||||
|  *      const ithread_rwlockattr_t *rwlock_attr  |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlock_init |  | ||||||
|  *****************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlock_init pthread_rwlock_init |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlock_rdlock |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Locks rwlock for reading. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) |  | ||||||
|  *      rwlock must be initialized. |  | ||||||
|  *       |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlock_rdlock |  | ||||||
|  *****************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlock_rdlock pthread_rwlock_rdlock |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlock_wrlock |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Locks rwlock for writting. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) |  | ||||||
|  *      rwlock must be initialized. |  | ||||||
|  *       |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlock_wrlock |  | ||||||
|  *****************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlock_wrlock pthread_rwlock_wrlock |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlock_unlock |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Unlocks rwlock. |  | ||||||
|  * |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) |  | ||||||
|  *      rwlock must be initialized. |  | ||||||
|  *       |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success, Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlock_unlock |  | ||||||
|  *****************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlock_unlock pthread_rwlock_unlock |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** |  | ||||||
|  * Function: ithread_rwlock_destroy |  | ||||||
|  * |  | ||||||
|  *  Description: |  | ||||||
|  *      Releases any resources held by the rwlock.  |  | ||||||
|  *		rwlock can no longer be used after this call. |  | ||||||
|  *		rwlock is only destroyed when there are no longer any threads waiting on it.  |  | ||||||
|  *		rwlock cannot be destroyed if it is locked. |  | ||||||
|  *  Parameters: |  | ||||||
|  *      ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) |  | ||||||
|  *      rwlock must be initialized. |  | ||||||
|  *  Returns: |  | ||||||
|  *      0 on success. Nonzero on failure. |  | ||||||
|  *      Always returns 0. |  | ||||||
|  *      See man page for pthread_rwlock_destroy |  | ||||||
|  *****************************************************************************/ |  | ||||||
| #if UPNP_USE_RWLOCK |  | ||||||
| 	#define ithread_rwlock_destroy pthread_rwlock_destroy |  | ||||||
| #endif /* UPNP_USE_RWLOCK */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ithread_cond_init |  * Function: ithread_cond_init | ||||||
|  * |  * | ||||||
| @@ -625,8 +299,8 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *      Initializes condition variable. |  *      Initializes condition variable. | ||||||
|  *      Must be called before use. |  *      Must be called before use. | ||||||
|  *  Parameters: |  *  Parameters: | ||||||
|  *      ithread_cond_t *cond (must be valid non NULL pointer to pthread_cond_t) |  *      ithread_cond_t * cond (must be valid non NULL pointer to pthread_cond_t) | ||||||
|  *      const ithread_condattr_t *cond_attr (ignored) |  *      const ithread_condattr_t * cond_attr (ignored) | ||||||
|  *  Returns: |  *  Returns: | ||||||
|  *      0 on success, Nonzero on failure. |  *      0 on success, Nonzero on failure. | ||||||
|  *      See man page for pthread_cond_init |  *      See man page for pthread_cond_init | ||||||
| @@ -634,6 +308,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
| #define ithread_cond_init pthread_cond_init | #define ithread_cond_init pthread_cond_init | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ithread_cond_signal |  * Function: ithread_cond_signal | ||||||
|  * |  * | ||||||
| @@ -641,7 +316,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *      Wakes up exactly one thread waiting on condition. |  *      Wakes up exactly one thread waiting on condition. | ||||||
|  *      Associated mutex MUST be locked by thread before entering this call. |  *      Associated mutex MUST be locked by thread before entering this call. | ||||||
|  *  Parameters: |  *  Parameters: | ||||||
|  *      ithread_cond_t *cond (must be valid non NULL pointer to  |  *      ithread_cond_t * cond (must be valid non NULL pointer to  | ||||||
|  *      ithread_cond_t) |  *      ithread_cond_t) | ||||||
|  *      cond must be initialized |  *      cond must be initialized | ||||||
|  *  Returns: |  *  Returns: | ||||||
| @@ -658,7 +333,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *      Wakes up all threads waiting on condition. |  *      Wakes up all threads waiting on condition. | ||||||
|  *      Associated mutex MUST be locked by thread before entering this call. |  *      Associated mutex MUST be locked by thread before entering this call. | ||||||
|  *  Parameters: |  *  Parameters: | ||||||
|  *      ithread_cond_t *cond (must be valid non NULL pointer to  |  *      ithread_cond_t * cond (must be valid non NULL pointer to  | ||||||
|  *      ithread_cond_t) |  *      ithread_cond_t) | ||||||
|  *      cond must be initialized |  *      cond must be initialized | ||||||
|  *  Returns: |  *  Returns: | ||||||
| @@ -676,7 +351,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *      Associated mutex MUST be locked by thread before entering this call. |  *      Associated mutex MUST be locked by thread before entering this call. | ||||||
|  *      Mutex is reacquired when call returns. |  *      Mutex is reacquired when call returns. | ||||||
|  *  Parameters: |  *  Parameters: | ||||||
|  *      ithread_cond_t *cond (must be valid non NULL pointer to  |  *      ithread_cond_t * cond (must be valid non NULL pointer to  | ||||||
|  *      ithread_cond_t) |  *      ithread_cond_t) | ||||||
|  *      cond must be initialized |  *      cond must be initialized | ||||||
|  *      ithread_mutex_t *mutex (must be valid non NULL pointer to  |  *      ithread_mutex_t *mutex (must be valid non NULL pointer to  | ||||||
| @@ -692,19 +367,23 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|   /**************************************************************************** |   /**************************************************************************** | ||||||
|    * Function: pthread_cond_timedwait |    * Function: pthread_cond_timedwait | ||||||
|    * |    * | ||||||
|    *	Description:       |    *  Description:       | ||||||
|    *		Atomically releases the associated mutex and waits on the |    *      Atomically releases the associated mutex and waits on the condition.  | ||||||
|    *	condition. |    *		If the condition is not signaled in the specified time  | ||||||
|    *		If the condition is not signaled in the specified time than the |    *              than the  | ||||||
|    *	call times out and returns. |    *		call times out and returns. | ||||||
|    *		Associated mutex MUST be locked by thread before entering this call. |    *		Associated mutex MUST be locked by thread before entering  | ||||||
|    *		Mutex is reacquired when call returns. |    *              this call. | ||||||
|  |    *      Mutex is reacquired when call returns. | ||||||
|    *  Parameters: |    *  Parameters: | ||||||
|    *      ithread_cond_t *cond (must be valid non NULL pointer to ithread_cond_t) |    *      ithread_cond_t * cond (must be valid non NULL pointer to  | ||||||
|    *      	cond must be initialized |    *      ithread_cond_t) | ||||||
|    *      ithread_mutex_t *mutex (must be valid non NULL pointer to ithread_mutex_t) |    *      cond must be initialized | ||||||
|    *      	Mutex must be locked. |    *      ithread_mutex_t *mutex (must be valid non NULL pointer to  | ||||||
|    *      const struct timespec *abstime (absolute time, measured from Jan 1, 1970) |    *      ithread_mutex_t) | ||||||
|  |    *      Mutex must be locked. | ||||||
|  |    *      const struct timespec *abstime (absolute time, measured  | ||||||
|  |    *      from Jan 1, 1970) | ||||||
|    *  Returns: |    *  Returns: | ||||||
|    *      0 on success. ETIMEDOUT on timeout. Nonzero on failure. |    *      0 on success. ETIMEDOUT on timeout. Nonzero on failure. | ||||||
|    *      See man page for pthread_cond_timedwait |    *      See man page for pthread_cond_timedwait | ||||||
| @@ -720,7 +399,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|    *      Releases any resources held by the condition variable.  |    *      Releases any resources held by the condition variable.  | ||||||
|    *		Condition variable can no longer be used after this call.	 |    *		Condition variable can no longer be used after this call.	 | ||||||
|    *  Parameters: |    *  Parameters: | ||||||
|    *      ithread_cond_t *cond (must be valid non NULL pointer to  |    *      ithread_cond_t * cond (must be valid non NULL pointer to  | ||||||
|    *      ithread_cond_t) |    *      ithread_cond_t) | ||||||
|    *      cond must be initialized. |    *      cond must be initialized. | ||||||
|    *  Returns: |    *  Returns: | ||||||
| @@ -729,49 +408,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|    ***************************************************************************/ |    ***************************************************************************/ | ||||||
| #define ithread_cond_destroy pthread_cond_destroy | #define ithread_cond_destroy pthread_cond_destroy | ||||||
|  |  | ||||||
|   /**************************************************************************** |  | ||||||
|    * Function: ithread_attr_init |  | ||||||
|    * |  | ||||||
|    *  Description: |  | ||||||
|    *      Initialises thread attribute object. |  | ||||||
|    *  Parameters: |  | ||||||
|    *      ithread_attr_t *attr (must be valid non NULL pointer to |  | ||||||
|    *      ithread_attr_t) |  | ||||||
|    *  Returns: |  | ||||||
|    *      0 on success. Nonzero on failure. |  | ||||||
|    *      See man page for pthread_attr_init |  | ||||||
|    ***************************************************************************/ |  | ||||||
| #define ithread_attr_init pthread_attr_init |  | ||||||
|  |  | ||||||
|   /**************************************************************************** |  | ||||||
|    * Function: ithread_attr_destroy |  | ||||||
|    * |  | ||||||
|    *  Description: |  | ||||||
|    *      Destroys thread attribute object. |  | ||||||
|    *  Parameters: |  | ||||||
|    *      ithread_attr_t *attr (must be valid non NULL pointer to |  | ||||||
|    *      ithread_attr_t) |  | ||||||
|    *  Returns: |  | ||||||
|    *      0 on success. Nonzero on failure. |  | ||||||
|    *      See man page for pthread_attr_destroy |  | ||||||
|    ***************************************************************************/ |  | ||||||
| #define ithread_attr_destroy pthread_attr_destroy |  | ||||||
|  |  | ||||||
|   /**************************************************************************** |  | ||||||
|    * Function: ithread_attr_setstacksize |  | ||||||
|    * |  | ||||||
|    *  Description: |  | ||||||
|    *      Sets stack size of a thread attribute object. |  | ||||||
|    *  Parameters: |  | ||||||
|    *      ithread_attr_t *attr (must be valid non NULL pointer to |  | ||||||
|    *      ithread_attr_t) |  | ||||||
|    *      size_t stacksize (value of stacksize must be greater than |  | ||||||
|    *      ITHREAD_STACK_MIN and lower than system-imposed limits |  | ||||||
|    *  Returns: |  | ||||||
|    *      0 on success. Nonzero on failure. |  | ||||||
|    *      See man page for pthread_attr_setstacksize |  | ||||||
|    ***************************************************************************/ |  | ||||||
| #define ithread_attr_setstacksize pthread_attr_setstacksize |  | ||||||
|  |  | ||||||
|   /**************************************************************************** |   /**************************************************************************** | ||||||
|    * Function: ithread_create |    * Function: ithread_create | ||||||
| @@ -781,7 +417,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|    *      and argument. |    *      and argument. | ||||||
|    *  Parameters: |    *  Parameters: | ||||||
|    *      ithread_t * thread (must be valid non NULL pointer to pthread_t) |    *      ithread_t * thread (must be valid non NULL pointer to pthread_t) | ||||||
|    *      ithread_attr_t *attr |    *      ithread_attr_t *attr, IGNORED | ||||||
|    *      void * (start_routine) (void *arg) (start routine) |    *      void * (start_routine) (void *arg) (start routine) | ||||||
|    *      void * arg - argument. |    *      void * arg - argument. | ||||||
|    *  Returns: |    *  Returns: | ||||||
| @@ -819,7 +455,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|    ***************************************************************************/ |    ***************************************************************************/ | ||||||
| #define ithread_exit pthread_exit | #define ithread_exit pthread_exit | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|    * Function: ithread_get_current_thread_id |    * Function: ithread_get_current_thread_id | ||||||
|    * |    * | ||||||
| @@ -843,7 +478,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|    ***************************************************************************/ |    ***************************************************************************/ | ||||||
| #define ithread_self pthread_self | #define ithread_self pthread_self | ||||||
|  |  | ||||||
|  |  | ||||||
|   /**************************************************************************** |   /**************************************************************************** | ||||||
|    * Function: ithread_detach |    * Function: ithread_detach | ||||||
|    * |    * | ||||||
| @@ -857,7 +491,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|    ***************************************************************************/ |    ***************************************************************************/ | ||||||
| #define ithread_detach pthread_detach   | #define ithread_detach pthread_detach   | ||||||
|  |  | ||||||
|  |  | ||||||
|   /**************************************************************************** |   /**************************************************************************** | ||||||
|    * Function: ithread_join |    * Function: ithread_join | ||||||
|    * |    * | ||||||
| @@ -877,6 +510,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
| #define ithread_join pthread_join | #define ithread_join pthread_join | ||||||
|    |    | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: isleep |  * Function: isleep | ||||||
|  * |  * | ||||||
| @@ -890,12 +524,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *		0 on success, Nonzero on failure. |  *		0 on success, Nonzero on failure. | ||||||
|  *              See man page for sleep (man 3 sleep) |  *              See man page for sleep (man 3 sleep) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| #ifdef WIN32 | #define isleep sleep | ||||||
| 	#define isleep(x) Sleep((x)*1000) |  | ||||||
| #else |  | ||||||
| 	#define isleep sleep |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: isleep |  * Function: isleep | ||||||
| @@ -910,10 +539,21 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
|  *		0 on success, Nonzero on failure. |  *		0 on success, Nonzero on failure. | ||||||
|  *              See man page for sleep (man 3 sleep) |  *              See man page for sleep (man 3 sleep) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
|  | #define imillisleep(x) usleep(1000*x) | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef WIN32 | ||||||
| 	#define imillisleep Sleep | 	#ifndef UPNP_STATIC_LIB | ||||||
|  | 		#ifdef LIBUPNP_EXPORTS | ||||||
|  | 			/* set up declspec for dll export to make functions visible to library users */ | ||||||
|  | 			#define EXPORT_SPEC __declspec(dllexport) | ||||||
|  | 		#else | ||||||
|  | 			#define EXPORT_SPEC __declspec(dllimport) | ||||||
|  | 		#endif | ||||||
|  | 	#else | ||||||
|  | 		#define EXPORT_SPEC | ||||||
|  | 	#endif | ||||||
| #else | #else | ||||||
| 	#define imillisleep(x) usleep(1000*x) | 	#define EXPORT_SPEC | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -922,11 +562,9 @@ static UPNP_INLINE int ithread_cleanup_thread(void) { | |||||||
| EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind); | EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #endif /* ITHREADH */ | ||||||
| #endif /* ITHREAD_H */ |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,13 +30,11 @@ | |||||||
| /////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #include "LinkedList.h" | #include "LinkedList.h" | ||||||
| #ifndef WIN32 | #include <sys/param.h> | ||||||
| 	#include <sys/param.h> | #if (defined(BSD) && BSD >= 199306) | ||||||
| #endif | #include <stdlib.h> | ||||||
| #if (defined(BSD) && BSD >= 199306) || defined(__OSX__) || defined(__APPLE__) |  | ||||||
| 	#include <stdlib.h> |  | ||||||
| #else | #else | ||||||
| 	#include <malloc.h> | #include <malloc.h> | ||||||
| #endif | #endif | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
|  |  | ||||||
| @@ -534,4 +532,3 @@ ListSize( LinkedList * list ) | |||||||
|  |  | ||||||
|     return list->size; |     return list->size; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										153
									
								
								threadutil/src/iasnprintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								threadutil/src/iasnprintf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,153 @@ | |||||||
|  | /////////////////////////////////////////////////////////////////////////// | ||||||
|  | // | ||||||
|  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  | // All rights reserved.  | ||||||
|  | // | ||||||
|  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  | // | ||||||
|  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  | // this list of conditions and the following disclaimer.  | ||||||
|  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  | // and/or other materials provided with the distribution.  | ||||||
|  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  | // may be used to endorse or promote products derived from this software  | ||||||
|  | // without specific prior written permission. | ||||||
|  | //  | ||||||
|  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  | // | ||||||
|  | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  | #include <stdarg.h> | ||||||
|  | #include <assert.h> | ||||||
|  | #include <sys/param.h> | ||||||
|  | #if (defined(BSD) && BSD >= 199306) | ||||||
|  | #include <stdlib.h> | ||||||
|  | #else | ||||||
|  | #include <malloc.h> | ||||||
|  | #endif | ||||||
|  | #include <stdio.h> | ||||||
|  | #include "iasnprintf.h" | ||||||
|  |  | ||||||
|  | #ifndef NULL | ||||||
|  | #define NULL 0 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef WIN32 | ||||||
|  |  #define vsnprintf _vsnprintf | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Allocates enough memory for the | ||||||
|  |  * Formatted string, up to max | ||||||
|  |  * specified. | ||||||
|  |  * With max set to -1, it allocates as | ||||||
|  |  * much size as needed. | ||||||
|  |  * Memory must be freed using free. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | int | ||||||
|  | iasnprintf( char **ret, | ||||||
|  |             int incr, | ||||||
|  |             int max, | ||||||
|  |             const char *fmt, | ||||||
|  |             ... ) | ||||||
|  | { | ||||||
|  |     int size = incr; | ||||||
|  |     int retc = 0; | ||||||
|  |     va_list ap; | ||||||
|  |     char *temp = NULL; | ||||||
|  |  | ||||||
|  |     assert( ret ); | ||||||
|  |     assert( fmt ); | ||||||
|  |     ( *ret ) = ( char * )malloc( incr ); | ||||||
|  |  | ||||||
|  |     if( ( *ret ) == NULL ) return -1; | ||||||
|  |  | ||||||
|  |     while( 1 ) { | ||||||
|  |         va_start( ap, fmt ); | ||||||
|  |         retc = vsnprintf( ( *ret ), size, fmt, ap ); | ||||||
|  |         va_end( ap ); | ||||||
|  |  | ||||||
|  |         if( retc < 0 ) { | ||||||
|  |             //size not big enough | ||||||
|  |             //and vsnprintf does NOT return the | ||||||
|  |             //necessary number of bytes | ||||||
|  |             if( ( max != -1 ) && ( size == max ) )  //max reached | ||||||
|  |             { | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             incr *= 2;          //increase increment | ||||||
|  |             //increase size and try again   | ||||||
|  |             if( ( max != -1 ) && ( ( size + incr ) > max ) ) { | ||||||
|  |                 incr = ( max - size ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             temp = ( char * )realloc( ( *ret ), size + incr ); | ||||||
|  |             if( temp == NULL ) { | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |             size += incr; | ||||||
|  |             ( *ret ) = temp; | ||||||
|  |  | ||||||
|  |         } else { | ||||||
|  |             if( ( retc + 1 ) > size ) { | ||||||
|  |                 //size not big enough | ||||||
|  |                 //and vsnprintf  | ||||||
|  |                 //returns the necessary  | ||||||
|  |                 //number of bytes | ||||||
|  |                 if( ( max != -1 ) && ( retc + 1 > max ) ) { | ||||||
|  |                     retc = -1; | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 temp = ( char * )realloc( ( *ret ), retc + 1 ); | ||||||
|  |                 if( temp == NULL ) { | ||||||
|  |                     retc = -1; | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |                 size = retc + 1; | ||||||
|  |                 ( *ret ) = temp;    //size increased try again | ||||||
|  |             } else if( ( retc + 1 ) < size ) { | ||||||
|  |                 //size is bigger than needed | ||||||
|  |                 //try and reallocate smaller | ||||||
|  |  | ||||||
|  |                 temp = ( char * )realloc( ( *ret ), retc + 1 ); | ||||||
|  |                 if( temp != NULL ) { | ||||||
|  |                     ( *ret ) = temp; | ||||||
|  |                 } | ||||||
|  |                 break; | ||||||
|  |             } else              //size is just right, exit | ||||||
|  |             { | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if( retc < 0 ) { | ||||||
|  |         free( ( *ret ) ); | ||||||
|  |         ( *ret ) = NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return retc; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | iasnprintfFree( char *fChar ) | ||||||
|  | { | ||||||
|  |     free( fChar ); | ||||||
|  |     fChar = NULL; | ||||||
|  | } | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| # | # | ||||||
| # "Makefile.am" for "libupnp/upnp" | # "Makefile.am" for "libupnp/upnp" | ||||||
| # | # | ||||||
| # Copyright (C) 2005 Rémi Turboult <r3mi@users.sourceforge.net> | # Copyright (C) 2005 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| # | # | ||||||
|  |  | ||||||
| SUBDIRS = doc . sample | SUBDIRS = doc . sample | ||||||
| @@ -11,6 +11,10 @@ AM_CPPFLAGS = \ | |||||||
| 	-I$(top_srcdir)/threadutil/inc \ | 	-I$(top_srcdir)/threadutil/inc \ | ||||||
| 	-I$(top_srcdir)/ixml/inc | 	-I$(top_srcdir)/ixml/inc | ||||||
|  |  | ||||||
|  | AM_CFLAGS = $(PTHREAD_CFLAGS) | ||||||
|  |  | ||||||
|  | AM_LDFLAGS = $(PTHREAD_LIBS) | ||||||
|  |  | ||||||
| LDADD = \ | LDADD = \ | ||||||
| 	libupnp.la \ | 	libupnp.la \ | ||||||
| 	$(top_builddir)/threadutil/libthreadutil.la \ | 	$(top_builddir)/threadutil/libthreadutil.la \ | ||||||
| @@ -19,11 +23,8 @@ LDADD = \ | |||||||
|  |  | ||||||
| upnpincludedir = $(includedir)/upnp | upnpincludedir = $(includedir)/upnp | ||||||
| upnpinclude_HEADERS = \ | upnpinclude_HEADERS = \ | ||||||
| 	inc/UpnpString.h \ |  | ||||||
| 	inc/upnp.h \ | 	inc/upnp.h \ | ||||||
| 	inc/upnpdebug.h \ | 	inc/upnpdebug.h | ||||||
| 	inc/UpnpGlobal.h \ |  | ||||||
| 	inc/UpnpInet.h |  | ||||||
|  |  | ||||||
| nodist_upnpinclude_HEADERS = inc/upnpconfig.h  | nodist_upnpinclude_HEADERS = inc/upnpconfig.h  | ||||||
| if ENABLE_TOOLS | if ENABLE_TOOLS | ||||||
| @@ -49,6 +50,7 @@ libupnp_la_SOURCES = \ | |||||||
| 	src/inc/gena_device.h \ | 	src/inc/gena_device.h \ | ||||||
| 	src/inc/global.h \ | 	src/inc/global.h \ | ||||||
| 	src/inc/gmtdate.h \ | 	src/inc/gmtdate.h \ | ||||||
|  | 	src/inc/http_client.h \ | ||||||
| 	src/inc/httpparser.h \ | 	src/inc/httpparser.h \ | ||||||
| 	src/inc/httpreadwrite.h \ | 	src/inc/httpreadwrite.h \ | ||||||
| 	src/inc/md5.h \ | 	src/inc/md5.h \ | ||||||
| @@ -74,7 +76,6 @@ libupnp_la_SOURCES = \ | |||||||
| 	src/inc/util.h \ | 	src/inc/util.h \ | ||||||
| 	src/inc/utilall.h \ | 	src/inc/utilall.h \ | ||||||
| 	src/inc/uuid.h \ | 	src/inc/uuid.h \ | ||||||
| 	src/inc/VirtualDir.h \ |  | ||||||
| 	src/inc/webserver.h | 	src/inc/webserver.h | ||||||
|  |  | ||||||
| # ssdp | # ssdp | ||||||
| @@ -113,14 +114,10 @@ libupnp_la_SOURCES += \ | |||||||
| 	src/gena/gena_callback2.c | 	src/gena/gena_callback2.c | ||||||
|  |  | ||||||
| # api | # api | ||||||
| libupnp_la_SOURCES += \ | libupnp_la_SOURCES += src/api/upnpapi.c | ||||||
| 	src/api/UpnpString.c \ |  | ||||||
| 	src/api/upnpapi.c |  | ||||||
|  |  | ||||||
| if ENABLE_TOOLS | if ENABLE_TOOLS | ||||||
| libupnp_la_SOURCES += src/api/upnptools.c | libupnp_la_SOURCES += src/api/upnptools.c | ||||||
| endif | endif | ||||||
|  |  | ||||||
| if ENABLE_DEBUG | if ENABLE_DEBUG | ||||||
| libupnp_la_SOURCES += src/api/upnpdebug.c  | libupnp_la_SOURCES += src/api/upnpdebug.c  | ||||||
| endif | endif | ||||||
| @@ -137,12 +134,6 @@ libupnp_la_SOURCES += \ | |||||||
| libupnp_la_SOURCES += src/urlconfig/urlconfig.c | libupnp_la_SOURCES += src/urlconfig/urlconfig.c | ||||||
|  |  | ||||||
|  |  | ||||||
| # inet_pton (needed on Win32, compiles to nothing elsewhere) |  | ||||||
| libupnp_la_SOURCES += \ |  | ||||||
| 	src/inet_pton.c \ |  | ||||||
| 	src/inc/inet_pton.h |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # check / distcheck tests | # check / distcheck tests | ||||||
| check_PROGRAMS = test_init | check_PROGRAMS = test_init | ||||||
| TESTS = test_init | TESTS = test_init | ||||||
| @@ -151,7 +142,8 @@ test_init_SOURCES = test/test_init.c | |||||||
|  |  | ||||||
| EXTRA_DIST = \ | EXTRA_DIST = \ | ||||||
| 	LICENSE \ | 	LICENSE \ | ||||||
| 	m4/libupnp.m4 \ | 	src/inc/inet_pton.h \ | ||||||
|  | 	src/inet_pton.c \ | ||||||
| 	src/win_dll.c | 	src/win_dll.c | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,120 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef UPNPGLOBAL_H |  | ||||||
| #define UPNPGLOBAL_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  * |  | ||||||
|  * \brief Defines constants that for some reason are not defined on some systems. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #if defined MYLIB_LARGEFILE_SENSITIVE && _FILE_OFFSET_BITS+0 != 64 |  | ||||||
| 	#if defined __GNUC__ |  | ||||||
| 		#warning libupnp requires largefile mode - use AC_SYS_LARGEFILE |  | ||||||
| 	#else |  | ||||||
| 		#error  libupnp requires largefile mode - use AC_SYS_LARGEFILE |  | ||||||
| 	#endif |  | ||||||
| #endif  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
| 	/* |  | ||||||
| 	 * EXPORT_SPEC |  | ||||||
| 	 */ |  | ||||||
| 	#ifdef UPNP_STATIC_LIB |  | ||||||
| 		#define EXPORT_SPEC |  | ||||||
| 	#else /* UPNP_STATIC_LIB */ |  | ||||||
| 		#ifdef LIBUPNP_EXPORTS |  | ||||||
| 			/*! set up declspec for dll export to make functions |  | ||||||
| 			 * visible to library users */ |  | ||||||
| 			#define EXPORT_SPEC __declspec(dllexport) |  | ||||||
| 		#else /* LIBUPNP_EXPORTS */ |  | ||||||
| 			#define EXPORT_SPEC __declspec(dllimport) |  | ||||||
| 		#endif /* LIBUPNP_EXPORTS */ |  | ||||||
| 	#endif /* UPNP_STATIC_LIB */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	/* |  | ||||||
| 	 * UPNP_INLINE |  | ||||||
| 	 * PRId64 |  | ||||||
| 	 * PRIzu |  | ||||||
| 	 */ |  | ||||||
| 	#ifdef UPNP_USE_MSVCPP |  | ||||||
| 		/* define some things the M$ VC++ doesn't know */ |  | ||||||
| 		#define UPNP_INLINE |  | ||||||
| 		typedef __int64 int64_t; |  | ||||||
| 		#define PRId64 "I64d" |  | ||||||
| 		#define PRIzu "lu" |  | ||||||
| 	#endif /* UPNP_USE_MSVCPP */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	#ifdef UPNP_USE_BCBPP |  | ||||||
| 		/* define some things Borland Builder doesn't know */ |  | ||||||
| 		#define UPNP_INLINE inline |  | ||||||
| 		typedef __int64 int64_t; |  | ||||||
| 		#warning The Borland C compiler is probably broken on PRId64, |  | ||||||
| 		#warning please someone provide a proper fix here |  | ||||||
| 		#define PRId64 "I64d" |  | ||||||
| 		#define PRIzu "zu" |  | ||||||
| 	#endif /* UPNP_USE_BCBPP */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	#ifdef __GNUC__ |  | ||||||
| 		#define UPNP_INLINE inline |  | ||||||
|  |  | ||||||
| 		/* Note with PRIzu that in the case of Mingw32, it's the MS C |  | ||||||
| 		 * runtime printf which ends up getting called, not the glibc |  | ||||||
| 		 * printf, so it genuinely doesn't have "zu" |  | ||||||
| 		 */ |  | ||||||
| 		#define PRIzu "lu" |  | ||||||
| 	#endif /* __GNUC__ */ |  | ||||||
| #else |  | ||||||
| 	/*!  |  | ||||||
| 	 * \brief Export functions on WIN32 DLLs. |  | ||||||
| 	 * |  | ||||||
| 	 * Every funtion that belongs to the library API must use this |  | ||||||
| 	 * definition upon declaration or it will not be exported on WIN32 |  | ||||||
| 	 * DLLs. |  | ||||||
| 	 */ |  | ||||||
| 	#define EXPORT_SPEC |  | ||||||
|  |  | ||||||
| 	/*! |  | ||||||
| 	 * \brief Declares an inline function. |  | ||||||
| 	 * |  | ||||||
| 	 * Surprisingly, there are some compilers that do not understand the |  | ||||||
| 	 * inline keyword. This definition makes the use of this keyword |  | ||||||
| 	 * portable to these systems. |  | ||||||
| 	 */ |  | ||||||
| 	#define UPNP_INLINE inline |  | ||||||
| 	 |  | ||||||
| 	/*! |  | ||||||
| 	 * \brief Supply the PRId64 printf() macro. |  | ||||||
| 	 * |  | ||||||
| 	 * MSVC still does not know about this. |  | ||||||
| 	 */ |  | ||||||
| 	/* #define PRId64 PRId64 */ |  | ||||||
|  |  | ||||||
| 	/*! |  | ||||||
| 	 * \brief Supply the PRIzu printf() macro. |  | ||||||
| 	 * |  | ||||||
| 	 * This macro was invented so that we can live a little longer with |  | ||||||
| 	 * MSVC lack of C99. "z" is the correct printf() size specifier for |  | ||||||
| 	 * the size_t type. |  | ||||||
| 	 */ |  | ||||||
| 	#define PRIzu "zu" |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * Defining this macro here gives some interesting information about unused |  | ||||||
|  * functions in the code. Of course, this should never go uncommented on a |  | ||||||
|  * release. |  | ||||||
|  */ |  | ||||||
| /*#define inline*/ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* UPNPGLOBAL_H */ |  | ||||||
|  |  | ||||||
| @@ -1,30 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef UPNPINET_H |  | ||||||
| #define UPNPINET_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  * |  | ||||||
|  * \brief Provides a platform independent way to include TCP/IP types and functions. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
| 	#include <winsock2.h> |  | ||||||
| 	#include <Ws2tcpip.h> |  | ||||||
| #else |  | ||||||
| 	#include <sys/param.h> |  | ||||||
| 	#if (defined(BSD) && BSD >= 199306) || defined (__FreeBSD_kernel__) |  | ||||||
| 		#include <ifaddrs.h> |  | ||||||
| 		/* Do not move or remove the include below for "sys/socket"! |  | ||||||
| 		 * Will break FreeBSD builds. */ |  | ||||||
| 		#include <sys/socket.h> |  | ||||||
| 	#endif |  | ||||||
| 	#include <netinet/in.h> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* UPNPINET_H */ |  | ||||||
|  |  | ||||||
| @@ -1,171 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef STRING_H |  | ||||||
| #define STRING_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \defgroup UpnpString The UpnpString Class |  | ||||||
|  * |  | ||||||
|  * \brief Implements string operations in the UPnP library. |  | ||||||
|  * |  | ||||||
|  * \author Marcelo Roberto Jimenez |  | ||||||
|  * |  | ||||||
|  * \version 1.0 |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  * |  | ||||||
|  * \file |  | ||||||
|  * |  | ||||||
|  * \brief UpnpString object declarartion. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "UpnpGlobal.h" /* for EXPORT_SPEC */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdlib.h> /* for size_t */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Type of the string objects inside libupnp. |  | ||||||
|  */ |  | ||||||
| typedef struct s_UpnpString UpnpString; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Constructor. |  | ||||||
|  * |  | ||||||
|  * \return A pointer to a new allocated object. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC UpnpString *UpnpString_new(); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Destructor. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC void UpnpString_delete( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	UpnpString *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Copy Constructor. |  | ||||||
|  * |  | ||||||
|  * \return A pointer to a new allocated copy of the original object. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC UpnpString *UpnpString_dup( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	const UpnpString *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Assignment operator. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC void UpnpString_assign( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	UpnpString *p, |  | ||||||
| 	/*! [in] The \em \b that pointer. */ |  | ||||||
| 	const UpnpString *q); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Returns the length of the string. |  | ||||||
|  * |  | ||||||
|  * \return The length of the string. |  | ||||||
|  * */ |  | ||||||
| EXPORT_SPEC size_t UpnpString_get_Length( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	const UpnpString *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Truncates the string to the specified lenght, or does nothing |  | ||||||
|  * if the current lenght is less than or equal to the requested length. |  | ||||||
|  * */ |  | ||||||
| EXPORT_SPEC void UpnpString_set_Length( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	UpnpString *p, |  | ||||||
| 	/*! [in] The requested length. */ |  | ||||||
| 	size_t n); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Returns the pointer to char. |  | ||||||
|  * |  | ||||||
|  * \return The pointer to char. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC const char *UpnpString_get_String( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	const UpnpString *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Sets the string from a pointer to char. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC int UpnpString_set_String( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	UpnpString *p, |  | ||||||
| 	/*! [in] (char *) to copy from. */ |  | ||||||
| 	const char *s); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Sets the string from a pointer to char using a maximum of N chars. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC int UpnpString_set_StringN( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	UpnpString *p, |  | ||||||
| 	/*! [in] (char *) to copy from. */ |  | ||||||
| 	const char *s, |  | ||||||
| 	/*! Maximum number of chars to copy.*/ |  | ||||||
| 	size_t n); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Clears the string, sets its size to zero. |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC void UpnpString_clear( |  | ||||||
| 	/*! [in] The \em \b this pointer. */ |  | ||||||
| 	UpnpString *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Compares two strings for equality. Case matters. |  | ||||||
|  * |  | ||||||
|  * \return The result of strcmp(). |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC int UpnpString_cmp( |  | ||||||
| 	/*! [in] The \em \b the first string. */ |  | ||||||
| 	UpnpString *p, |  | ||||||
| 	/*! [in] The \em \b the second string. */ |  | ||||||
| 	UpnpString *q); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Compares two strings for equality. Case does not matter. |  | ||||||
|  * |  | ||||||
|  * \return The result of strcasecmp(). |  | ||||||
|  */ |  | ||||||
| EXPORT_SPEC int UpnpString_casecmp( |  | ||||||
| 	/*! [in] The \em \b the first string. */ |  | ||||||
| 	UpnpString *p, |  | ||||||
| 	/*! [in] The \em \b the second string. */ |  | ||||||
| 	UpnpString *q); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* @} UpnpString The UpnpString API */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* STRING_H */ |  | ||||||
|  |  | ||||||
							
								
								
									
										4253
									
								
								upnp/inc/upnp.h
									
									
									
									
									
								
							
							
						
						
									
										4253
									
								
								upnp/inc/upnp.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -90,9 +90,6 @@ | |||||||
|  *  (i.e. configure --enable-tools) : <upnp/upnptools.h> file is available */ |  *  (i.e. configure --enable-tools) : <upnp/upnptools.h> file is available */ | ||||||
| #undef UPNP_HAVE_TOOLS | #undef UPNP_HAVE_TOOLS | ||||||
|  |  | ||||||
| /** Defined to 1 if the library has been compiled with ipv6 support |  | ||||||
|  *  (i.e. configure --enable-ipv6) */ |  | ||||||
| #undef UPNP_ENABLE_IPV6 |  | ||||||
|  |  | ||||||
| #endif /* UPNP_CONFIG_H */ | #endif /* UPNP_CONFIG_H */ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,12 +7,12 @@ | |||||||
|  * Redistribution and use in source and binary forms, with or without  |  * Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  |  * modification, are permitted provided that the following conditions are met:  | ||||||
|  * |  * | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  |  * * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  |  * this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  |  * * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  |  * this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  |  * and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  |  * * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  |  * may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. |  * without specific prior written permission. | ||||||
|  *  |  *  | ||||||
| @@ -33,34 +33,25 @@ | |||||||
| #ifndef UPNP_DEBUG_H | #ifndef UPNP_DEBUG_H | ||||||
| #define UPNP_DEBUG_H  | #define UPNP_DEBUG_H  | ||||||
|  |  | ||||||
|  | #include "upnp.h" | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ThreadPool.h" |  | ||||||
| #include "upnpconfig.h" | #include "upnpconfig.h" | ||||||
| #include "UpnpGlobal.h" /* for UPNP_INLINE */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /** \name Other debugging features | /** @name Other debugging features | ||||||
|  * |           The UPnP SDK contains other features to aid in debugging. | ||||||
|  * The UPnP SDK contains other features to aid in debugging. |  | ||||||
|  */ |  */ | ||||||
| /*@{*/ |  | ||||||
|  |  | ||||||
| /** \name Upnp_LogLevel | /*! @{ */ | ||||||
|  |  | ||||||
|  | /** @name Upnp_LogLevel | ||||||
|  *  The user has the option to select 4 different types of debugging levels, |  *  The user has the option to select 4 different types of debugging levels, | ||||||
|  *  see \c UpnpSetLogLevel.  |  *  see {\tt UpnpSetLogLevel}.  | ||||||
|  *  The critical level will show only those messages  |  *  The critical level will show only those messages  | ||||||
|  *  which can halt the normal processing of the library, like memory  |  *  which can halt the normal processing of the library, like memory  | ||||||
|  *  allocation errors. The remaining three levels are just for debugging  |  *  allocation errors. The remaining three levels are just for debugging  | ||||||
| @@ -69,11 +60,14 @@ extern "C" { | |||||||
|  *  Info Level displays the other important operational information  |  *  Info Level displays the other important operational information  | ||||||
|  *  regarding the working of the library. If the user selects All,  |  *  regarding the working of the library. If the user selects All,  | ||||||
|  *  then the library displays all the debugging information that it has. |  *  then the library displays all the debugging information that it has. | ||||||
|  *    \li \c UPNP_CRITICAL [0] |  *  \begin{itemize} | ||||||
|  *    \li \c UPNP_PACKET [1] |  *    \item {\tt UPNP_CRITICAL [0]} | ||||||
|  *    \li \c UPNP_INFO [2] |  *    \item {\tt UPNP_PACKET [1]} | ||||||
|  *    \li \c UPNP_ALL [3] |  *    \item {\tt UPNP_INFO [2]} | ||||||
|  |  *    \item {\tt UPNP_ALL [3]} | ||||||
|  |  *  \end{itemize} | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| typedef enum Upnp_Module { | typedef enum Upnp_Module { | ||||||
| 	SSDP, | 	SSDP, | ||||||
| 	SOAP, | 	SOAP, | ||||||
| @@ -85,69 +79,91 @@ typedef enum Upnp_Module { | |||||||
| 	HTTP | 	HTTP | ||||||
| } Dbg_Module; | } Dbg_Module; | ||||||
|  |  | ||||||
|  | /*! @{ */ | ||||||
| /*@{*/ |  | ||||||
| typedef enum Upnp_LogLevel_e { | typedef enum Upnp_LogLevel_e { | ||||||
| 	UPNP_CRITICAL, | 	UPNP_CRITICAL, | ||||||
| 	UPNP_PACKET, | 	UPNP_PACKET, | ||||||
| 	UPNP_INFO, | 	UPNP_INFO, | ||||||
| 	UPNP_ALL | 	UPNP_ALL | ||||||
| } Upnp_LogLevel; | } Upnp_LogLevel; | ||||||
| /*@}*/ | /*! @} */ | ||||||
|  |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Default log level : see \c Upnp_LogLevel |  * Default log level : see {\tt Upnp_LogLevel} | ||||||
|  */ |  */ | ||||||
| #define UPNP_DEFAULT_LOG_LEVEL	UPNP_ALL | #define UPNP_DEFAULT_LOG_LEVEL	UPNP_ALL | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Initialize the log files. |  * Function : UpnpInitLog | ||||||
|  * |  * | ||||||
|  * \return -1 if fails or UPNP_E_SUCCESS if succeeds. |  * Parameters:	void | ||||||
|  */ |  * | ||||||
|  |  * Description: | ||||||
|  |  *	This functions initializes the log files | ||||||
|  |  * | ||||||
|  |  * Returns: int | ||||||
|  |  *	-1 : If fails | ||||||
|  |  *	UPNP_E_SUCCESS : if success | ||||||
|  |  ***************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| int UpnpInitLog(void); | int UpnpInitLog(); | ||||||
| #else | #else | ||||||
| static UPNP_INLINE int UpnpInitLog(void) | static UPNP_INLINE int UpnpInitLog() { return UPNP_E_SUCCESS; } | ||||||
| { |  | ||||||
| 	return UPNP_E_SUCCESS; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Set the log level (see \c Upnp_LogLevel). |  * Function : UpnpSetLogLevel | ||||||
|  */ |  *				 | ||||||
|  |  * Parameters: Upnp_LogLevel log_level | ||||||
|  |  * | ||||||
|  |  * Description:							 | ||||||
|  |  *	This functions set the log level (see {\tt Upnp_LogLevel} | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void UpnpSetLogLevel( | void UpnpSetLogLevel(Upnp_LogLevel log_level); | ||||||
| 	/*! [in] Log level. */ |  | ||||||
| 	Upnp_LogLevel log_level); |  | ||||||
| #else | #else | ||||||
| static UPNP_INLINE void UpnpSetLogLevel(Upnp_LogLevel log_level) {} | static UPNP_INLINE void UpnpSetLogLevel(Upnp_LogLevel log_level) {} | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Closes the log files. |  * Function : UpnpCloseLog						 | ||||||
|  */ |  *								 | ||||||
|  |  * Parameters:	void					 | ||||||
|  |  *								 | ||||||
|  |  * Description:							 | ||||||
|  |  *	This functions closes the log files | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void UpnpCloseLog(void); | void UpnpCloseLog(); | ||||||
| #else | #else | ||||||
| static UPNP_INLINE void UpnpCloseLog(void) {} | static UPNP_INLINE void UpnpCloseLog() {} | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Set the name for error and information files, respectively. |  * Function : UpnpSetLogFileNames		 | ||||||
|  */ |  *							 | ||||||
|  |  * Parameters:						 | ||||||
|  |  *	IN const char* ErrFileName: name of the error file | ||||||
|  |  *	IN const char *InfoFileName: name of the information file | ||||||
|  |  *	IN int size: Size of the buffer | ||||||
|  |  *	IN int starLength: This parameter provides the width of the banner | ||||||
|  |  *								 | ||||||
|  |  * Description:							 | ||||||
|  |  *	This functions takes the buffer and writes the buffer in the file as  | ||||||
|  |  *	per the requested banner	 | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void UpnpSetLogFileNames( | void UpnpSetLogFileNames( | ||||||
| 	/*! [in] Name of the error file. */ |  | ||||||
| 	const char *ErrFileName, | 	const char *ErrFileName, | ||||||
| 	/*! [in] Name of the information file. */ |  | ||||||
| 	const char *InfoFileName); | 	const char *InfoFileName); | ||||||
| #else | #else | ||||||
| static UPNP_INLINE void UpnpSetLogFileNames( | static UPNP_INLINE void UpnpSetLogFileNames( | ||||||
| @@ -156,20 +172,24 @@ static UPNP_INLINE void UpnpSetLogFileNames( | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Check if the module is turned on for debug and returns the file |  * Function : UpnpGetDebugFile		 | ||||||
|  * descriptor corresponding to the debug level |  | ||||||
|  *						 |  *						 | ||||||
|  * \return NULL if the module is turn off for debug otheriwse returns the |  * Parameters:					 | ||||||
|  *	right file descriptor. |  *	IN Upnp_LogLevel 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 function checks if the module is turned on for debug  | ||||||
|  |  *	and returns the file descriptor corresponding to the debug level | ||||||
|  |  * Returns: FILE * | ||||||
|  |  *	NULL : if the module is turn off for debug  | ||||||
|  |  *	else returns the right file descriptor | ||||||
|  |  ***************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| FILE *UpnpGetDebugFile( | FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module); | ||||||
| 	/*! [in] The level of the debug logging. It will decide whether debug |  | ||||||
| 	 * statement will go to standard output, or any of the log files. */ |  | ||||||
| 	Upnp_LogLevel level, |  | ||||||
| 	/*! [in] debug will go in the name of this module. */ |  | ||||||
| 	Dbg_Module module); |  | ||||||
| #else | #else | ||||||
| static UPNP_INLINE FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module) | static UPNP_INLINE FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module) | ||||||
| { | { | ||||||
| @@ -178,98 +198,96 @@ static UPNP_INLINE FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Returns true if debug output should be done in this module. |  * Function : DebugAtThisLevel					 | ||||||
|  *									 |  *									 | ||||||
|  * \return Nonzero value if true, zero if false. |  * Parameters:			 | ||||||
|  */ |  *	IN Upnp_LogLevel 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 | #ifdef DEBUG | ||||||
| int DebugAtThisLevel( | int DebugAtThisLevel( | ||||||
| 	/*! [in] The level of the debug logging. It will decide whether debug | 	IN Upnp_LogLevel DLevel, | ||||||
| 	 * statement will go to standard output, or any of the log files. */ | 	IN Dbg_Module Module); | ||||||
| 	Upnp_LogLevel DLevel, |  | ||||||
| 	/*! [in] Debug will go in the name of this module. */ |  | ||||||
| 	Dbg_Module Module); |  | ||||||
| #else | #else | ||||||
| static UPNP_INLINE int DebugAtThisLevel( | static UPNP_INLINE int DebugAtThisLevel( | ||||||
| 	Upnp_LogLevel DLevel, | 	IN Upnp_LogLevel DLevel, | ||||||
| 	Dbg_Module Module) | 	IN Dbg_Module Module) { return 0; } | ||||||
| { |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Prints the debug statement either on the standard output or log file |  * Function : UpnpPrintf				 | ||||||
|  * along with the information from where this debug statement is coming. |  *									 | ||||||
|  */  |  * Parameters:								 | ||||||
|  |  *	IN Upnp_LogLevel 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 | ||||||
|  |  *	IN char *DbgFileName: Name of the file from where debug statement is | ||||||
|  |  *							coming | ||||||
|  |  *	IN int DbgLineNo : Line number of the file from where debug statement  | ||||||
|  |  *				is coming | ||||||
|  |  *	IN char * FmtStr, ...: Variable number of arguments that will go  | ||||||
|  |  *				in the debug statement | ||||||
|  |  *					 | ||||||
|  |  * Description:							 | ||||||
|  |  *	This functions prints the debug statement either on the startdard  | ||||||
|  |  *	output or log file along with the information from where this  | ||||||
|  |  *	debug statement is coming | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/  | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void UpnpPrintf( | void UpnpPrintf( | ||||||
| 	/*! [in] The level of the debug logging. It will decide whether debug |  | ||||||
| 	 * statement will go to standard output, or any of the log files. */ |  | ||||||
| 	Upnp_LogLevel DLevel, | 	Upnp_LogLevel DLevel, | ||||||
| 	/*! [in] debug will go in the name of this module. */ |  | ||||||
| 	Dbg_Module Module, | 	Dbg_Module Module, | ||||||
| 	/*! [in] Name of the file from where debug statement is coming. */ |  | ||||||
| 	const char* DbgFileName, | 	const char* DbgFileName, | ||||||
| 	/*! [in] Line number of the file from where debug statement is coming. */ |  | ||||||
| 	int DbgLineNo, | 	int DbgLineNo, | ||||||
| 	/*! [in] Printf like format specification. */ |  | ||||||
| 	const char* FmtStr, | 	const char* FmtStr, | ||||||
| 	/*! [in] Printf like Variable number of arguments that will go in the debug |  | ||||||
| 	 * statement. */ |  | ||||||
| 	...) | 	...) | ||||||
| #if (__GNUC__ >= 3) | #if (__GNUC__ >= 3) | ||||||
| 	/* This enables printf like format checking by the compiler */ | 	/* This enables printf like format checking by the compiler */ | ||||||
| 	__attribute__((format (__printf__, 5, 6))) | 	__attribute__((format (__printf__, 5, 6))) | ||||||
| #endif | #endif | ||||||
| ; | ; | ||||||
| #else /* DEBUG */ | #else | ||||||
| static UPNP_INLINE void UpnpPrintf( | static UPNP_INLINE void UpnpPrintf( | ||||||
| 	Upnp_LogLevel DLevel, | 	Upnp_LogLevel DLevel, | ||||||
| 	Dbg_Module Module, | 	Dbg_Module Module, | ||||||
| 	const char* DbgFileName, | 	const char* DbgFileName, | ||||||
| 	int DbgLineNo, | 	int DbgLineNo, | ||||||
| 	const char* FmtStr, | 	const char* FmtStr, | ||||||
| 	...) | 	...) {} | ||||||
| { |  | ||||||
| } |  | ||||||
| #endif /* DEBUG */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Writes the file name and file number from where debug statement is |  | ||||||
|  * coming to the log file. |  | ||||||
|  */ |  | ||||||
| #ifdef DEBUG |  | ||||||
| void UpnpDisplayFileAndLine( |  | ||||||
| 	/*! [in] File descriptor where line number and file name will be written. */ |  | ||||||
| 	FILE *fd, |  | ||||||
| 	/*! [in] Name of the file. */ |  | ||||||
| 	const char *DbgFileName, |  | ||||||
| 	/*! [in] Line number of the file. */ |  | ||||||
| 	int DbgLineNo); |  | ||||||
| #else |  | ||||||
| static UPNP_INLINE void UpnpDisplayFileAndLine( |  | ||||||
| 	FILE *fd, |  | ||||||
| 	const char *DbgFileName, |  | ||||||
| 	int DbgLineNo) {} |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Writes the buffer in the file as per the requested banner |  * Function : UpnpDisplayBanner				 | ||||||
|  */ |  *							 | ||||||
|  |  * Parameters:							 | ||||||
|  |  *	IN FILE *fd: file descriptor where the banner will be written | ||||||
|  |  *	IN char **lines: The buffer that will be written | ||||||
|  |  *	IN int size: Size of the buffer | ||||||
|  |  *	IN int starLength: This parameter provides the width of the banner | ||||||
|  |  *									 | ||||||
|  |  * Description:							 | ||||||
|  |  *	This functions takes the buffer and writes the buffer in the file as  | ||||||
|  |  *	per the requested banner			 | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void UpnpDisplayBanner( | void UpnpDisplayBanner( | ||||||
| 	/*! [in] file descriptor where the banner will be written. */ |  | ||||||
| 	FILE *fd, | 	FILE *fd, | ||||||
| 	/*! [in] The buffer that will be written. */ |  | ||||||
| 	const char **lines, | 	const char **lines, | ||||||
| 	/*! [in] Size of the buffer. */ |  | ||||||
| 	size_t size, | 	size_t size, | ||||||
| 	/*! [in] This parameter provides the width of the banner. */ |  | ||||||
| 	int starlength); | 	int starlength); | ||||||
| #else | #else | ||||||
| static UPNP_INLINE void UpnpDisplayBanner( | static UPNP_INLINE void UpnpDisplayBanner( | ||||||
| @@ -280,49 +298,33 @@ static UPNP_INLINE void UpnpDisplayBanner( | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /*************************************************************************** | ||||||
|  * \brief Prints thread pool statistics. |  * Function : UpnpDisplayFileAndLine				 | ||||||
|  */ |  *								 | ||||||
|  |  * Parameters:							 | ||||||
|  |  *	IN FILE *fd: File descriptor where line number and file name will be  | ||||||
|  |  *			written  | ||||||
|  |  *	IN char *DbgFileName: Name of the file   | ||||||
|  |  *	IN int DbgLineNo : Line number of the file | ||||||
|  |  *								 | ||||||
|  |  * Description: | ||||||
|  |  *	This function writes the file name and file number from where | ||||||
|  |  *		debug statement is coming to the log file | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void PrintThreadPoolStats( | void UpnpDisplayFileAndLine( | ||||||
| 	/*! [in] The thread pool. */ | 	FILE *fd, | ||||||
| 	ThreadPool *tp,  |  | ||||||
| 	/*! [in] The file name that called this function, use the macro __FILE__. */ |  | ||||||
| 	const char *DbgFileName, | 	const char *DbgFileName, | ||||||
| 	/*! [in] The line number that the function was called, use the macro __LINE__. */ | 	int DbgLineNo); | ||||||
| 	int DbgLineNo, |  | ||||||
| 	/*! [in] The message. */ |  | ||||||
| 	const char *msg); |  | ||||||
| #else | #else | ||||||
| static UPNP_INLINE void PrintThreadPoolStats( | static UPNP_INLINE void UpnpDisplayFileAndLine( | ||||||
| 	ThreadPool *tp,  | 	FILE *fd, | ||||||
| 	const char *DbgFileName, | 	const char *DbgFileName, | ||||||
| 	int DbgLineNo, | 	int DbgLineNo) {} | ||||||
| 	const char *msg) |  | ||||||
| { |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /*! @} */ | ||||||
| /*! |  | ||||||
|  * \brief Print the node names and values of a XML tree. |  | ||||||
|  */ |  | ||||||
| #ifdef DEBUG |  | ||||||
| void printNodes( |  | ||||||
| 	/*! [in] The root of the tree to print. */ |  | ||||||
| 	IXML_Node *tmpRoot, |  | ||||||
| 	/*! [in] The depth to print. */ |  | ||||||
| 	int depth); |  | ||||||
| #else |  | ||||||
| static UPNP_INLINE void printNodes( |  | ||||||
| 	IXML_Node *tmpRoot, |  | ||||||
| 	int depth) |  | ||||||
| { |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*@}*/ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,97 +0,0 @@ | |||||||
| #							-*- Autoconf -*- |  | ||||||
| # This file is part of the aMule project. |  | ||||||
| # This file is part of the libupnp library project. |  | ||||||
| # |  | ||||||
| # Copyright (c) 2003-2008 aMule Team ( admin@amule.org / http://www.amule.org ) |  | ||||||
| # |  | ||||||
| # This program is free software; you can redistribute it and/or modify |  | ||||||
| # it under the terms of the GNU General Public License as published by |  | ||||||
| # the Free Software Foundation; either version 2 of the License, or |  | ||||||
| # (at your option) any later version. |  | ||||||
| # |  | ||||||
| # This program is distributed in the hope that it will be useful, |  | ||||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
| # GNU General Public License for more details. |  | ||||||
| # |  | ||||||
| # You should have received a copy of the GNU General Public License |  | ||||||
| # along with this program; if not, write to the Free Software |  | ||||||
| # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA |  | ||||||
| # |  | ||||||
|  |  | ||||||
| dnl -------------------------------------------------------------------------- |  | ||||||
| dnl LIBUPNP_CHECK([VERSION = 1.6.6], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) |  | ||||||
| dnl |  | ||||||
| dnl Check for the libupnp library |  | ||||||
| dnl -------------------------------------------------------------------------- |  | ||||||
| dnl |  | ||||||
| dnl This macro sets these variables: |  | ||||||
| dnl - LIBUPNP_VERSION |  | ||||||
| dnl 	Something like "1.6.7" |  | ||||||
| dnl - LIBUPNP_CPPFLAGS |  | ||||||
| dnl 	Flags to be added to CPPFLAGS |  | ||||||
| dnl - LIBUPNP_CFLAGS |  | ||||||
| dnl 	Flags to be added to CFLAGS |  | ||||||
| dnl - LIBUPNP_LDFLAGS |  | ||||||
| dnl 	Flags to be added to LDFLAGS |  | ||||||
| dnl - LIBUPNP_LIBS |  | ||||||
| dnl 	Library to be added to LIBS |  | ||||||
| dnl |  | ||||||
| dnl The LIBUPNP_CPPFLAGS, LIBUPNP_CFLAGS, LIBUPNP_LDFLAGS and LIBUPNP_LIBS variables are also substituted. |  | ||||||
| dnl |  | ||||||
| AC_DEFUN([LIBUPNP_CHECK], |  | ||||||
| [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl |  | ||||||
| m4_define([MIN_LIBUPNP_VERSION], [m4_ifval([$1], [$1], [1.6.6])])dnl |  | ||||||
|  |  | ||||||
| dnl	Test for --with-libupnp-prefix |  | ||||||
| 	AC_ARG_WITH( |  | ||||||
| 		[libupnp-prefix], |  | ||||||
| 		[AS_HELP_STRING( |  | ||||||
| 			[--with-libupnp-prefix=PREFIX], |  | ||||||
| 			[UPnP library location])], |  | ||||||
| 		[export PKG_CONFIG_PATH=$withval/lib/pkgconfig]) |  | ||||||
|  |  | ||||||
| dnl	Check for libupnp >= MIN_LIBUPNP_VERSION |  | ||||||
| 	AS_IF([test $cross_compiling = no], [ |  | ||||||
| 		AC_MSG_CHECKING([for libupnp version >= MIN_LIBUPNP_VERSION]) |  | ||||||
| 		AS_IF([test -n "$PKG_CONFIG"], [ |  | ||||||
| 			AS_IF([$PKG_CONFIG libupnp --exists], [ |  | ||||||
| 				LIBUPNP_VERSION=`$PKG_CONFIG libupnp --modversion` |  | ||||||
| 				AS_IF([$PKG_CONFIG libupnp --atleast-version=MIN_LIBUPNP_VERSION], [ |  | ||||||
| 					result=yes |  | ||||||
| 					resultstr=" (version $LIBUPNP_VERSION)" |  | ||||||
| 					LIBUPNP_CPPFLAGS=`$PKG_CONFIG libupnp --cflags-only-I` |  | ||||||
| 					LIBUPNP_CFLAGS=`$PKG_CONFIG libupnp --cflags-only-other` |  | ||||||
| 					LIBUPNP_LDFLAGS=`$PKG_CONFIG libupnp --libs-only-L` |  | ||||||
| 					LIBUPNP_LIBS=`$PKG_CONFIG libupnp --libs-only-other` |  | ||||||
| 					LIBUPNP_LIBS="$LIBUPNP_LIBS `$PKG_CONFIG libupnp --libs-only-l`" |  | ||||||
| 				], [ |  | ||||||
| 					result=no |  | ||||||
| 					resultstr=" (version $LIBUPNP_VERSION is not new enough)" |  | ||||||
| 				]) |  | ||||||
| 			], [ |  | ||||||
| 				result=no |  | ||||||
| 				resultstr=" (try to use --with-libupnp-prefix=PREFIX)" |  | ||||||
| 			]) |  | ||||||
| 		], [ |  | ||||||
| 			result=no |  | ||||||
| 			resultstr=" (pkg-config not found)" |  | ||||||
| 		]) |  | ||||||
| 		AC_MSG_RESULT([$result$resultstr]) |  | ||||||
| 		libupnp_error="libupnp >= MIN_LIBUPNP_VERSION not found$resultstr" |  | ||||||
| 	], [ |  | ||||||
| dnl Currently cross-compilation with libupnp is not supported. |  | ||||||
| 		result=no |  | ||||||
| 		libupnp_error="cross compiling" |  | ||||||
| 	]) |  | ||||||
|  |  | ||||||
| dnl	Execute the right action. |  | ||||||
| 	AS_IF([test ${result:-no} = yes], [$2], [$3]) |  | ||||||
|  |  | ||||||
| dnl Exported symbols |  | ||||||
| AC_SUBST([LIBUPNP_CPPFLAGS])dnl |  | ||||||
| AC_SUBST([LIBUPNP_CFLAGS])dnl |  | ||||||
| AC_SUBST([LIBUPNP_LDFLAGS])dnl |  | ||||||
| AC_SUBST([LIBUPNP_LIBS])dnl |  | ||||||
| m4_undefine([MIN_LIBUPNP_VERSION])dnl |  | ||||||
| ]) |  | ||||||
| @@ -9,6 +9,10 @@ AM_CPPFLAGS = \ | |||||||
| 	-I$(top_srcdir)/threadutil/inc \ | 	-I$(top_srcdir)/threadutil/inc \ | ||||||
| 	-I$(top_srcdir)/ixml/inc | 	-I$(top_srcdir)/ixml/inc | ||||||
|  |  | ||||||
|  | AM_CFLAGS = $(PTHREAD_CFLAGS) | ||||||
|  |  | ||||||
|  | AM_LDFLAGS = $(PTHREAD_LIBS) | ||||||
|  |  | ||||||
| LDADD = \ | LDADD = \ | ||||||
| 	$(top_builddir)/upnp/libupnp.la \ | 	$(top_builddir)/upnp/libupnp.la \ | ||||||
| 	$(top_builddir)/threadutil/libthreadutil.la \ | 	$(top_builddir)/threadutil/libthreadutil.la \ | ||||||
| @@ -69,9 +73,8 @@ upnp_tv_combo_SOURCES = \ | |||||||
| if WITH_DOCUMENTATION | if WITH_DOCUMENTATION | ||||||
| examplesdir = $(docdir)/examples | examplesdir = $(docdir)/examples | ||||||
| examples_DATA = \ | examples_DATA = \ | ||||||
| 		$(sort \ | 		$(upnp_tv_ctrlpt_SOURCES) \ | ||||||
| 			$(upnp_tv_ctrlpt_SOURCES) \ | 		$(upnp_tv_device_SOURCES) | ||||||
| 			$(upnp_tv_device_SOURCES)) |  | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -34,26 +34,24 @@ | |||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif /* __cplusplus */ | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  |  | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  |  | ||||||
|  | #include "upnptools.h" | ||||||
| #include "ithread.h" | #include "ithread.h" | ||||||
| #include "ixml.h" | #include "ixml.h" | ||||||
| #include "upnptools.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // mutex to control displaying of events |  | ||||||
| extern ithread_mutex_t display_mutex; |  | ||||||
|  |  | ||||||
|  | //mutex to control displaying of events | ||||||
|  | extern ithread_mutex_t display_mutex ; | ||||||
|  |  | ||||||
| typedef enum { | typedef enum { | ||||||
| 	STATE_UPDATE = 0, | 	STATE_UPDATE = 0, | ||||||
| 	DEVICE_ADDED = 1, | 	DEVICE_ADDED =1, | ||||||
| 	DEVICE_REMOVED = 2, | 	DEVICE_REMOVED=2, | ||||||
| 	GET_VAR_COMPLETE = 3 | 	GET_VAR_COMPLETE=3 | ||||||
| } eventType; | } eventType; | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -70,7 +68,7 @@ typedef enum { | |||||||
|  *   node -- The DOM node from which to extract the value |  *   node -- The DOM node from which to extract the value | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| char *SampleUtil_GetElementValue(IN IXML_Element *element); | char * SampleUtil_GetElementValue(IN IXML_Element *element); | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
|  * SampleUtil_GetFirstServiceList |  * SampleUtil_GetFirstServiceList | ||||||
| @@ -87,7 +85,7 @@ char *SampleUtil_GetElementValue(IN IXML_Element *element); | |||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
|  |  | ||||||
| IXML_NodeList *SampleUtil_GetFirstServiceList(IN IXML_Document *doc);  | IXML_NodeList *SampleUtil_GetFirstServiceList(IN IXML_Document * doc);  | ||||||
|  |  | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
| @@ -102,7 +100,7 @@ IXML_NodeList *SampleUtil_GetFirstServiceList(IN IXML_Document *doc); | |||||||
|  *   item -- The item to search for |  *   item -- The item to search for | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| char *SampleUtil_GetFirstDocumentItem(IN IXML_Document *doc, IN const char *item);  | char * SampleUtil_GetFirstDocumentItem(IN IXML_Document *doc, IN const char *item);  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -118,7 +116,7 @@ char *SampleUtil_GetFirstDocumentItem(IN IXML_Document *doc, IN const char *item | |||||||
|  *   item -- The item to search for |  *   item -- The item to search for | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| char *SampleUtil_GetFirstElementItem(IN IXML_Element *element, IN const char *item);  | char * SampleUtil_GetFirstElementItem(IN IXML_Element *element, IN const char *item);  | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
|  * SampleUtil_PrintEventType |  * SampleUtil_PrintEventType | ||||||
| @@ -164,13 +162,9 @@ int SampleUtil_PrintEvent(IN Upnp_EventType EventType, | |||||||
|  *   controlURL -- OUT -- The control URL for the service |  *   controlURL -- OUT -- The control URL for the service | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int SampleUtil_FindAndParseService ( | int SampleUtil_FindAndParseService (IN IXML_Document *DescDoc, IN char* location,  | ||||||
| 	IN IXML_Document *DescDoc, | 				    IN char *serviceType, OUT char **serviceId,  | ||||||
| 	IN const char *location, | 				    OUT char **eventURL, OUT char **controlURL); | ||||||
| 	IN char *serviceType, |  | ||||||
| 	OUT char **serviceId,  |  | ||||||
| 	OUT char **eventURL, |  | ||||||
| 	OUT char **controlURL); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
| @@ -202,11 +196,8 @@ extern print_string gPrintFun; | |||||||
|  *   const char * UDN |  *   const char * UDN | ||||||
|  *   int          newDevice |  *   int          newDevice | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| typedef void (*state_update)( | typedef void (*state_update)( const char *varName, const char *varValue, const char *UDN, | ||||||
| 	const char *varName, | 							 eventType type); | ||||||
| 	const char *varValue, |  | ||||||
| 	const char *UDN, |  | ||||||
| 	eventType type); |  | ||||||
|  |  | ||||||
| //global state update function used by smaple util | //global state update function used by smaple util | ||||||
| extern state_update gStateUpdateFun; | extern state_update gStateUpdateFun; | ||||||
| @@ -233,7 +224,7 @@ int SampleUtil_Initialize(print_string print_function); | |||||||
|  * Parameters: |  * Parameters: | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int SampleUtil_Finish(); | int SampleUtil_Finish(void); | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
|  * SampleUtil_Print |  * SampleUtil_Print | ||||||
| @@ -247,7 +238,7 @@ int SampleUtil_Finish(); | |||||||
|  *   . . .  - variable number of args. (see printf) |  *   . . .  - variable number of args. (see printf) | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int SampleUtil_Print(char *fmt, ...); | int SampleUtil_Print( char *fmt, ... ); | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
|  * SampleUtil_RegisterUpdateFunction |  * SampleUtil_RegisterUpdateFunction | ||||||
| @@ -257,7 +248,7 @@ int SampleUtil_Print(char *fmt, ...); | |||||||
|  * Parameters: |  * Parameters: | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int SampleUtil_RegisterUpdateFunction(state_update update_function); | int SampleUtil_RegisterUpdateFunction( state_update update_function ); | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
|  * SampleUtil_StateUpdate |  * SampleUtil_StateUpdate | ||||||
| @@ -267,22 +258,11 @@ int SampleUtil_RegisterUpdateFunction(state_update update_function); | |||||||
|  * Parameters: |  * Parameters: | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void SampleUtil_StateUpdate( | void SampleUtil_StateUpdate( const char *varName, const char *varValue, const char *UDN, | ||||||
| 	const char *varName, | 							eventType type); | ||||||
| 	const char *varValue, |  | ||||||
| 	const char *UDN, |  | ||||||
| 	eventType type); |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| }; | }; | ||||||
| #endif /* __cplusplus */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
| 	#define snprintf	_snprintf |  | ||||||
| 	#define strcasecmp	stricmp |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #endif /* UPNPSDK_UTIL_H */ | ||||||
| #endif /* SAMPLE_UTIL_H */ |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,33 +1,33 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "sample_util.h" | #include "sample_util.h" | ||||||
| @@ -130,8 +130,7 @@ TvCtrlPointPrintLongHelp( void ) | |||||||
|     SampleUtil_Print( "" ); |     SampleUtil_Print( "" ); | ||||||
|     SampleUtil_Print( "This sample control point application automatically searches" ); |     SampleUtil_Print( "This sample control point application automatically searches" ); | ||||||
|     SampleUtil_Print( "for and subscribes to the services of television device emulator" ); |     SampleUtil_Print( "for and subscribes to the services of television device emulator" ); | ||||||
|     SampleUtil_Print( "devices, described in the tvdevicedesc.xml description document." ); |     SampleUtil_Print( "devices. While registers a tv device itself." ); | ||||||
|     SampleUtil_Print( "It also registers itself as a tv device." ); |  | ||||||
|     SampleUtil_Print( "" ); |     SampleUtil_Print( "" ); | ||||||
|     SampleUtil_Print( "Commands:" ); |     SampleUtil_Print( "Commands:" ); | ||||||
|     SampleUtil_Print( "  Help" ); |     SampleUtil_Print( "  Help" ); | ||||||
| @@ -450,18 +449,17 @@ device_main( int argc, char **argv ) | |||||||
|  |  | ||||||
|     port = ( unsigned short )portTemp; |     port = ( unsigned short )portTemp; | ||||||
|  |  | ||||||
|     return TvDeviceStart( ip_address, port, desc_doc_name, web_dir_path, linux_print ); |     return TvDeviceStart( | ||||||
|  |         ip_address, port, desc_doc_name, web_dir_path, linux_print ); | ||||||
| } | } | ||||||
|  |  | ||||||
| int main( int argc, char **argv ) | int | ||||||
|  | main( int argc, char **argv ) | ||||||
| { | { | ||||||
|     int rc; |     int rc; | ||||||
|     ithread_t cmdloop_thread; |     ithread_t cmdloop_thread; | ||||||
| #ifdef WIN32 |  | ||||||
| #else |  | ||||||
|     int sig; |     int sig; | ||||||
|     sigset_t sigs_to_catch; |     sigset_t sigs_to_catch; | ||||||
| #endif |  | ||||||
|     int code; |     int code; | ||||||
|  |  | ||||||
|     device_main(argc, argv); |     device_main(argc, argv); | ||||||
| @@ -470,12 +468,11 @@ int main( int argc, char **argv ) | |||||||
|         SampleUtil_Print( "Error starting UPnP TV Control Point" ); |         SampleUtil_Print( "Error starting UPnP TV Control Point" ); | ||||||
|         return rc; |         return rc; | ||||||
|     } |     } | ||||||
|     /* start a command loop thread */ |     // start a command loop thread | ||||||
|     code = ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop, NULL ); |     code = | ||||||
|  |         ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop, | ||||||
|  |                         NULL ); | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
|     ithread_join(cmdloop_thread, NULL); |  | ||||||
| #else |  | ||||||
|     /* |     /* | ||||||
|        Catch Ctrl-C and properly shutdown  |        Catch Ctrl-C and properly shutdown  | ||||||
|      */ |      */ | ||||||
| @@ -483,9 +480,10 @@ int main( int argc, char **argv ) | |||||||
|     sigaddset( &sigs_to_catch, SIGINT ); |     sigaddset( &sigs_to_catch, SIGINT ); | ||||||
|     sigwait( &sigs_to_catch, &sig ); |     sigwait( &sigs_to_catch, &sig ); | ||||||
|  |  | ||||||
|     SampleUtil_Print( "Shutting down on signal %d...\n", sig ); |     SampleUtil_Print( "Shutting down on signal %d...", sig ); | ||||||
| #endif |  | ||||||
|     TvDeviceStop(); |     TvDeviceStop(); | ||||||
|     rc = TvCtrlPointStop(); |     rc = TvCtrlPointStop(); | ||||||
|  |      | ||||||
|     return rc; |     return rc; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,33 +1,33 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #include "upnp_tv_ctrlpt.h" | #include "upnp_tv_ctrlpt.h" | ||||||
|  |  | ||||||
| @@ -138,10 +138,11 @@ TvCtrlPointDeleteNode( struct TvDeviceNode *node ) | |||||||
|  *   UDN -- The Unique Device Name for the device to remove |  *   UDN -- The Unique Device Name for the device to remove | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int TvCtrlPointRemoveDevice(const char *UDN) | int | ||||||
|  | TvCtrlPointRemoveDevice( char *UDN ) | ||||||
| { | { | ||||||
|     struct TvDeviceNode *curdevnode; |     struct TvDeviceNode *curdevnode, | ||||||
|     struct TvDeviceNode *prevdevnode; |      *prevdevnode; | ||||||
|  |  | ||||||
|     ithread_mutex_lock( &DeviceListMutex ); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
| @@ -223,7 +224,7 @@ TvCtrlPointRefresh( void ) | |||||||
| { | { | ||||||
|     int rc; |     int rc; | ||||||
|  |  | ||||||
|     TvCtrlPointRemoveAll(); |     TvCtrlPointRemoveAll(  ); | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|        Search for all devices of type tvdevice version 1,  |        Search for all devices of type tvdevice version 1,  | ||||||
| @@ -538,7 +539,7 @@ TvCtrlPointGetDevice( int devnum, | |||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int | int | ||||||
| TvCtrlPointPrintList() | TvCtrlPointPrintList(  ) | ||||||
| { | { | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
|     int i = 0; |     int i = 0; | ||||||
| @@ -667,8 +668,8 @@ TvCtrlPointPrintDevice( int devnum ) | |||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void | void | ||||||
| TvCtrlPointAddDevice( IXML_Document *DescDoc, | TvCtrlPointAddDevice( IXML_Document * DescDoc, | ||||||
|                       const char *location, |                       char *location, | ||||||
|                       int expires ) |                       int expires ) | ||||||
| { | { | ||||||
|     char *deviceType = NULL; |     char *deviceType = NULL; | ||||||
| @@ -681,19 +682,20 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc, | |||||||
|     char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; |     char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; | ||||||
|     char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; |     char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; | ||||||
|     Upnp_SID eventSID[TV_SERVICE_SERVCOUNT]; |     Upnp_SID eventSID[TV_SERVICE_SERVCOUNT]; | ||||||
|     int TimeOut[TV_SERVICE_SERVCOUNT] = { |     int TimeOut[TV_SERVICE_SERVCOUNT] = | ||||||
|         default_timeout, |         { default_timeout, default_timeout }; | ||||||
|         default_timeout }; |  | ||||||
|     struct TvDeviceNode *deviceNode; |     struct TvDeviceNode *deviceNode; | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
|     int ret = 1; |     int ret = 1; | ||||||
|     int found = 0; |     int found = 0; | ||||||
|     int service; |     int service, | ||||||
|     int var; |       var; | ||||||
|  |  | ||||||
|     ithread_mutex_lock( &DeviceListMutex ); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
|     /* Read key elements from description document */ |     /* | ||||||
|  |        Read key elements from description document  | ||||||
|  |      */ | ||||||
|     UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" ); |     UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" ); | ||||||
|     deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" ); |     deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" ); | ||||||
|     friendlyName = |     friendlyName = | ||||||
| @@ -701,8 +703,9 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc, | |||||||
|     baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" ); |     baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" ); | ||||||
|     relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" ); |     relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" ); | ||||||
|  |  | ||||||
|     ret = UpnpResolveURL( |     ret = | ||||||
|         ( baseURL ? baseURL : location ), relURL, presURL); |         UpnpResolveURL( ( baseURL ? baseURL : location ), relURL, | ||||||
|  |                         presURL ); | ||||||
|  |  | ||||||
|     if( UPNP_E_SUCCESS != ret ) |     if( UPNP_E_SUCCESS != ret ) | ||||||
|         SampleUtil_Print( "Error generating presURL from %s + %s", baseURL, |         SampleUtil_Print( "Error generating presURL from %s + %s", baseURL, | ||||||
| @@ -936,36 +939,34 @@ TvStateUpdate( char *UDN, | |||||||
|  *   changes -- The DOM document representing the changes |  *   changes -- The DOM document representing the changes | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void TvCtrlPointHandleEvent( | void | ||||||
| 	const Upnp_SID sid, | TvCtrlPointHandleEvent( Upnp_SID sid, | ||||||
| 	int evntkey, |                         int evntkey, | ||||||
| 	IXML_Document *changes) |                         IXML_Document * changes ) | ||||||
| { | { | ||||||
| 	struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
| 	int service; |     int service; | ||||||
|  |  | ||||||
| 	ithread_mutex_lock(&DeviceListMutex); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
| 	tmpdevnode = GlobalDeviceList; |     tmpdevnode = GlobalDeviceList; | ||||||
| 	while (tmpdevnode) { |     while( tmpdevnode ) { | ||||||
| 		for (service = 0; service < TV_SERVICE_SERVCOUNT; ++service) { |         for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) { | ||||||
| 			if(strcmp(tmpdevnode->device.TvService[service].SID, sid) == 0) { |             if( strcmp( tmpdevnode->device.TvService[service].SID, sid ) == | ||||||
| 				SampleUtil_Print("Received Tv %s Event: %d for SID %s", |                 0 ) { | ||||||
| 					TvServiceName[service], |                 SampleUtil_Print( "Received Tv %s Event: %d for SID %s", | ||||||
| 					evntkey, |                                   TvServiceName[service], evntkey, sid ); | ||||||
| 					sid ); |  | ||||||
| 				TvStateUpdate( |  | ||||||
| 					tmpdevnode->device.UDN, |  | ||||||
| 					service, |  | ||||||
| 					changes, |  | ||||||
| 					(char **)&tmpdevnode->device.TvService[service].VariableStrVal); |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		tmpdevnode = tmpdevnode->next; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ithread_mutex_unlock(&DeviceListMutex); |                 TvStateUpdate( tmpdevnode->device.UDN, service, changes, | ||||||
|  |                                ( char ** )&tmpdevnode->device. | ||||||
|  |                                TvService[service].VariableStrVal ); | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         tmpdevnode = tmpdevnode->next; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ithread_mutex_unlock( &DeviceListMutex ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
| @@ -982,10 +983,10 @@ void TvCtrlPointHandleEvent( | |||||||
|  *   timeout  -- The new timeout for the subscription |  *   timeout  -- The new timeout for the subscription | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void TvCtrlPointHandleSubscribeUpdate( | void | ||||||
| 	const char *eventURL, | TvCtrlPointHandleSubscribeUpdate( char *eventURL, | ||||||
| 	const Upnp_SID sid, |                                   Upnp_SID sid, | ||||||
| 	int timeout) |                                   int timeout ) | ||||||
| { | { | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
|     int service; |     int service; | ||||||
| @@ -1013,10 +1014,10 @@ void TvCtrlPointHandleSubscribeUpdate( | |||||||
|     ithread_mutex_unlock( &DeviceListMutex ); |     ithread_mutex_unlock( &DeviceListMutex ); | ||||||
| } | } | ||||||
|  |  | ||||||
| void TvCtrlPointHandleGetVar( | void | ||||||
| 	const char *controlURL, | TvCtrlPointHandleGetVar( char *controlURL, | ||||||
| 	const char *varName, |                          char *varName, | ||||||
| 	const DOMString varValue) |                          DOMString varValue ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
| @@ -1025,11 +1026,14 @@ void TvCtrlPointHandleGetVar( | |||||||
|     ithread_mutex_lock( &DeviceListMutex ); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
|     tmpdevnode = GlobalDeviceList; |     tmpdevnode = GlobalDeviceList; | ||||||
|     while (tmpdevnode) { |     while( tmpdevnode ) { | ||||||
|         for (service = 0; service < TV_SERVICE_SERVCOUNT; service++) { |         for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) { | ||||||
|             if (strcmp(tmpdevnode->device.TvService[service].ControlURL, controlURL) == 0) { |             if( strcmp | ||||||
|                 SampleUtil_StateUpdate( |                 ( tmpdevnode->device.TvService[service].ControlURL, | ||||||
| 			varName, varValue, tmpdevnode->device.UDN, GET_VAR_COMPLETE); |                   controlURL ) == 0 ) { | ||||||
|  |                 SampleUtil_StateUpdate( varName, varValue, | ||||||
|  |                                         tmpdevnode->device.UDN, | ||||||
|  |                                         GET_VAR_COMPLETE ); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -1053,137 +1057,186 @@ void TvCtrlPointHandleGetVar( | |||||||
|  *   Cookie -- Optional data specified during callback registration |  *   Cookie -- Optional data specified during callback registration | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int TvCtrlPointCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Cookie) | int | ||||||
|  | TvCtrlPointCallbackEventHandler( Upnp_EventType EventType, | ||||||
|  |                                  void *Event, | ||||||
|  |                                  void *Cookie ) | ||||||
| { | { | ||||||
| 	/*int errCode = 0;*/ |     SampleUtil_PrintEvent( EventType, Event ); | ||||||
|  |  | ||||||
| 	SampleUtil_PrintEvent(EventType, Event); |     switch ( EventType ) { | ||||||
| 	switch ( EventType ) { |             /* | ||||||
| 	/* SSDP Stuff */ |                SSDP Stuff  | ||||||
| 	case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: |              */ | ||||||
| 	case UPNP_DISCOVERY_SEARCH_RESULT: { |         case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: | ||||||
| 		struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event; |         case UPNP_DISCOVERY_SEARCH_RESULT: | ||||||
| 		IXML_Document *DescDoc = NULL; |             { | ||||||
| 		int ret; |                 struct Upnp_Discovery *d_event = | ||||||
|  |                     ( struct Upnp_Discovery * )Event; | ||||||
|  |                 IXML_Document *DescDoc = NULL; | ||||||
|  |                 int ret; | ||||||
|  |  | ||||||
| 		if (d_event->ErrCode != UPNP_E_SUCCESS) { |                 if( d_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
| 			SampleUtil_Print( |                     SampleUtil_Print( "Error in Discovery Callback -- %d", | ||||||
| 				"Error in Discovery Callback -- %d", d_event->ErrCode); |                                       d_event->ErrCode ); | ||||||
| 		} |                 } | ||||||
| 		ret = UpnpDownloadXmlDoc(d_event->Location, &DescDoc); |  | ||||||
| 		if (ret != UPNP_E_SUCCESS) { |  | ||||||
| 			SampleUtil_Print( |  | ||||||
| 				"Error obtaining device description from %s -- error = %d", |  | ||||||
| 				d_event->Location, ret); |  | ||||||
| 		} else { |  | ||||||
| 			TvCtrlPointAddDevice( |  | ||||||
| 				DescDoc, d_event->Location, d_event->Expires); |  | ||||||
| 		} |  | ||||||
| 		if (DescDoc) { |  | ||||||
| 			ixmlDocument_free(DescDoc); |  | ||||||
| 		} |  | ||||||
| 		TvCtrlPointPrintList(); |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	case UPNP_DISCOVERY_SEARCH_TIMEOUT: |  | ||||||
| 		/* Nothing to do here... */ |  | ||||||
| 		break; |  | ||||||
| 	case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: { |  | ||||||
| 		struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event; |  | ||||||
|  |  | ||||||
| 		if (d_event->ErrCode != UPNP_E_SUCCESS) { |                 if( ( ret = | ||||||
| 			SampleUtil_Print( |                       UpnpDownloadXmlDoc( d_event->Location, | ||||||
| 				"Error in Discovery ByeBye Callback -- %d", d_event->ErrCode); |                                           &DescDoc ) ) != | ||||||
| 		} |                     UPNP_E_SUCCESS ) { | ||||||
| 		SampleUtil_Print("Received ByeBye for Device: %s", d_event->DeviceId); |                     SampleUtil_Print | ||||||
| 		TvCtrlPointRemoveDevice(d_event->DeviceId); |                         ( "Error obtaining device description from %s -- error = %d", | ||||||
| 		SampleUtil_Print("After byebye:"); |                           d_event->Location, ret ); | ||||||
| 		TvCtrlPointPrintList(); |                 } else { | ||||||
| 		break; |                     TvCtrlPointAddDevice( DescDoc, d_event->Location, | ||||||
| 	} |                                           d_event->Expires ); | ||||||
| 	/* SOAP Stuff */ |                 } | ||||||
| 	case UPNP_CONTROL_ACTION_COMPLETE: { |  | ||||||
| 		struct Upnp_Action_Complete *a_event = (struct Upnp_Action_Complete *)Event; |  | ||||||
|  |  | ||||||
| 		if (a_event->ErrCode != UPNP_E_SUCCESS) { |                 if( DescDoc ) | ||||||
| 			SampleUtil_Print( |                     ixmlDocument_free( DescDoc ); | ||||||
| 				"Error in  Action Complete Callback -- %d", a_event->ErrCode); |  | ||||||
| 		} |  | ||||||
| 		/* No need for any processing here, just print out results. |  | ||||||
| 		 * Service state table updates are handled by events. */ |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	case UPNP_CONTROL_GET_VAR_COMPLETE: { |  | ||||||
| 		struct Upnp_State_Var_Complete *sv_event = (struct Upnp_State_Var_Complete *)Event; |  | ||||||
|  |  | ||||||
| 		if (sv_event->ErrCode != UPNP_E_SUCCESS) { |                 TvCtrlPointPrintList(  ); | ||||||
| 			SampleUtil_Print( |                 break; | ||||||
| 				"Error in Get Var Complete Callback -- %d", sv_event->ErrCode); |             } | ||||||
| 		} else { |  | ||||||
| 			TvCtrlPointHandleGetVar( |  | ||||||
| 				sv_event->CtrlUrl, |  | ||||||
| 				sv_event->StateVarName, |  | ||||||
| 				sv_event->CurrentVal); |  | ||||||
| 		} |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	/* GENA Stuff */ |  | ||||||
| 	case UPNP_EVENT_RECEIVED: { |  | ||||||
| 		struct Upnp_Event *e_event = (struct Upnp_Event *)Event; |  | ||||||
|  |  | ||||||
| 		TvCtrlPointHandleEvent( |         case UPNP_DISCOVERY_SEARCH_TIMEOUT: | ||||||
| 			e_event->Sid, |             /* | ||||||
| 			e_event->EventKey, |                Nothing to do here...  | ||||||
| 			e_event->ChangedVariables); |              */ | ||||||
| 		break; |             break; | ||||||
| 	} |  | ||||||
| 	case UPNP_EVENT_SUBSCRIBE_COMPLETE: |  | ||||||
| 	case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: |  | ||||||
| 	case UPNP_EVENT_RENEWAL_COMPLETE: { |  | ||||||
| 		struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)Event; |  | ||||||
|  |  | ||||||
| 		if (es_event->ErrCode != UPNP_E_SUCCESS) { |         case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: | ||||||
| 			SampleUtil_Print( |             { | ||||||
| 				"Error in Event Subscribe Callback -- %d", es_event->ErrCode); |                 struct Upnp_Discovery *d_event = | ||||||
| 		} else { |                     ( struct Upnp_Discovery * )Event; | ||||||
| 			TvCtrlPointHandleSubscribeUpdate( |  | ||||||
| 				es_event->PublisherUrl, |  | ||||||
| 				es_event->Sid, |  | ||||||
| 				es_event->TimeOut); |  | ||||||
| 		} |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	case UPNP_EVENT_AUTORENEWAL_FAILED: |  | ||||||
| 	case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { |  | ||||||
| 		struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)Event; |  | ||||||
| 		int TimeOut = default_timeout; |  | ||||||
| 		Upnp_SID newSID; |  | ||||||
| 		int ret; |  | ||||||
|  |  | ||||||
| 		ret = UpnpSubscribe( |                 if( d_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
| 			ctrlpt_handle, |                     SampleUtil_Print | ||||||
| 			es_event->PublisherUrl, |                         ( "Error in Discovery ByeBye Callback -- %d", | ||||||
| 			&TimeOut, |                           d_event->ErrCode ); | ||||||
| 			newSID); |                 } | ||||||
| 		if (ret == UPNP_E_SUCCESS) { |  | ||||||
| 			SampleUtil_Print("Subscribed to EventURL with SID=%s", newSID); |  | ||||||
| 			TvCtrlPointHandleSubscribeUpdate( |  | ||||||
| 				es_event->PublisherUrl, |  | ||||||
| 				newSID, |  | ||||||
| 				TimeOut); |  | ||||||
| 		} else { |  | ||||||
| 			SampleUtil_Print("Error Subscribing to EventURL -- %d", ret); |  | ||||||
| 		} |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	/* ignore these cases, since this is not a device */ |  | ||||||
| 	case UPNP_EVENT_SUBSCRIPTION_REQUEST: |  | ||||||
| 	case UPNP_CONTROL_GET_VAR_REQUEST: |  | ||||||
| 	case UPNP_CONTROL_ACTION_REQUEST: |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |                 SampleUtil_Print( "Received ByeBye for Device: %s", | ||||||
|  |                                   d_event->DeviceId ); | ||||||
|  |                 TvCtrlPointRemoveDevice( d_event->DeviceId ); | ||||||
|  |  | ||||||
|  |                 SampleUtil_Print( "After byebye:" ); | ||||||
|  |                 TvCtrlPointPrintList(  ); | ||||||
|  |  | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             /* | ||||||
|  |                SOAP Stuff  | ||||||
|  |              */ | ||||||
|  |         case UPNP_CONTROL_ACTION_COMPLETE: | ||||||
|  |             { | ||||||
|  |                 struct Upnp_Action_Complete *a_event = | ||||||
|  |                     ( struct Upnp_Action_Complete * )Event; | ||||||
|  |  | ||||||
|  |                 if( a_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
|  |                     SampleUtil_Print | ||||||
|  |                         ( "Error in  Action Complete Callback -- %d", | ||||||
|  |                           a_event->ErrCode ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 /* | ||||||
|  |                    No need for any processing here, just print out results.  Service state | ||||||
|  |                    table updates are handled by events.  | ||||||
|  |                  */ | ||||||
|  |  | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         case UPNP_CONTROL_GET_VAR_COMPLETE: | ||||||
|  |             { | ||||||
|  |                 struct Upnp_State_Var_Complete *sv_event = | ||||||
|  |                     ( struct Upnp_State_Var_Complete * )Event; | ||||||
|  |  | ||||||
|  |                 if( sv_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
|  |                     SampleUtil_Print | ||||||
|  |                         ( "Error in Get Var Complete Callback -- %d", | ||||||
|  |                           sv_event->ErrCode ); | ||||||
|  |                 } else { | ||||||
|  |                     TvCtrlPointHandleGetVar( sv_event->CtrlUrl, | ||||||
|  |                                              sv_event->StateVarName, | ||||||
|  |                                              sv_event->CurrentVal ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             /* | ||||||
|  |                GENA Stuff  | ||||||
|  |              */ | ||||||
|  |         case UPNP_EVENT_RECEIVED: | ||||||
|  |             { | ||||||
|  |                 struct Upnp_Event *e_event = ( struct Upnp_Event * )Event; | ||||||
|  |  | ||||||
|  |                 TvCtrlPointHandleEvent( e_event->Sid, e_event->EventKey, | ||||||
|  |                                         e_event->ChangedVariables ); | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         case UPNP_EVENT_SUBSCRIBE_COMPLETE: | ||||||
|  |         case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: | ||||||
|  |         case UPNP_EVENT_RENEWAL_COMPLETE: | ||||||
|  |             { | ||||||
|  |                 struct Upnp_Event_Subscribe *es_event = | ||||||
|  |                     ( struct Upnp_Event_Subscribe * )Event; | ||||||
|  |  | ||||||
|  |                 if( es_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
|  |                     SampleUtil_Print | ||||||
|  |                         ( "Error in Event Subscribe Callback -- %d", | ||||||
|  |                           es_event->ErrCode ); | ||||||
|  |                 } else { | ||||||
|  |                     TvCtrlPointHandleSubscribeUpdate( es_event-> | ||||||
|  |                                                       PublisherUrl, | ||||||
|  |                                                       es_event->Sid, | ||||||
|  |                                                       es_event->TimeOut ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         case UPNP_EVENT_AUTORENEWAL_FAILED: | ||||||
|  |         case UPNP_EVENT_SUBSCRIPTION_EXPIRED: | ||||||
|  |             { | ||||||
|  |                 int TimeOut = default_timeout; | ||||||
|  |                 Upnp_SID newSID; | ||||||
|  |                 int ret; | ||||||
|  |  | ||||||
|  |                 struct Upnp_Event_Subscribe *es_event = | ||||||
|  |                     ( struct Upnp_Event_Subscribe * )Event; | ||||||
|  |  | ||||||
|  |                 ret = | ||||||
|  |                     UpnpSubscribe( ctrlpt_handle, es_event->PublisherUrl, | ||||||
|  |                                    &TimeOut, newSID ); | ||||||
|  |  | ||||||
|  |                 if( ret == UPNP_E_SUCCESS ) { | ||||||
|  |                     SampleUtil_Print( "Subscribed to EventURL with SID=%s", | ||||||
|  |                                       newSID ); | ||||||
|  |                     TvCtrlPointHandleSubscribeUpdate( es_event-> | ||||||
|  |                                                       PublisherUrl, newSID, | ||||||
|  |                                                       TimeOut ); | ||||||
|  |                 } else { | ||||||
|  |                     SampleUtil_Print | ||||||
|  |                         ( "Error Subscribing to EventURL -- %d", ret ); | ||||||
|  |                 } | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             /* | ||||||
|  |                ignore these cases, since this is not a device  | ||||||
|  |              */ | ||||||
|  |         case UPNP_EVENT_SUBSCRIPTION_REQUEST: | ||||||
|  |         case UPNP_CONTROL_GET_VAR_REQUEST: | ||||||
|  |         case UPNP_CONTROL_ACTION_REQUEST: | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
| @@ -1267,12 +1320,12 @@ TvCtrlPointVerifyTimeouts( int incr ) | |||||||
|  *    None |  *    None | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| static int TvCtrlPointTimerLoopRun = 1; | void * | ||||||
| void *TvCtrlPointTimerLoop(void *args) | TvCtrlPointTimerLoop( void *args ) | ||||||
| { | { | ||||||
|     int incr = 30;              // how often to verify the timeouts, in seconds |     int incr = 30;              // how often to verify the timeouts, in seconds | ||||||
|  |  | ||||||
|     while (TvCtrlPointTimerLoopRun) { |     while( 1 ) { | ||||||
|         isleep( incr ); |         isleep( incr ); | ||||||
|         TvCtrlPointVerifyTimeouts( incr ); |         TvCtrlPointVerifyTimeouts( incr ); | ||||||
|     } |     } | ||||||
| @@ -1295,73 +1348,62 @@ void *TvCtrlPointTimerLoop(void *args) | |||||||
|  *		TV_SUCCESS if everything went well, else TV_ERROR |  *		TV_SUCCESS if everything went well, else TV_ERROR | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionPtr) | int | ||||||
|  | TvCtrlPointStart( print_string printFunctionPtr, | ||||||
|  |                   state_update updateFunctionPtr ) | ||||||
| { | { | ||||||
| 	ithread_t timer_thread; |     ithread_t timer_thread; | ||||||
| 	int rc; |     int rc; | ||||||
| 	unsigned short port = 0; |     short int port = 0; | ||||||
| 	char *ip_address = NULL; |     char *ip_address = NULL; | ||||||
|  |  | ||||||
| 	SampleUtil_Initialize(printFunctionPtr); |     SampleUtil_Initialize( printFunctionPtr ); | ||||||
| 	SampleUtil_RegisterUpdateFunction(updateFunctionPtr); |     SampleUtil_RegisterUpdateFunction( updateFunctionPtr ); | ||||||
|  |  | ||||||
| 	ithread_mutex_init(&DeviceListMutex, 0); |     ithread_mutex_init( &DeviceListMutex, 0 ); | ||||||
|  |  | ||||||
| 	SampleUtil_Print( |     SampleUtil_Print( "Intializing UPnP with ipaddress=%s port=%d", | ||||||
| 		"Initializing UPnP Sdk with\n" |                       ip_address, port ); | ||||||
| 		"\tipaddress = %s port = %u\n", |     rc = UpnpInit( ip_address, port ); | ||||||
| 		ip_address ? ip_address : "{NULL}", |     if( UPNP_E_SUCCESS != rc ) { | ||||||
| 		port); |         SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc ); | ||||||
|  |         //UpnpFinish(  ); | ||||||
|  |         //return TV_ERROR; | ||||||
|  |     } | ||||||
|  |  | ||||||
| 	rc = UpnpInit(ip_address, port); |     if( NULL == ip_address ) | ||||||
| 	if (rc != UPNP_E_SUCCESS) { |         ip_address = UpnpGetServerIpAddress(  ); | ||||||
| 		SampleUtil_Print("WinCEStart: UpnpInit() Error: %d", rc); |     if( 0 == port ) | ||||||
| 		/* |         port = UpnpGetServerPort(  ); | ||||||
| 		UpnpFinish(); |  | ||||||
| 		return TV_ERROR; |  | ||||||
| 		*/ |  | ||||||
| 	} |  | ||||||
| 	if (!ip_address) { |  | ||||||
| 		ip_address = UpnpGetServerIpAddress(); |  | ||||||
| 	} |  | ||||||
| 	if (!port) { |  | ||||||
| 		port = UpnpGetServerPort(); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	SampleUtil_Print( |     SampleUtil_Print( "UPnP Initialized (%s:%d)", ip_address, port ); | ||||||
| 		"UPnP Initialized\n" |  | ||||||
| 		"\tipaddress= %s port = %u\n", |  | ||||||
| 		ip_address, port); |  | ||||||
|  |  | ||||||
| 	SampleUtil_Print("Registering Control Point"); |     SampleUtil_Print( "Registering Control Point" ); | ||||||
| 	rc = UpnpRegisterClient(TvCtrlPointCallbackEventHandler, |     rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler, | ||||||
| 		&ctrlpt_handle, &ctrlpt_handle); |                              &ctrlpt_handle, &ctrlpt_handle ); | ||||||
| 	if (rc != UPNP_E_SUCCESS) { |     if( UPNP_E_SUCCESS != rc ) { | ||||||
| 		SampleUtil_Print( "Error registering CP: %d", rc ); |         SampleUtil_Print( "Error registering CP: %d", rc ); | ||||||
| 		UpnpFinish(); |         UpnpFinish(  ); | ||||||
|  |         return TV_ERROR; | ||||||
|  |     } | ||||||
|  |  | ||||||
| 		return TV_ERROR; |     SampleUtil_Print( "Control Point Registered" ); | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	SampleUtil_Print("Control Point Registered"); |     TvCtrlPointRefresh(  ); | ||||||
|  |  | ||||||
| 	TvCtrlPointRefresh(); |     // start a timer thread | ||||||
|  |     ithread_create( &timer_thread, NULL, TvCtrlPointTimerLoop, NULL ); | ||||||
|  |  | ||||||
| 	/* start a timer thread */ |     return TV_SUCCESS; | ||||||
| 	ithread_create(&timer_thread, NULL, TvCtrlPointTimerLoop, NULL); |  | ||||||
| 	ithread_detach(timer_thread); |  | ||||||
|  |  | ||||||
| 	return TV_SUCCESS; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| int TvCtrlPointStop(void) | int | ||||||
|  | TvCtrlPointStop( void ) | ||||||
| { | { | ||||||
| 	TvCtrlPointTimerLoopRun = 0; |     TvCtrlPointRemoveAll(  ); | ||||||
| 	TvCtrlPointRemoveAll(); |     UpnpUnRegisterClient( ctrlpt_handle ); | ||||||
| 	UpnpUnRegisterClient( ctrlpt_handle ); |     UpnpFinish(  ); | ||||||
| 	UpnpFinish(); |     SampleUtil_Finish(  ); | ||||||
| 	SampleUtil_Finish(); |  | ||||||
|  |  | ||||||
| 	return TV_SUCCESS; |     return TV_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,33 +1,33 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #ifndef UPNP_TV_CTRLPT_H | #ifndef UPNP_TV_CTRLPT_H | ||||||
| #define UPNP_TV_CTRLPT_H | #define UPNP_TV_CTRLPT_H | ||||||
| @@ -39,9 +39,7 @@ extern "C" { | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
| #include "ithread.h" | #include "ithread.h" | ||||||
| #ifndef WIN32 |  | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #endif |  | ||||||
| #include <stdarg.h> | #include <stdarg.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| @@ -111,8 +109,8 @@ extern ithread_mutex_t DeviceListMutex; | |||||||
| extern UpnpClient_Handle ctrlpt_handle; | extern UpnpClient_Handle ctrlpt_handle; | ||||||
|  |  | ||||||
| void	TvCtrlPointPrintHelp( void ); | void	TvCtrlPointPrintHelp( void ); | ||||||
| int		TvCtrlPointDeleteNode(struct TvDeviceNode *); | int		TvCtrlPointDeleteNode(struct TvDeviceNode*); | ||||||
| int		TvCtrlPointRemoveDevice(const char *); | int		TvCtrlPointRemoveDevice(char*); | ||||||
| int		TvCtrlPointRemoveAll( void ); | int		TvCtrlPointRemoveAll( void ); | ||||||
| int		TvCtrlPointRefresh( void ); | int		TvCtrlPointRefresh( void ); | ||||||
|  |  | ||||||
| @@ -140,11 +138,11 @@ int		TvCtrlPointGetBrightness(int); | |||||||
| int		TvCtrlPointGetDevice(int, struct TvDeviceNode **); | int		TvCtrlPointGetDevice(int, struct TvDeviceNode **); | ||||||
| int		TvCtrlPointPrintList( void ); | int		TvCtrlPointPrintList( void ); | ||||||
| int		TvCtrlPointPrintDevice(int); | int		TvCtrlPointPrintDevice(int); | ||||||
| void	TvCtrlPointAddDevice(IXML_Document *, const char *, int);  | void	TvCtrlPointAddDevice (IXML_Document *, char *, int);  | ||||||
| void    TvCtrlPointHandleGetVar(const char *, const char *, const DOMString); | void    TvCtrlPointHandleGetVar(char *,char *,DOMString); | ||||||
| void	TvStateUpdate(char*,int, IXML_Document * , char **); | void	TvStateUpdate(char*,int, IXML_Document * , char **); | ||||||
| void	TvCtrlPointHandleEvent(const Upnp_SID, int, IXML_Document *);  | void	TvCtrlPointHandleEvent(Upnp_SID, int, IXML_Document *);  | ||||||
| void	TvCtrlPointHandleSubscribeUpdate(const char *, const Upnp_SID, int);  | void	TvCtrlPointHandleSubscribeUpdate(char *, Upnp_SID, int);  | ||||||
| int		TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *); | int		TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *); | ||||||
| void	TvCtrlPointVerifyTimeouts(int); | void	TvCtrlPointVerifyTimeouts(int); | ||||||
| void	TvCtrlPointPrintCommands( void ); | void	TvCtrlPointPrintCommands( void ); | ||||||
|   | |||||||
| @@ -1,47 +1,40 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "upnp_tv_device.h" | #include "upnp_tv_device.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <assert.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define DEFAULT_WEB_DIR "./web" | #define DEFAULT_WEB_DIR "./web" | ||||||
|  |  | ||||||
|  |  | ||||||
| #define DESC_URL_SIZE 200 | #define DESC_URL_SIZE 200 | ||||||
|  |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|    Device type for tv device  |    Device type for tv device  | ||||||
|  */ |  */ | ||||||
| @@ -185,6 +178,7 @@ SetServiceTable( IN int serviceType, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     return SetActionTable( serviceType, out ); |     return SetActionTable( serviceType, out ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -255,6 +249,7 @@ SetActionTable( IN int serviceType, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -377,10 +372,10 @@ TvDeviceHandleSubscriptionRequest( IN struct Upnp_Subscription_Request | |||||||
| { | { | ||||||
|     unsigned int i = 0;         //,j=0; |     unsigned int i = 0;         //,j=0; | ||||||
|  |  | ||||||
| 	// IXML_Document *PropSet = NULL; |     // IXML_Document *PropSet=NULL; | ||||||
|  |  | ||||||
| 	// lock state mutex |     //lock state mutex | ||||||
| 	ithread_mutex_lock( &TVDevMutex ); |     ithread_mutex_lock( &TVDevMutex ); | ||||||
|  |  | ||||||
|     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { |     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { | ||||||
|         if( ( strcmp( sr_event->UDN, tv_service_table[i].UDN ) == 0 ) && |         if( ( strcmp( sr_event->UDN, tv_service_table[i].UDN ) == 0 ) && | ||||||
| @@ -388,48 +383,44 @@ TvDeviceHandleSubscriptionRequest( IN struct Upnp_Subscription_Request | |||||||
|               == 0 ) ) { |               == 0 ) ) { | ||||||
|  |  | ||||||
|             /* |             /* | ||||||
| 			PropSet = NULL; |                PropSet = NULL; | ||||||
|  |  | ||||||
| 			for (j = 0; j< tv_service_table[i].VariableCount; ++j) { |                for (j=0; j< tv_service_table[i].VariableCount; j++) | ||||||
| 				// add each variable to the property set |                { | ||||||
| 				// for initial state dump |                //add each variable to the property set | ||||||
| 				UpnpAddToPropertySet( |                //for initial state dump | ||||||
| 					&PropSet,  |                UpnpAddToPropertySet(&PropSet,  | ||||||
| 					tv_service_table[i].VariableName[j], |                tv_service_table[i].VariableName[j], | ||||||
| 					tv_service_table[i].VariableStrVal[j]); |                tv_service_table[i].VariableStrVal[j]); | ||||||
| 			} |                } | ||||||
|  |  | ||||||
| 			// dump initial state  |                //dump initial state  | ||||||
| 			UpnpAcceptSubscriptionExt( |                UpnpAcceptSubscriptionExt(device_handle, sr_event->UDN,  | ||||||
| 				device_handle, |                sr_event->ServiceId, | ||||||
| 				sr_event->UDN,  |                PropSet,sr_event->Sid); | ||||||
| 				sr_event->ServiceId, |                //free document | ||||||
| 				PropSet, |                Document_free(PropSet); | ||||||
| 				sr_event->Sid); |  | ||||||
| 			// free document |  | ||||||
| 			Document_free(PropSet); |  | ||||||
|  |  | ||||||
|              */ |              */ | ||||||
|  |  | ||||||
| 			UpnpAcceptSubscription( device_handle, |             UpnpAcceptSubscription( device_handle, | ||||||
| 				sr_event->UDN, |                                     sr_event->UDN, | ||||||
| 				sr_event->ServiceId, |                                     sr_event->ServiceId, | ||||||
| 				(const char **)tv_service_table[i]. |                                     ( const char ** )tv_service_table[i]. | ||||||
| 				VariableName, |                                     VariableName, | ||||||
| 				(const char **)tv_service_table[i]. |                                     ( const char ** )tv_service_table[i]. | ||||||
| 				VariableStrVal, |                                     VariableStrVal, | ||||||
| 				tv_service_table[i].VariableCount, |                                     tv_service_table[i].VariableCount, | ||||||
| 				sr_event->Sid); |                                     sr_event->Sid ); | ||||||
|  |  | ||||||
| 		} |         } | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	ithread_mutex_unlock( &TVDevMutex ); |     ithread_mutex_unlock( &TVDevMutex ); | ||||||
|  |  | ||||||
| 	return 1; |     return ( 1 ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
|  * TvDeviceHandleGetVarRequest |  * TvDeviceHandleGetVarRequest | ||||||
|  * |  * | ||||||
| @@ -446,8 +437,8 @@ int | |||||||
| TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | ||||||
|                              *cgv_event ) |                              *cgv_event ) | ||||||
| { | { | ||||||
|     unsigned int i = 0; |     unsigned int i = 0, | ||||||
|     unsigned int j = 0; |       j = 0; | ||||||
|     int getvar_succeeded = 0; |     int getvar_succeeded = 0; | ||||||
|  |  | ||||||
|     cgv_event->CurrentVal = NULL; |     cgv_event->CurrentVal = NULL; | ||||||
| @@ -455,12 +446,12 @@ TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | |||||||
|     ithread_mutex_lock( &TVDevMutex ); |     ithread_mutex_lock( &TVDevMutex ); | ||||||
|  |  | ||||||
|     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { |     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { | ||||||
|         // check udn and service id |         //check udn and service id | ||||||
|         if( ( strcmp( cgv_event->DevUDN, tv_service_table[i].UDN ) == 0 ) |         if( ( strcmp( cgv_event->DevUDN, tv_service_table[i].UDN ) == 0 ) | ||||||
|             && |             && | ||||||
|             ( strcmp( cgv_event->ServiceID, tv_service_table[i].ServiceId ) |             ( strcmp( cgv_event->ServiceID, tv_service_table[i].ServiceId ) | ||||||
|               == 0 ) ) { |               == 0 ) ) { | ||||||
|             // check variable name |             //check variable name | ||||||
|             for( j = 0; j < tv_service_table[i].VariableCount; j++ ) { |             for( j = 0; j < tv_service_table[i].VariableCount; j++ ) { | ||||||
|                 if( strcmp( cgv_event->StateVarName, |                 if( strcmp( cgv_event->StateVarName, | ||||||
|                             tv_service_table[i].VariableName[j] ) == 0 ) { |                             tv_service_table[i].VariableName[j] ) == 0 ) { | ||||||
| @@ -505,6 +496,7 @@ TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | |||||||
| int | int | ||||||
| TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|        Defaults if action not found  |        Defaults if action not found  | ||||||
|      */ |      */ | ||||||
| @@ -557,7 +549,7 @@ TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | |||||||
|                                                            ActionRequest, |                                                            ActionRequest, | ||||||
|                                                            &ca_event-> |                                                            &ca_event-> | ||||||
|                                                            ActionResult, |                                                            ActionResult, | ||||||
|                     &errorString ); |                                                            &errorString ); | ||||||
|             } else { |             } else { | ||||||
|                 errorString = "Power is Off"; |                 errorString = "Power is Off"; | ||||||
|                 retCode = UPNP_E_INTERNAL_ERROR; |                 retCode = UPNP_E_INTERNAL_ERROR; | ||||||
| @@ -575,7 +567,7 @@ TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | |||||||
|         if( retCode == UPNP_E_SUCCESS ) { |         if( retCode == UPNP_E_SUCCESS ) { | ||||||
|             ca_event->ErrCode = UPNP_E_SUCCESS; |             ca_event->ErrCode = UPNP_E_SUCCESS; | ||||||
|         } else { |         } else { | ||||||
|             // copy the error string |             //copy the error string  | ||||||
|             strcpy( ca_event->ErrStr, errorString ); |             strcpy( ca_event->ErrStr, errorString ); | ||||||
|             switch ( retCode ) { |             switch ( retCode ) { | ||||||
|                 case UPNP_E_INVALID_PARAM: |                 case UPNP_E_INVALID_PARAM: | ||||||
| @@ -657,6 +649,7 @@ TvDeviceSetServiceTableVar( IN unsigned int service, | |||||||
|     ithread_mutex_unlock( &TVDevMutex ); |     ithread_mutex_unlock( &TVDevMutex ); | ||||||
|  |  | ||||||
|     return ( 1 ); |     return ( 1 ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -679,7 +672,7 @@ TvDeviceSetPower( IN int on ) | |||||||
|  |  | ||||||
|     if( on != POWER_ON && on != POWER_OFF ) { |     if( on != POWER_ON && on != POWER_OFF ) { | ||||||
|         SampleUtil_Print( "error: can't set power to value %d\n", on ); |         SampleUtil_Print( "error: can't set power to value %d\n", on ); | ||||||
|         return 0; |         return ( 0 ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
| @@ -690,7 +683,7 @@ TvDeviceSetPower( IN int on ) | |||||||
|     ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER, |     ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER, | ||||||
|                                       value ); |                                       value ); | ||||||
|  |  | ||||||
|     return ret; |     return ( ret ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -707,7 +700,9 @@ TvDeviceSetPower( IN int on ) | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDevicePowerOn( IN IXML_Document * in, | ||||||
|  |                  OUT IXML_Document ** out, | ||||||
|  |                  OUT char **errorString ) | ||||||
| { | { | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
|     ( *errorString ) = NULL; |     ( *errorString ) = NULL; | ||||||
| @@ -727,6 +722,7 @@ TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -744,7 +740,7 @@ TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDevicePowerOff( IN IXML_Document * in, | TvDevicePowerOff( IN IXML_Document * in, | ||||||
|                   OUT IXML_Document **out, |                   OUT IXML_Document ** out, | ||||||
|                   OUT char **errorString ) |                   OUT char **errorString ) | ||||||
| { | { | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -783,8 +779,11 @@ TvDevicePowerOff( IN IXML_Document * in, | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetChannel( IN IXML_Document * in, | ||||||
|  |                     OUT IXML_Document ** out, | ||||||
|  |                     OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int channel = 0; |     int channel = 0; | ||||||
| @@ -829,6 +828,7 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -846,10 +846,13 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString ) | IncrementChannel( IN int incr, | ||||||
|  |                   IN IXML_Document * in, | ||||||
|  |                   OUT IXML_Document ** out, | ||||||
|  |                   OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curchannel; |     int curchannel, | ||||||
|     int newchannel; |       newchannel; | ||||||
|  |  | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
| @@ -911,9 +914,12 @@ IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, O | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseChannel( IN IXML_Document * in, | ||||||
|  |                          OUT IXML_Document ** out, | ||||||
|  |                          OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementChannel( -1, in, out, errorString ); |     return IncrementChannel( -1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -930,9 +936,12 @@ TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseChannel( IN IXML_Document * in, | ||||||
|  |                          OUT IXML_Document ** out, | ||||||
|  |                          OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementChannel( 1, in, out, errorString ); |     return IncrementChannel( 1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -951,9 +960,13 @@ TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetVolume( IN IXML_Document * in, | ||||||
|  |                    OUT IXML_Document ** out, | ||||||
|  |                    OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int volume = 0; |     int volume = 0; | ||||||
|  |  | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -994,6 +1007,7 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1012,7 +1026,10 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT char **errorString ) | IncrementVolume( IN int incr, | ||||||
|  |                  IN IXML_Document * in, | ||||||
|  |                  OUT IXML_Document ** out, | ||||||
|  |                  OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curvolume, |     int curvolume, | ||||||
|       newvolume; |       newvolume; | ||||||
| @@ -1049,7 +1066,8 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT | |||||||
|                                     TV_CONTROL_VOLUME, value ) ) { |                                     TV_CONTROL_VOLUME, value ) ) { | ||||||
|         if( UpnpAddToActionResponse( out, actionName, |         if( UpnpAddToActionResponse( out, actionName, | ||||||
|                                      TvServiceType[TV_SERVICE_CONTROL], |                                      TvServiceType[TV_SERVICE_CONTROL], | ||||||
|                                      "Volume", value ) != UPNP_E_SUCCESS ) { |                                      "Volume", value ) != UPNP_E_SUCCESS ) | ||||||
|  |         { | ||||||
|             ( *out ) = NULL; |             ( *out ) = NULL; | ||||||
|             ( *errorString ) = "Internal Error"; |             ( *errorString ) = "Internal Error"; | ||||||
|             return UPNP_E_INTERNAL_ERROR; |             return UPNP_E_INTERNAL_ERROR; | ||||||
| @@ -1059,6 +1077,7 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1075,9 +1094,13 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseVolume( IN IXML_Document * in, | ||||||
|  |                         OUT IXML_Document ** out, | ||||||
|  |                         OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementVolume( 1, in, out, errorString ); |     return IncrementVolume( 1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1094,9 +1117,13 @@ TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseVolume( IN IXML_Document * in, | ||||||
|  |                         OUT IXML_Document ** out, | ||||||
|  |                         OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementVolume( -1, in, out, errorString ); |     return IncrementVolume( -1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1115,9 +1142,13 @@ TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetColor( IN IXML_Document * in, | ||||||
|  |                   OUT IXML_Document ** out, | ||||||
|  |                   OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int color = 0; |     int color = 0; | ||||||
|  |  | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -1157,6 +1188,7 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1173,11 +1205,16 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro | |||||||
|  *    IXML_Document **out - action result document |  *    IXML_Document **out - action result document | ||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
|  |  | ||||||
| int | int | ||||||
| IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementColor( IN int incr, | ||||||
|  |                 IN IXML_Document * in, | ||||||
|  |                 OUT IXML_Document ** out, | ||||||
|  |                 OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curcolor; |     int curcolor, | ||||||
|     int newcolor; |       newcolor; | ||||||
|  |  | ||||||
|     char *actionName; |     char *actionName; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1235,8 +1272,11 @@ IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseColor( IN IXML_Document * in, | ||||||
|  |                        OUT IXML_Document ** out, | ||||||
|  |                        OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementColor( -1, in, out, errorString ); |     return IncrementColor( -1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1253,8 +1293,11 @@ TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseColor( IN IXML_Document * in, | ||||||
|  |                        OUT IXML_Document ** out, | ||||||
|  |                        OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementColor( 1, in, out, errorString ); |     return IncrementColor( 1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1274,9 +1317,13 @@ TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetTint( IN IXML_Document * in, | ||||||
|  |                  OUT IXML_Document ** out, | ||||||
|  |                  OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int tint = -1; |     int tint = -1; | ||||||
|  |  | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -1335,10 +1382,14 @@ TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementTint( IN int incr, | ||||||
|  |                IN IXML_Document * in, | ||||||
|  |                OUT IXML_Document ** out, | ||||||
|  |                OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curtint; |     int curtint, | ||||||
|     int newtint; |       newtint; | ||||||
|  |  | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1381,6 +1432,7 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1397,8 +1449,11 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseTint( IN IXML_Document * in, | ||||||
|  |                       OUT IXML_Document ** out, | ||||||
|  |                       OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementTint( 1, in, out, errorString ); |     return IncrementTint( 1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1416,8 +1471,11 @@ TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char ** | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseTint( IN IXML_Document * in, | ||||||
|  |                       OUT IXML_Document ** out, | ||||||
|  |                       OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementTint( -1, in, out, errorString ); |     return IncrementTint( -1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1437,8 +1495,11 @@ TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char ** | |||||||
|  * |  * | ||||||
|  ****************************************************************************/ |  ****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetContrast( IN IXML_Document * in, | ||||||
|  |                      OUT IXML_Document ** out, | ||||||
|  |                      OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|     int contrast = -1; |     int contrast = -1; | ||||||
|  |  | ||||||
| @@ -1499,10 +1560,14 @@ TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **e | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementContrast( IN int incr, | ||||||
|  |                    IN IXML_Document * in, | ||||||
|  |                    OUT IXML_Document ** out, | ||||||
|  |                    OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curcontrast; |     int curcontrast, | ||||||
|     int newcontrast; |       newcontrast; | ||||||
|  |  | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1564,8 +1629,11 @@ IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, O | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseContrast( IN IXML_Document * in, | ||||||
|  |                           OUT IXML_Document ** out, | ||||||
|  |                           OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementContrast( 1, in, out, errorString ); |     return IncrementContrast( 1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1583,7 +1651,9 @@ TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseContrast( IXML_Document * in, | ||||||
|  |                           IXML_Document ** out, | ||||||
|  |                           char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementContrast( -1, in, out, errorString ); |     return IncrementContrast( -1, in, out, errorString ); | ||||||
| } | } | ||||||
| @@ -1601,8 +1671,11 @@ TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetBrightness( IN IXML_Document * in, | ||||||
|  |                        OUT IXML_Document ** out, | ||||||
|  |                        OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|     int brightness = -1; |     int brightness = -1; | ||||||
|  |  | ||||||
| @@ -1645,6 +1718,7 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1662,10 +1736,13 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementBrightness( IN int incr, | ||||||
|  |                      IN IXML_Document * in, | ||||||
|  |                      OUT IXML_Document ** out, | ||||||
|  |                      OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curbrightness; |     int curbrightness, | ||||||
|     int newbrightness; |       newbrightness; | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1726,7 +1803,9 @@ IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseBrightness( IN IXML_Document * in, | ||||||
|  |                             OUT IXML_Document ** out, | ||||||
|  |                             OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementBrightness( 1, in, out, errorString ); |     return IncrementBrightness( 1, in, out, errorString ); | ||||||
| } | } | ||||||
| @@ -1744,7 +1823,9 @@ TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseBrightness( IN IXML_Document * in, | ||||||
|  |                             OUT IXML_Document ** out, | ||||||
|  |                             OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementBrightness( -1, in, out, errorString ); |     return IncrementBrightness( -1, in, out, errorString ); | ||||||
| } | } | ||||||
| @@ -1768,9 +1849,14 @@ TvDeviceDecreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|  *   Cookie -- Optional data specified during callback registration |  *   Cookie -- Optional data specified during callback registration | ||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Cookie) | int | ||||||
|  | TvDeviceCallbackEventHandler( Upnp_EventType EventType, | ||||||
|  |                               void *Event, | ||||||
|  |                               void *Cookie ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     switch ( EventType ) { |     switch ( EventType ) { | ||||||
|  |  | ||||||
|         case UPNP_EVENT_SUBSCRIPTION_REQUEST: |         case UPNP_EVENT_SUBSCRIPTION_REQUEST: | ||||||
|  |  | ||||||
|             TvDeviceHandleSubscriptionRequest( ( struct |             TvDeviceHandleSubscriptionRequest( ( struct | ||||||
| @@ -1804,14 +1890,17 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co | |||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         default: |         default: | ||||||
|             SampleUtil_Print( "Error in TvDeviceCallbackEventHandler: unknown event type %d\n", |             SampleUtil_Print | ||||||
|                 EventType ); |                 ( "Error in TvDeviceCallbackEventHandler: unknown event type %d\n", | ||||||
|  |                   EventType ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* Print a summary of the event received */ |     /* | ||||||
|  |        Print a summary of the event received  | ||||||
|  |      */ | ||||||
|     SampleUtil_PrintEvent( EventType, Event ); |     SampleUtil_PrintEvent( EventType, Event ); | ||||||
|  |  | ||||||
|     return 0; |     return ( 0 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1824,13 +1913,12 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceStop() | TvDeviceStop(  ) | ||||||
| { | { | ||||||
|     UpnpUnRegisterRootDevice( device_handle ); |     UpnpUnRegisterRootDevice( device_handle ); | ||||||
|     UpnpFinish(); |     UpnpFinish(  ); | ||||||
|     SampleUtil_Finish(); |     SampleUtil_Finish(  ); | ||||||
|     ithread_mutex_destroy( &TVDevMutex ); |     ithread_mutex_destroy( &TVDevMutex ); | ||||||
|  |  | ||||||
|     return UPNP_E_SUCCESS; |     return UPNP_E_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1863,85 +1951,81 @@ TvDeviceStart( char *ip_address, | |||||||
|                print_string pfun ) |                print_string pfun ) | ||||||
| { | { | ||||||
|     int ret = UPNP_E_SUCCESS; |     int ret = UPNP_E_SUCCESS; | ||||||
|  |  | ||||||
|     char desc_doc_url[DESC_URL_SIZE]; |     char desc_doc_url[DESC_URL_SIZE]; | ||||||
|  |  | ||||||
|     ithread_mutex_init( &TVDevMutex, NULL ); |     ithread_mutex_init( &TVDevMutex, NULL ); | ||||||
|  |  | ||||||
|     SampleUtil_Initialize( pfun ); |     SampleUtil_Initialize( pfun ); | ||||||
|  |  | ||||||
|     SampleUtil_Print( |     SampleUtil_Print | ||||||
|         "Initializing UPnP Sdk with\n" |         ( "Initializing UPnP Sdk with \n \t ipaddress = %s port = %d\n", | ||||||
|         "\tipaddress = %s port = %u\n", |           ip_address, port ); | ||||||
|         ip_address ? ip_address : "{NULL}", |  | ||||||
| 	port); |  | ||||||
|  |  | ||||||
|     ret = UpnpInit( ip_address, port ); |     if( ( ret = UpnpInit( ip_address, port ) ) != UPNP_E_SUCCESS ) { | ||||||
|     if( ret != UPNP_E_SUCCESS ) { |  | ||||||
|         SampleUtil_Print( "Error with UpnpInit -- %d\n", ret ); |         SampleUtil_Print( "Error with UpnpInit -- %d\n", ret ); | ||||||
|         UpnpFinish(); |         UpnpFinish(  ); | ||||||
|         return ret; |         return ret; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ip_address = UpnpGetServerIpAddress(); |     if( ip_address == NULL ) { | ||||||
|     port = UpnpGetServerPort(); |         ip_address = UpnpGetServerIpAddress(  ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     SampleUtil_Print( |     if( port == 0 ) { | ||||||
|         "UPnP Initialized\n" |         port = UpnpGetServerPort(  ); | ||||||
|         "\tipaddress = %s port = %u\n", |     } | ||||||
|         ip_address ? ip_address : "{NULL}", |  | ||||||
| 	port); |  | ||||||
|  |  | ||||||
|     if( desc_doc_name == NULL ) { |     SampleUtil_Print( "UPnP Initialized\n \t ipaddress= %s port = %d\n", | ||||||
|  |                       ip_address, port ); | ||||||
|  |  | ||||||
|  |     if( desc_doc_name == NULL ) | ||||||
|         desc_doc_name = "tvcombodesc.xml"; |         desc_doc_name = "tvcombodesc.xml"; | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if( web_dir_path == NULL ) { |     if( web_dir_path == NULL ) | ||||||
|         web_dir_path = DEFAULT_WEB_DIR; |         web_dir_path = DEFAULT_WEB_DIR; | ||||||
|     } |  | ||||||
|  |  | ||||||
|     snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address, |     snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address, | ||||||
|               port, desc_doc_name ); |               port, desc_doc_name ); | ||||||
|  |  | ||||||
|     SampleUtil_Print( "Specifying the webserver root directory -- %s\n", |     SampleUtil_Print( "Specifying the webserver root directory -- %s\n", | ||||||
|                       web_dir_path ); |                       web_dir_path ); | ||||||
|     ret = UpnpSetWebServerRootDir( web_dir_path ); |     if( ( ret = | ||||||
|     if( ret != UPNP_E_SUCCESS ) { |           UpnpSetWebServerRootDir( web_dir_path ) ) != UPNP_E_SUCCESS ) { | ||||||
|         SampleUtil_Print( "Error specifying webserver root directory -- %s: %d\n", |         SampleUtil_Print | ||||||
|  |             ( "Error specifying webserver root directory -- %s: %d\n", | ||||||
|               web_dir_path, ret ); |               web_dir_path, ret ); | ||||||
|         UpnpFinish(); |         UpnpFinish(  ); | ||||||
|  |  | ||||||
|         return ret; |         return ret; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     SampleUtil_Print( |     SampleUtil_Print | ||||||
|         "Registering the RootDevice\n" |         ( "Registering the RootDevice\n\t with desc_doc_url: %s\n", | ||||||
|         "\t with desc_doc_url: %s\n", |           desc_doc_url ); | ||||||
|         desc_doc_url ); |  | ||||||
|  |  | ||||||
|     ret = UpnpRegisterRootDevice( desc_doc_url, TvDeviceCallbackEventHandler, |     if( ( ret = UpnpRegisterRootDevice( desc_doc_url, | ||||||
|         &device_handle, &device_handle ); |                                         TvDeviceCallbackEventHandler, | ||||||
|     if( ret != UPNP_E_SUCCESS ) { |                                         &device_handle, &device_handle ) ) | ||||||
|  |         != UPNP_E_SUCCESS ) { | ||||||
|         SampleUtil_Print( "Error registering the rootdevice : %d\n", ret ); |         SampleUtil_Print( "Error registering the rootdevice : %d\n", ret ); | ||||||
|         UpnpFinish(); |         UpnpFinish(  ); | ||||||
|  |  | ||||||
|         return ret; |         return ret; | ||||||
|     } else { |     } else { | ||||||
|         SampleUtil_Print( |         SampleUtil_Print( "RootDevice Registered\n" ); | ||||||
|             "RootDevice Registered\n" |  | ||||||
|             "Initializing State Table\n"); |  | ||||||
|         TvDeviceStateTableInit( desc_doc_url ); |  | ||||||
|         SampleUtil_Print("State Table Initialized\n"); |  | ||||||
|         ret = UpnpSendAdvertisement( device_handle, default_advr_expire ); |  | ||||||
|         if( ret != UPNP_E_SUCCESS ) { |  | ||||||
|             SampleUtil_Print( "Error sending advertisements : %d\n", ret ); |  | ||||||
|             UpnpFinish(); |  | ||||||
|  |  | ||||||
|  |         SampleUtil_Print( "Initializing State Table\n" ); | ||||||
|  |         TvDeviceStateTableInit( desc_doc_url ); | ||||||
|  |         SampleUtil_Print( "State Table Initialized\n" ); | ||||||
|  |  | ||||||
|  |         if( ( ret = | ||||||
|  |               UpnpSendAdvertisement( device_handle, default_advr_expire ) ) | ||||||
|  |             != UPNP_E_SUCCESS ) { | ||||||
|  |             SampleUtil_Print( "Error sending advertisements : %d\n", ret ); | ||||||
|  |             UpnpFinish(  ); | ||||||
|             return ret; |             return ret; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         SampleUtil_Print("Advertisements Sent\n"); |         SampleUtil_Print( "Advertisements Sent\n" ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return UPNP_E_SUCCESS; |     return UPNP_E_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -41,9 +41,7 @@ extern "C" { | |||||||
|  |  | ||||||
| #include "ithread.h" | #include "ithread.h" | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #ifndef WIN32 |  | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #endif |  | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include "upnp.h" | #include "upnp.h" | ||||||
| #include "sample_util.h" | #include "sample_util.h" | ||||||
|   | |||||||
| @@ -1,40 +1,37 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "sample_util.h" |  | ||||||
| #include "upnp_tv_ctrlpt.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | #include "sample_util.h" | ||||||
|  | #include "upnp_tv_ctrlpt.h" | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -127,72 +124,108 @@ TvCtrlPointPrintLongHelp( void ) | |||||||
|     SampleUtil_Print( "* TV Control Point Help Info *" ); |     SampleUtil_Print( "* TV Control Point Help Info *" ); | ||||||
|     SampleUtil_Print( "******************************" ); |     SampleUtil_Print( "******************************" ); | ||||||
|     SampleUtil_Print( "" ); |     SampleUtil_Print( "" ); | ||||||
|     SampleUtil_Print( "This sample control point application automatically searches" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "for and subscribes to the services of television device emulator" ); |         ( "This sample control point application automatically searches" ); | ||||||
|     SampleUtil_Print( "devices, described in the tvdevicedesc.xml description document." ); |     SampleUtil_Print | ||||||
|  |         ( "for and subscribes to the services of television device emulator" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "devices, described in the tvdevicedesc.xml description document." ); | ||||||
|     SampleUtil_Print( "" ); |     SampleUtil_Print( "" ); | ||||||
|     SampleUtil_Print( "Commands:" ); |     SampleUtil_Print( "Commands:" ); | ||||||
|     SampleUtil_Print( "  Help" ); |     SampleUtil_Print( "  Help" ); | ||||||
|     SampleUtil_Print( "       Print this help info." ); |     SampleUtil_Print( "       Print this help info." ); | ||||||
|     SampleUtil_Print( "  ListDev" ); |     SampleUtil_Print( "  ListDev" ); | ||||||
|     SampleUtil_Print( "       Print the current list of TV Device Emulators that this" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         control point is aware of.  Each device is preceded by a" ); |         ( "       Print the current list of TV Device Emulators that this" ); | ||||||
|     SampleUtil_Print( "         device number which corresponds to the devnum argument of" ); |     SampleUtil_Print | ||||||
|  |         ( "         control point is aware of.  Each device is preceded by a" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         device number which corresponds to the devnum argument of" ); | ||||||
|     SampleUtil_Print( "         commands listed below." ); |     SampleUtil_Print( "         commands listed below." ); | ||||||
|     SampleUtil_Print( "  Refresh" ); |     SampleUtil_Print( "  Refresh" ); | ||||||
|     SampleUtil_Print( "       Delete all of the devices from the device list and issue new" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         search request to rebuild the list from scratch." ); |         ( "       Delete all of the devices from the device list and issue new" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         search request to rebuild the list from scratch." ); | ||||||
|     SampleUtil_Print( "  PrintDev       <devnum>" ); |     SampleUtil_Print( "  PrintDev       <devnum>" ); | ||||||
|     SampleUtil_Print( "       Print the state table for the device <devnum>." ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         e.g., 'PrintDev 1' prints the state table for the first" ); |         ( "       Print the state table for the device <devnum>." ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         e.g., 'PrintDev 1' prints the state table for the first" ); | ||||||
|     SampleUtil_Print( "         device in the device list." ); |     SampleUtil_Print( "         device in the device list." ); | ||||||
|     SampleUtil_Print( "  PowerOn        <devnum>" ); |     SampleUtil_Print( "  PowerOn        <devnum>" ); | ||||||
|     SampleUtil_Print( "       Sends the PowerOn action to the Control Service of" ); |     SampleUtil_Print | ||||||
|  |         ( "       Sends the PowerOn action to the Control Service of" ); | ||||||
|     SampleUtil_Print( "         device <devnum>." ); |     SampleUtil_Print( "         device <devnum>." ); | ||||||
|     SampleUtil_Print( "  PowerOff       <devnum>" ); |     SampleUtil_Print( "  PowerOff       <devnum>" ); | ||||||
|     SampleUtil_Print( "       Sends the PowerOff action to the Control Service of" ); |     SampleUtil_Print | ||||||
|  |         ( "       Sends the PowerOff action to the Control Service of" ); | ||||||
|     SampleUtil_Print( "         device <devnum>." ); |     SampleUtil_Print( "         device <devnum>." ); | ||||||
|     SampleUtil_Print( "  SetChannel     <devnum> <channel>" ); |     SampleUtil_Print( "  SetChannel     <devnum> <channel>" ); | ||||||
|     SampleUtil_Print( "       Sends the SetChannel action to the Control Service of" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         device <devnum>, requesting the channel to be changed" ); |         ( "       Sends the SetChannel action to the Control Service of" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         device <devnum>, requesting the channel to be changed" ); | ||||||
|     SampleUtil_Print( "         to <channel>." ); |     SampleUtil_Print( "         to <channel>." ); | ||||||
|     SampleUtil_Print( "  SetVolume      <devnum> <volume>" ); |     SampleUtil_Print( "  SetVolume      <devnum> <volume>" ); | ||||||
|     SampleUtil_Print( "       Sends the SetVolume action to the Control Service of" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         device <devnum>, requesting the volume to be changed" ); |         ( "       Sends the SetVolume action to the Control Service of" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         device <devnum>, requesting the volume to be changed" ); | ||||||
|     SampleUtil_Print( "         to <volume>." ); |     SampleUtil_Print( "         to <volume>." ); | ||||||
|     SampleUtil_Print( "  SetColor       <devnum> <color>" ); |     SampleUtil_Print( "  SetColor       <devnum> <color>" ); | ||||||
|     SampleUtil_Print( "       Sends the SetColor action to the Control Service of" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         device <devnum>, requesting the color to be changed" ); |         ( "       Sends the SetColor action to the Control Service of" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         device <devnum>, requesting the color to be changed" ); | ||||||
|     SampleUtil_Print( "         to <color>." ); |     SampleUtil_Print( "         to <color>." ); | ||||||
|     SampleUtil_Print( "  SetTint        <devnum> <tint>" ); |     SampleUtil_Print( "  SetTint        <devnum> <tint>" ); | ||||||
|     SampleUtil_Print( "       Sends the SetTint action to the Control Service of" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         device <devnum>, requesting the tint to be changed" ); |         ( "       Sends the SetTint action to the Control Service of" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         device <devnum>, requesting the tint to be changed" ); | ||||||
|     SampleUtil_Print( "         to <tint>." ); |     SampleUtil_Print( "         to <tint>." ); | ||||||
|     SampleUtil_Print( "  SetContrast    <devnum> <contrast>" ); |     SampleUtil_Print( "  SetContrast    <devnum> <contrast>" ); | ||||||
|     SampleUtil_Print( "       Sends the SetContrast action to the Control Service of" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         device <devnum>, requesting the contrast to be changed" ); |         ( "       Sends the SetContrast action to the Control Service of" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         device <devnum>, requesting the contrast to be changed" ); | ||||||
|     SampleUtil_Print( "         to <contrast>." ); |     SampleUtil_Print( "         to <contrast>." ); | ||||||
|     SampleUtil_Print( "  SetBrightness  <devnum> <brightness>" ); |     SampleUtil_Print( "  SetBrightness  <devnum> <brightness>" ); | ||||||
|     SampleUtil_Print( "       Sends the SetBrightness action to the Control Service of" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         device <devnum>, requesting the brightness to be changed" ); |         ( "       Sends the SetBrightness action to the Control Service of" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         device <devnum>, requesting the brightness to be changed" ); | ||||||
|     SampleUtil_Print( "         to <brightness>." ); |     SampleUtil_Print( "         to <brightness>." ); | ||||||
|     SampleUtil_Print( "  CtrlAction     <devnum> <action>" ); |     SampleUtil_Print( "  CtrlAction     <devnum> <action>" ); | ||||||
|     SampleUtil_Print( "       Sends an action request specified by the string <action>" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         to the Control Service of device <devnum>.  This command" ); |         ( "       Sends an action request specified by the string <action>" ); | ||||||
|     SampleUtil_Print( "         only works for actions that have no arguments." ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         (e.g., \"CtrlAction 1 IncreaseChannel\")" ); |         ( "         to the Control Service of device <devnum>.  This command" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         only works for actions that have no arguments." ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         (e.g., \"CtrlAction 1 IncreaseChannel\")" ); | ||||||
|     SampleUtil_Print( "  PictAction     <devnum> <action>" ); |     SampleUtil_Print( "  PictAction     <devnum> <action>" ); | ||||||
|     SampleUtil_Print( "       Sends an action request specified by the string <action>" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         to the Picture Service of device <devnum>.  This command" ); |         ( "       Sends an action request specified by the string <action>" ); | ||||||
|     SampleUtil_Print( "         only works for actions that have no arguments." ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         (e.g., \"PictAction 1 DecreaseContrast\")" ); |         ( "         to the Picture Service of device <devnum>.  This command" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         only works for actions that have no arguments." ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         (e.g., \"PictAction 1 DecreaseContrast\")" ); | ||||||
|     SampleUtil_Print( "  CtrlGetVar     <devnum> <varname>" ); |     SampleUtil_Print( "  CtrlGetVar     <devnum> <varname>" ); | ||||||
|     SampleUtil_Print( "       Requests the value of a variable specified by the string <varname>" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         from the Control Service of device <devnum>." ); |         ( "       Requests the value of a variable specified by the string <varname>" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         from the Control Service of device <devnum>." ); | ||||||
|     SampleUtil_Print( "         (e.g., \"CtrlGetVar 1 Volume\")" ); |     SampleUtil_Print( "         (e.g., \"CtrlGetVar 1 Volume\")" ); | ||||||
|     SampleUtil_Print( "  PictGetVar     <devnum> <action>" ); |     SampleUtil_Print( "  PictGetVar     <devnum> <action>" ); | ||||||
|     SampleUtil_Print( "       Requests the value of a variable specified by the string <varname>" ); |     SampleUtil_Print | ||||||
|     SampleUtil_Print( "         from the Picture Service of device <devnum>." ); |         ( "       Requests the value of a variable specified by the string <varname>" ); | ||||||
|  |     SampleUtil_Print | ||||||
|  |         ( "         from the Picture Service of device <devnum>." ); | ||||||
|     SampleUtil_Print( "         (e.g., \"PictGetVar 1 Tint\")" ); |     SampleUtil_Print( "         (e.g., \"PictGetVar 1 Tint\")" ); | ||||||
|     SampleUtil_Print( "  Exit" ); |     SampleUtil_Print( "  Exit" ); | ||||||
|     SampleUtil_Print( "       Exits the control point application." ); |     SampleUtil_Print( "       Exits the control point application." ); | ||||||
| @@ -209,7 +242,7 @@ TvCtrlPointPrintLongHelp( void ) | |||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void | void | ||||||
| TvCtrlPointPrintCommands() | TvCtrlPointPrintCommands(  ) | ||||||
| { | { | ||||||
|     int i; |     int i; | ||||||
|     int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands ); |     int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands ); | ||||||
| @@ -288,11 +321,11 @@ TvCtrlPointProcessCommand( char *cmdline ) | |||||||
|  |  | ||||||
|     switch ( cmdnum ) { |     switch ( cmdnum ) { | ||||||
|         case PRTHELP: |         case PRTHELP: | ||||||
|             TvCtrlPointPrintShortHelp(); |             TvCtrlPointPrintShortHelp(  ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         case PRTFULLHELP: |         case PRTFULLHELP: | ||||||
|             TvCtrlPointPrintLongHelp(); |             TvCtrlPointPrintLongHelp(  ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         case POWON: |         case POWON: | ||||||
| @@ -378,15 +411,15 @@ TvCtrlPointProcessCommand( char *cmdline ) | |||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         case LSTDEV: |         case LSTDEV: | ||||||
|             TvCtrlPointPrintList(); |             TvCtrlPointPrintList(  ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         case REFRESH: |         case REFRESH: | ||||||
|             TvCtrlPointRefresh(); |             TvCtrlPointRefresh(  ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         case EXITCMD: |         case EXITCMD: | ||||||
|             rc = TvCtrlPointStop(); |             rc = TvCtrlPointStop(  ); | ||||||
|             exit( rc ); |             exit( rc ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
| @@ -401,29 +434,26 @@ TvCtrlPointProcessCommand( char *cmdline ) | |||||||
|     return TV_SUCCESS; |     return TV_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
| int main( int argc, char **argv ) | int | ||||||
|  | main( int argc, | ||||||
|  |       char **argv ) | ||||||
| { | { | ||||||
|     int rc; |     int rc; | ||||||
|     ithread_t cmdloop_thread; |     ithread_t cmdloop_thread; | ||||||
| #ifdef WIN32 |  | ||||||
| #else |  | ||||||
|     int sig; |     int sig; | ||||||
|     sigset_t sigs_to_catch; |     sigset_t sigs_to_catch; | ||||||
| #endif |  | ||||||
|     int code; |     int code; | ||||||
|  |  | ||||||
|  |  | ||||||
|     rc = TvCtrlPointStart( linux_print, NULL ); |     rc = TvCtrlPointStart( linux_print, NULL ); | ||||||
|     if( rc != TV_SUCCESS ) { |     if( rc != TV_SUCCESS ) { | ||||||
|         SampleUtil_Print( "Error starting UPnP TV Control Point" ); |         SampleUtil_Print( "Error starting UPnP TV Control Point" ); | ||||||
|         return rc; |         exit( rc ); | ||||||
|     } |     } | ||||||
|     /* start a command loop thread */ |     // start a command loop thread | ||||||
|     code = ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop, NULL ); |     code = | ||||||
|  |         ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop, | ||||||
|  |                         NULL ); | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
|     ithread_join(cmdloop_thread, NULL); |  | ||||||
| #else |  | ||||||
|     /* |     /* | ||||||
|        Catch Ctrl-C and properly shutdown  |        Catch Ctrl-C and properly shutdown  | ||||||
|      */ |      */ | ||||||
| @@ -431,11 +461,7 @@ int main( int argc, char **argv ) | |||||||
|     sigaddset( &sigs_to_catch, SIGINT ); |     sigaddset( &sigs_to_catch, SIGINT ); | ||||||
|     sigwait( &sigs_to_catch, &sig ); |     sigwait( &sigs_to_catch, &sig ); | ||||||
|  |  | ||||||
|     SampleUtil_Print( "Shutting down on signal %d...\n", sig ); |     SampleUtil_Print( "Shutting down on signal %d...", sig ); | ||||||
| #endif |     rc = TvCtrlPointStop(  ); | ||||||
|  |     exit( rc ); | ||||||
|     rc = TvCtrlPointStop(); |  | ||||||
|  |  | ||||||
|     return rc; |  | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,42 +1,37 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "upnp_tv_ctrlpt.h" | #include "upnp_tv_ctrlpt.h" | ||||||
|  |  | ||||||
|  | /* | ||||||
| #include "upnp.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|    Mutex for protecting the global device list |    Mutex for protecting the global device list | ||||||
|    in a multi-threaded, asynchronous environment. |    in a multi-threaded, asynchronous environment. | ||||||
|    All functions should lock this mutex before reading |    All functions should lock this mutex before reading | ||||||
| @@ -53,7 +48,7 @@ char *TvServiceType[] = { | |||||||
| }; | }; | ||||||
| char *TvServiceName[] = { "Control", "Picture" }; | char *TvServiceName[] = { "Control", "Picture" }; | ||||||
|  |  | ||||||
| /*! | /* | ||||||
|    Global arrays for storing variable names and counts for  |    Global arrays for storing variable names and counts for  | ||||||
|    TvControl and TvPicture services  |    TvControl and TvPicture services  | ||||||
|  */ |  */ | ||||||
| @@ -64,12 +59,12 @@ char *TvVarName[TV_SERVICE_SERVCOUNT][TV_MAXVARS] = { | |||||||
| char TvVarCount[TV_SERVICE_SERVCOUNT] = | char TvVarCount[TV_SERVICE_SERVCOUNT] = | ||||||
|     { TV_CONTROL_VARCOUNT, TV_PICTURE_VARCOUNT }; |     { TV_CONTROL_VARCOUNT, TV_PICTURE_VARCOUNT }; | ||||||
|  |  | ||||||
| /*! | /* | ||||||
|    Timeout to request during subscriptions  |    Timeout to request during subscriptions  | ||||||
|  */ |  */ | ||||||
| int default_timeout = 1801; | int default_timeout = 1801; | ||||||
|  |  | ||||||
| /*! | /* | ||||||
|    The first node in the global device list, or NULL if empty  |    The first node in the global device list, or NULL if empty  | ||||||
|  */ |  */ | ||||||
| struct TvDeviceNode *GlobalDeviceList = NULL; | struct TvDeviceNode *GlobalDeviceList = NULL; | ||||||
| @@ -144,10 +139,10 @@ TvCtrlPointDeleteNode( struct TvDeviceNode *node ) | |||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int | int | ||||||
| TvCtrlPointRemoveDevice(const char *UDN) | TvCtrlPointRemoveDevice( char *UDN ) | ||||||
| { | { | ||||||
|     struct TvDeviceNode *curdevnode; |     struct TvDeviceNode *curdevnode, | ||||||
|     struct TvDeviceNode *prevdevnode; |      *prevdevnode; | ||||||
|  |  | ||||||
|     ithread_mutex_lock( &DeviceListMutex ); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
| @@ -229,7 +224,7 @@ TvCtrlPointRefresh( void ) | |||||||
| { | { | ||||||
|     int rc; |     int rc; | ||||||
|  |  | ||||||
|     TvCtrlPointRemoveAll(); |     TvCtrlPointRemoveAll(  ); | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|        Search for all devices of type tvdevice version 1,  |        Search for all devices of type tvdevice version 1,  | ||||||
| @@ -544,7 +539,7 @@ TvCtrlPointGetDevice( int devnum, | |||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int | int | ||||||
| TvCtrlPointPrintList() | TvCtrlPointPrintList(  ) | ||||||
| { | { | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
|     int i = 0; |     int i = 0; | ||||||
| @@ -673,8 +668,8 @@ TvCtrlPointPrintDevice( int devnum ) | |||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void | void | ||||||
| TvCtrlPointAddDevice( IXML_Document *DescDoc, | TvCtrlPointAddDevice( IXML_Document * DescDoc, | ||||||
|                       const char *location, |                       char *location, | ||||||
|                       int expires ) |                       int expires ) | ||||||
| { | { | ||||||
|     char *deviceType = NULL; |     char *deviceType = NULL; | ||||||
| @@ -687,19 +682,20 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc, | |||||||
|     char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; |     char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; | ||||||
|     char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; |     char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; | ||||||
|     Upnp_SID eventSID[TV_SERVICE_SERVCOUNT]; |     Upnp_SID eventSID[TV_SERVICE_SERVCOUNT]; | ||||||
|     int TimeOut[TV_SERVICE_SERVCOUNT] = { |     int TimeOut[TV_SERVICE_SERVCOUNT] = | ||||||
|         default_timeout, |         { default_timeout, default_timeout }; | ||||||
|         default_timeout }; |  | ||||||
|     struct TvDeviceNode *deviceNode; |     struct TvDeviceNode *deviceNode; | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
|     int ret = 1; |     int ret = 1; | ||||||
|     int found = 0; |     int found = 0; | ||||||
|     int service; |     int service, | ||||||
|     int var; |       var; | ||||||
|  |  | ||||||
|     ithread_mutex_lock( &DeviceListMutex ); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
|     /* Read key elements from description document */ |     /* | ||||||
|  |        Read key elements from description document  | ||||||
|  |      */ | ||||||
|     UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" ); |     UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" ); | ||||||
|     deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" ); |     deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" ); | ||||||
|     friendlyName = |     friendlyName = | ||||||
| @@ -707,8 +703,9 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc, | |||||||
|     baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" ); |     baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" ); | ||||||
|     relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" ); |     relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" ); | ||||||
|  |  | ||||||
|     ret = UpnpResolveURL( |     ret = | ||||||
|         ( baseURL ? baseURL : location ), relURL, presURL); |         UpnpResolveURL( ( baseURL ? baseURL : location ), relURL, | ||||||
|  |                         presURL ); | ||||||
|  |  | ||||||
|     if( UPNP_E_SUCCESS != ret ) |     if( UPNP_E_SUCCESS != ret ) | ||||||
|         SampleUtil_Print( "Error generating presURL from %s + %s", baseURL, |         SampleUtil_Print( "Error generating presURL from %s + %s", baseURL, | ||||||
| @@ -942,36 +939,34 @@ TvStateUpdate( char *UDN, | |||||||
|  *   changes -- The DOM document representing the changes |  *   changes -- The DOM document representing the changes | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void TvCtrlPointHandleEvent( | void | ||||||
| 	const Upnp_SID sid, | TvCtrlPointHandleEvent( Upnp_SID sid, | ||||||
| 	int evntkey, |                         int evntkey, | ||||||
| 	IXML_Document *changes) |                         IXML_Document * changes ) | ||||||
| { | { | ||||||
| 	struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
| 	int service; |     int service; | ||||||
|  |  | ||||||
| 	ithread_mutex_lock(&DeviceListMutex); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
| 	tmpdevnode = GlobalDeviceList; |     tmpdevnode = GlobalDeviceList; | ||||||
| 	while (tmpdevnode) { |     while( tmpdevnode ) { | ||||||
| 		for (service = 0; service < TV_SERVICE_SERVCOUNT; ++service) { |         for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) { | ||||||
| 			if (strcmp(tmpdevnode->device.TvService[service].SID, sid) == 0) { |             if( strcmp( tmpdevnode->device.TvService[service].SID, sid ) == | ||||||
| 				SampleUtil_Print("Received Tv %s Event: %d for SID %s", |                 0 ) { | ||||||
| 					TvServiceName[service], |                 SampleUtil_Print( "Received Tv %s Event: %d for SID %s", | ||||||
| 					evntkey, |                                   TvServiceName[service], evntkey, sid ); | ||||||
| 					sid); |  | ||||||
| 				TvStateUpdate( |  | ||||||
| 					tmpdevnode->device.UDN, |  | ||||||
| 					service, |  | ||||||
| 					changes, |  | ||||||
| 					(char **)&tmpdevnode->device.TvService[service].VariableStrVal); |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		tmpdevnode = tmpdevnode->next; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ithread_mutex_unlock(&DeviceListMutex); |                 TvStateUpdate( tmpdevnode->device.UDN, service, changes, | ||||||
|  |                                ( char ** )&tmpdevnode->device. | ||||||
|  |                                TvService[service].VariableStrVal ); | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         tmpdevnode = tmpdevnode->next; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ithread_mutex_unlock( &DeviceListMutex ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
| @@ -988,10 +983,10 @@ void TvCtrlPointHandleEvent( | |||||||
|  *   timeout  -- The new timeout for the subscription |  *   timeout  -- The new timeout for the subscription | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| void TvCtrlPointHandleSubscribeUpdate( | void | ||||||
| 	const char *eventURL, | TvCtrlPointHandleSubscribeUpdate( char *eventURL, | ||||||
| 	const Upnp_SID sid, |                                   Upnp_SID sid, | ||||||
| 	int timeout) |                                   int timeout ) | ||||||
| { | { | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
|     int service; |     int service; | ||||||
| @@ -1020,9 +1015,9 @@ void TvCtrlPointHandleSubscribeUpdate( | |||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| TvCtrlPointHandleGetVar( const char *controlURL, | TvCtrlPointHandleGetVar( char *controlURL, | ||||||
|                          const char *varName, |                          char *varName, | ||||||
|                          const DOMString varValue ) |                          DOMString varValue ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     struct TvDeviceNode *tmpdevnode; |     struct TvDeviceNode *tmpdevnode; | ||||||
| @@ -1031,11 +1026,14 @@ TvCtrlPointHandleGetVar( const char *controlURL, | |||||||
|     ithread_mutex_lock( &DeviceListMutex ); |     ithread_mutex_lock( &DeviceListMutex ); | ||||||
|  |  | ||||||
|     tmpdevnode = GlobalDeviceList; |     tmpdevnode = GlobalDeviceList; | ||||||
|     while (tmpdevnode) { |     while( tmpdevnode ) { | ||||||
|         for (service = 0; service < TV_SERVICE_SERVCOUNT; service++) { |         for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) { | ||||||
|             if (strcmp(tmpdevnode->device.TvService[service].ControlURL, controlURL ) == 0 ) { |             if( strcmp | ||||||
|                 SampleUtil_StateUpdate( |                 ( tmpdevnode->device.TvService[service].ControlURL, | ||||||
|                     varName, varValue, tmpdevnode->device.UDN, GET_VAR_COMPLETE ); |                   controlURL ) == 0 ) { | ||||||
|  |                 SampleUtil_StateUpdate( varName, varValue, | ||||||
|  |                                         tmpdevnode->device.UDN, | ||||||
|  |                                         GET_VAR_COMPLETE ); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -1059,152 +1057,186 @@ TvCtrlPointHandleGetVar( const char *controlURL, | |||||||
|  *   Cookie -- Optional data specified during callback registration |  *   Cookie -- Optional data specified during callback registration | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int TvCtrlPointCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Cookie) | int | ||||||
|  | TvCtrlPointCallbackEventHandler( Upnp_EventType EventType, | ||||||
|  |                                  void *Event, | ||||||
|  |                                  void *Cookie ) | ||||||
| { | { | ||||||
| 	/*int errCode = 0;*/ |     SampleUtil_PrintEvent( EventType, Event ); | ||||||
|  |  | ||||||
| 	SampleUtil_PrintEvent(EventType, Event); |     switch ( EventType ) { | ||||||
| 	switch ( EventType ) { |             /* | ||||||
| 	/* SSDP Stuff */ |                SSDP Stuff  | ||||||
| 	case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: |              */ | ||||||
| 	case UPNP_DISCOVERY_SEARCH_RESULT: { |         case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: | ||||||
| 		struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event; |         case UPNP_DISCOVERY_SEARCH_RESULT: | ||||||
| 		IXML_Document *DescDoc = NULL; |             { | ||||||
| 		int ret; |                 struct Upnp_Discovery *d_event = | ||||||
|  |                     ( struct Upnp_Discovery * )Event; | ||||||
|  |                 IXML_Document *DescDoc = NULL; | ||||||
|  |                 int ret; | ||||||
|  |  | ||||||
| 		if (d_event->ErrCode != UPNP_E_SUCCESS) { |                 if( d_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
| 			SampleUtil_Print( |                     SampleUtil_Print( "Error in Discovery Callback -- %d", | ||||||
| 				"Error in Discovery Callback -- %d", d_event->ErrCode); |                                       d_event->ErrCode ); | ||||||
| 		} |                 } | ||||||
|  |  | ||||||
| 		ret = UpnpDownloadXmlDoc(d_event->Location, &DescDoc); |                 if( ( ret = | ||||||
| 		if (ret != UPNP_E_SUCCESS) { |                       UpnpDownloadXmlDoc( d_event->Location, | ||||||
| 			SampleUtil_Print( |                                           &DescDoc ) ) != | ||||||
| 				"Error obtaining device description from %s -- error = %d", |                     UPNP_E_SUCCESS ) { | ||||||
| 				d_event->Location, ret ); |                     SampleUtil_Print | ||||||
| 		} else { |                         ( "Error obtaining device description from %s -- error = %d", | ||||||
| 			TvCtrlPointAddDevice( |                           d_event->Location, ret ); | ||||||
| 				DescDoc, d_event->Location, d_event->Expires); |                 } else { | ||||||
| 		} |                     TvCtrlPointAddDevice( DescDoc, d_event->Location, | ||||||
|  |                                           d_event->Expires ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
| 		if( DescDoc ) { |                 if( DescDoc ) | ||||||
| 			ixmlDocument_free(DescDoc); |                     ixmlDocument_free( DescDoc ); | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		TvCtrlPointPrintList(); |                 TvCtrlPointPrintList(  ); | ||||||
| 		break; |                 break; | ||||||
| 	} |             } | ||||||
|  |  | ||||||
| 	case UPNP_DISCOVERY_SEARCH_TIMEOUT: |         case UPNP_DISCOVERY_SEARCH_TIMEOUT: | ||||||
| 		/* Nothing to do here... */ |             /* | ||||||
| 		break; |                Nothing to do here...  | ||||||
|  |              */ | ||||||
|  |             break; | ||||||
|  |  | ||||||
| 	case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: { |         case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: | ||||||
| 		struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event; |             { | ||||||
|  |                 struct Upnp_Discovery *d_event = | ||||||
|  |                     ( struct Upnp_Discovery * )Event; | ||||||
|  |  | ||||||
| 		if (d_event->ErrCode != UPNP_E_SUCCESS) { |                 if( d_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
| 			SampleUtil_Print( |                     SampleUtil_Print | ||||||
| 				"Error in Discovery ByeBye Callback -- %d", d_event->ErrCode); |                         ( "Error in Discovery ByeBye Callback -- %d", | ||||||
| 		} |                           d_event->ErrCode ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
| 		SampleUtil_Print("Received ByeBye for Device: %s", d_event->DeviceId); |                 SampleUtil_Print( "Received ByeBye for Device: %s", | ||||||
| 		TvCtrlPointRemoveDevice(d_event->DeviceId); |                                   d_event->DeviceId ); | ||||||
|  |                 TvCtrlPointRemoveDevice( d_event->DeviceId ); | ||||||
|  |  | ||||||
| 		SampleUtil_Print("After byebye:"); |                 SampleUtil_Print( "After byebye:" ); | ||||||
| 		TvCtrlPointPrintList(); |                 TvCtrlPointPrintList(  ); | ||||||
|  |  | ||||||
| 		break; |                 break; | ||||||
| 	} |             } | ||||||
| 	/* SOAP Stuff */ |  | ||||||
| 	case UPNP_CONTROL_ACTION_COMPLETE: { |  | ||||||
| 		struct Upnp_Action_Complete *a_event = (struct Upnp_Action_Complete *)Event; |  | ||||||
|  |  | ||||||
| 		if (a_event->ErrCode != UPNP_E_SUCCESS) { |             /* | ||||||
| 			SampleUtil_Print( |                SOAP Stuff  | ||||||
| 				"Error in  Action Complete Callback -- %d", |              */ | ||||||
| 				a_event->ErrCode); |         case UPNP_CONTROL_ACTION_COMPLETE: | ||||||
| 		} |             { | ||||||
|  |                 struct Upnp_Action_Complete *a_event = | ||||||
|  |                     ( struct Upnp_Action_Complete * )Event; | ||||||
|  |  | ||||||
| 		/* No need for any processing here, just print out results. |                 if( a_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
| 		 * Service state table updates are handled by events. */ |                     SampleUtil_Print | ||||||
|  |                         ( "Error in  Action Complete Callback -- %d", | ||||||
|  |                           a_event->ErrCode ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
| 		break; |                 /* | ||||||
| 	} |                    No need for any processing here, just print out results.  Service state | ||||||
| 	case UPNP_CONTROL_GET_VAR_COMPLETE: { |                    table updates are handled by events.  | ||||||
| 		struct Upnp_State_Var_Complete *sv_event = (struct Upnp_State_Var_Complete *)Event; |                  */ | ||||||
|  |  | ||||||
| 		if (sv_event->ErrCode != UPNP_E_SUCCESS) { |                 break; | ||||||
| 			SampleUtil_Print( |             } | ||||||
| 				"Error in Get Var Complete Callback -- %d", |  | ||||||
| 				sv_event->ErrCode); |  | ||||||
| 		} else { |  | ||||||
| 			TvCtrlPointHandleGetVar( |  | ||||||
| 				sv_event->CtrlUrl, |  | ||||||
| 				sv_event->StateVarName, |  | ||||||
| 				sv_event->CurrentVal); |  | ||||||
| 		} |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	/* GENA Stuff */ |  | ||||||
| 	case UPNP_EVENT_RECEIVED: { |  | ||||||
| 		struct Upnp_Event *e_event = (struct Upnp_Event *)Event; |  | ||||||
|  |  | ||||||
| 		TvCtrlPointHandleEvent( |         case UPNP_CONTROL_GET_VAR_COMPLETE: | ||||||
| 			e_event->Sid, |             { | ||||||
| 			e_event->EventKey, |                 struct Upnp_State_Var_Complete *sv_event = | ||||||
| 			e_event->ChangedVariables); |                     ( struct Upnp_State_Var_Complete * )Event; | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	case UPNP_EVENT_SUBSCRIBE_COMPLETE: |  | ||||||
| 	case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: |  | ||||||
| 	case UPNP_EVENT_RENEWAL_COMPLETE: { |  | ||||||
| 		struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)Event; |  | ||||||
|  |  | ||||||
| 		if (es_event->ErrCode != UPNP_E_SUCCESS) { |                 if( sv_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
| 			SampleUtil_Print( |                     SampleUtil_Print | ||||||
| 				"Error in Event Subscribe Callback -- %d", |                         ( "Error in Get Var Complete Callback -- %d", | ||||||
| 				es_event->ErrCode); |                           sv_event->ErrCode ); | ||||||
| 		} else { |                 } else { | ||||||
| 			TvCtrlPointHandleSubscribeUpdate( |                     TvCtrlPointHandleGetVar( sv_event->CtrlUrl, | ||||||
| 				es_event->PublisherUrl, |                                              sv_event->StateVarName, | ||||||
| 				es_event->Sid, |                                              sv_event->CurrentVal ); | ||||||
| 				es_event->TimeOut); |                 } | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		break; |                 break; | ||||||
| 	} |             } | ||||||
| 	case UPNP_EVENT_AUTORENEWAL_FAILED: |  | ||||||
| 	case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { |  | ||||||
| 		struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)Event; |  | ||||||
| 		int TimeOut = default_timeout; |  | ||||||
| 		Upnp_SID newSID; |  | ||||||
| 		int ret; |  | ||||||
|  |  | ||||||
| 		ret = UpnpSubscribe( |             /* | ||||||
| 			ctrlpt_handle, |                GENA Stuff  | ||||||
| 			es_event->PublisherUrl, |              */ | ||||||
| 			&TimeOut, |         case UPNP_EVENT_RECEIVED: | ||||||
| 			newSID); |             { | ||||||
|  |                 struct Upnp_Event *e_event = ( struct Upnp_Event * )Event; | ||||||
|  |  | ||||||
| 		if (ret == UPNP_E_SUCCESS) { |                 TvCtrlPointHandleEvent( e_event->Sid, e_event->EventKey, | ||||||
| 			SampleUtil_Print("Subscribed to EventURL with SID=%s", newSID); |                                         e_event->ChangedVariables ); | ||||||
| 			TvCtrlPointHandleSubscribeUpdate( |                 break; | ||||||
| 				es_event->PublisherUrl, |             } | ||||||
| 				newSID, |  | ||||||
| 				TimeOut); |  | ||||||
| 		} else { |  | ||||||
| 			SampleUtil_Print("Error Subscribing to EventURL -- %d", ret); |  | ||||||
| 		} |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
| 	/* ignore these cases, since this is not a device */ |  | ||||||
| 	case UPNP_EVENT_SUBSCRIPTION_REQUEST: |  | ||||||
| 	case UPNP_CONTROL_GET_VAR_REQUEST: |  | ||||||
| 	case UPNP_CONTROL_ACTION_REQUEST: |  | ||||||
| 		break; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |         case UPNP_EVENT_SUBSCRIBE_COMPLETE: | ||||||
|  |         case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: | ||||||
|  |         case UPNP_EVENT_RENEWAL_COMPLETE: | ||||||
|  |             { | ||||||
|  |                 struct Upnp_Event_Subscribe *es_event = | ||||||
|  |                     ( struct Upnp_Event_Subscribe * )Event; | ||||||
|  |  | ||||||
|  |                 if( es_event->ErrCode != UPNP_E_SUCCESS ) { | ||||||
|  |                     SampleUtil_Print | ||||||
|  |                         ( "Error in Event Subscribe Callback -- %d", | ||||||
|  |                           es_event->ErrCode ); | ||||||
|  |                 } else { | ||||||
|  |                     TvCtrlPointHandleSubscribeUpdate( es_event-> | ||||||
|  |                                                       PublisherUrl, | ||||||
|  |                                                       es_event->Sid, | ||||||
|  |                                                       es_event->TimeOut ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         case UPNP_EVENT_AUTORENEWAL_FAILED: | ||||||
|  |         case UPNP_EVENT_SUBSCRIPTION_EXPIRED: | ||||||
|  |             { | ||||||
|  |                 int TimeOut = default_timeout; | ||||||
|  |                 Upnp_SID newSID; | ||||||
|  |                 int ret; | ||||||
|  |  | ||||||
|  |                 struct Upnp_Event_Subscribe *es_event = | ||||||
|  |                     ( struct Upnp_Event_Subscribe * )Event; | ||||||
|  |  | ||||||
|  |                 ret = | ||||||
|  |                     UpnpSubscribe( ctrlpt_handle, es_event->PublisherUrl, | ||||||
|  |                                    &TimeOut, newSID ); | ||||||
|  |  | ||||||
|  |                 if( ret == UPNP_E_SUCCESS ) { | ||||||
|  |                     SampleUtil_Print( "Subscribed to EventURL with SID=%s", | ||||||
|  |                                       newSID ); | ||||||
|  |                     TvCtrlPointHandleSubscribeUpdate( es_event-> | ||||||
|  |                                                       PublisherUrl, newSID, | ||||||
|  |                                                       TimeOut ); | ||||||
|  |                 } else { | ||||||
|  |                     SampleUtil_Print | ||||||
|  |                         ( "Error Subscribing to EventURL -- %d", ret ); | ||||||
|  |                 } | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             /* | ||||||
|  |                ignore these cases, since this is not a device  | ||||||
|  |              */ | ||||||
|  |         case UPNP_EVENT_SUBSCRIPTION_REQUEST: | ||||||
|  |         case UPNP_CONTROL_GET_VAR_REQUEST: | ||||||
|  |         case UPNP_CONTROL_ACTION_REQUEST: | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| /******************************************************************************** | /******************************************************************************** | ||||||
| @@ -1288,12 +1320,12 @@ TvCtrlPointVerifyTimeouts( int incr ) | |||||||
|  *    None |  *    None | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| static int TvCtrlPointTimerLoopRun = 1; | void * | ||||||
| void *TvCtrlPointTimerLoop(void *args) | TvCtrlPointTimerLoop( void *args ) | ||||||
| { | { | ||||||
|     int incr = 30;              // how often to verify the timeouts, in seconds |     int incr = 30;              // how often to verify the timeouts, in seconds | ||||||
|  |  | ||||||
|     while (TvCtrlPointTimerLoopRun) { |     while( 1 ) { | ||||||
|         isleep( incr ); |         isleep( incr ); | ||||||
|         TvCtrlPointVerifyTimeouts( incr ); |         TvCtrlPointVerifyTimeouts( incr ); | ||||||
|     } |     } | ||||||
| @@ -1316,72 +1348,62 @@ void *TvCtrlPointTimerLoop(void *args) | |||||||
|  *		TV_SUCCESS if everything went well, else TV_ERROR |  *		TV_SUCCESS if everything went well, else TV_ERROR | ||||||
|  * |  * | ||||||
|  ********************************************************************************/ |  ********************************************************************************/ | ||||||
| int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionPtr) | int | ||||||
|  | TvCtrlPointStart( print_string printFunctionPtr, | ||||||
|  |                   state_update updateFunctionPtr ) | ||||||
| { | { | ||||||
| 	ithread_t timer_thread; |     ithread_t timer_thread; | ||||||
| 	int rc; |     int rc; | ||||||
| 	unsigned short port = 0; |     short int port = 0; | ||||||
| 	char *ip_address = NULL; |     char *ip_address = NULL; | ||||||
|  |  | ||||||
| 	SampleUtil_Initialize(printFunctionPtr); |     SampleUtil_Initialize( printFunctionPtr ); | ||||||
| 	SampleUtil_RegisterUpdateFunction(updateFunctionPtr); |     SampleUtil_RegisterUpdateFunction( updateFunctionPtr ); | ||||||
|  |  | ||||||
| 	ithread_mutex_init(&DeviceListMutex, 0); |     ithread_mutex_init( &DeviceListMutex, 0 ); | ||||||
|  |  | ||||||
| 	SampleUtil_Print( |     SampleUtil_Print( "Intializing UPnP with ipaddress=%s port=%d", | ||||||
| 		"Initializing UPnP Sdk with\n" |                       ip_address, port ); | ||||||
| 		"\tipaddress = %s port = %u\n", |     rc = UpnpInit( ip_address, port ); | ||||||
| 		ip_address ? ip_address : "{NULL}", |     if( UPNP_E_SUCCESS != rc ) { | ||||||
| 		port); |         SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc ); | ||||||
|  |         UpnpFinish(  ); | ||||||
|  |         return TV_ERROR; | ||||||
|  |     } | ||||||
|  |  | ||||||
| 	rc = UpnpInit(ip_address, port); |     if( NULL == ip_address ) | ||||||
| 	if (rc != UPNP_E_SUCCESS) { |         ip_address = UpnpGetServerIpAddress(  ); | ||||||
| 		SampleUtil_Print("WinCEStart: UpnpInit() Error: %d", rc); |     if( 0 == port ) | ||||||
| 		UpnpFinish(); |         port = UpnpGetServerPort(  ); | ||||||
| 		return TV_ERROR; |  | ||||||
| 	} |  | ||||||
| 	if (!ip_address) { |  | ||||||
| 		ip_address = UpnpGetServerIpAddress(); |  | ||||||
| 	} |  | ||||||
| 	if (!port) { |  | ||||||
| 		port = UpnpGetServerPort(); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	SampleUtil_Print( |     SampleUtil_Print( "UPnP Initialized (%s:%d)", ip_address, port ); | ||||||
| 		"UPnP Initialized\n" |  | ||||||
| 		"\tipaddress = %s port = %u\n", |  | ||||||
| 		ip_address ? ip_address : "{NULL}", |  | ||||||
| 		port); |  | ||||||
|  |  | ||||||
| 	SampleUtil_Print("Registering Control Point"); |     SampleUtil_Print( "Registering Control Point" ); | ||||||
| 	rc = UpnpRegisterClient(TvCtrlPointCallbackEventHandler, |     rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler, | ||||||
| 		&ctrlpt_handle, &ctrlpt_handle); |                              &ctrlpt_handle, &ctrlpt_handle ); | ||||||
| 	if (rc != UPNP_E_SUCCESS) { |     if( UPNP_E_SUCCESS != rc ) { | ||||||
| 		SampleUtil_Print( "Error registering CP: %d", rc ); |         SampleUtil_Print( "Error registering CP: %d", rc ); | ||||||
| 		UpnpFinish(); |         UpnpFinish(  ); | ||||||
|  |         return TV_ERROR; | ||||||
|  |     } | ||||||
|  |  | ||||||
| 		return TV_ERROR; |     SampleUtil_Print( "Control Point Registered" ); | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	SampleUtil_Print("Control Point Registered"); |     TvCtrlPointRefresh(  ); | ||||||
|  |  | ||||||
| 	TvCtrlPointRefresh(); |     // start a timer thread | ||||||
|  |     ithread_create( &timer_thread, NULL, TvCtrlPointTimerLoop, NULL ); | ||||||
|  |  | ||||||
| 	/* start a timer thread */ |     return TV_SUCCESS; | ||||||
| 	ithread_create(&timer_thread, NULL, TvCtrlPointTimerLoop, NULL); |  | ||||||
| 	ithread_detach(timer_thread); |  | ||||||
|  |  | ||||||
| 	return TV_SUCCESS; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| int TvCtrlPointStop(void) | int | ||||||
|  | TvCtrlPointStop( void ) | ||||||
| { | { | ||||||
| 	TvCtrlPointTimerLoopRun = 0; |     TvCtrlPointRemoveAll(  ); | ||||||
| 	TvCtrlPointRemoveAll(); |     UpnpUnRegisterClient( ctrlpt_handle ); | ||||||
| 	UpnpUnRegisterClient( ctrlpt_handle ); |     UpnpFinish(  ); | ||||||
| 	UpnpFinish(); |     SampleUtil_Finish(  ); | ||||||
| 	SampleUtil_Finish(); |  | ||||||
|  |  | ||||||
| 	return TV_SUCCESS; |     return TV_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,65 +1,53 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef UPNP_TV_CTRLPT_H | #ifndef UPNP_TV_CTRLPT_H | ||||||
| #define UPNP_TV_CTRLPT_H | #define UPNP_TV_CTRLPT_H | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #include <stdio.h> | ||||||
| #include "sample_util.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ithread.h" | #include "ithread.h" | ||||||
| #include "upnp.h" | #include <unistd.h> | ||||||
| #include "upnptools.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <signal.h> |  | ||||||
| #include <stdarg.h> | #include <stdarg.h> | ||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  | #include <signal.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  |  | ||||||
|  | #include "upnp.h" | ||||||
| #ifdef WIN32 | #include "upnptools.h" | ||||||
| 	/* Do not #include <unistd.h> */ | #include "sample_util.h" | ||||||
| #else |  | ||||||
| 	#include <unistd.h> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define TV_SERVICE_SERVCOUNT	2 | #define TV_SERVICE_SERVCOUNT	2 | ||||||
| #define TV_SERVICE_CONTROL		0 | #define TV_SERVICE_CONTROL		0 | ||||||
| @@ -78,12 +66,12 @@ extern "C" { | |||||||
|  |  | ||||||
| #define TV_MAX_VAL_LEN			5 | #define TV_MAX_VAL_LEN			5 | ||||||
|  |  | ||||||
| #define TV_SUCCESS			0 | #define TV_SUCCESS				0 | ||||||
| #define TV_ERROR			(-1) | #define TV_ERROR				(-1) | ||||||
| #define TV_WARNING			1 | #define TV_WARNING				1 | ||||||
|  |  | ||||||
| /* This should be the maximum VARCOUNT from above */ | /* This should be the maximum VARCOUNT from above */ | ||||||
| #define TV_MAXVARS			TV_PICTURE_VARCOUNT | #define TV_MAXVARS				TV_PICTURE_VARCOUNT | ||||||
|  |  | ||||||
| extern char TvDeviceType[]; | extern char TvDeviceType[]; | ||||||
| extern char *TvServiceType[]; | extern char *TvServiceType[]; | ||||||
| @@ -120,11 +108,11 @@ extern ithread_mutex_t DeviceListMutex; | |||||||
|  |  | ||||||
| extern UpnpClient_Handle ctrlpt_handle; | extern UpnpClient_Handle ctrlpt_handle; | ||||||
|  |  | ||||||
| void		TvCtrlPointPrintHelp(void); | void	TvCtrlPointPrintHelp( void ); | ||||||
| int		TvCtrlPointDeleteNode(struct TvDeviceNode*); | int		TvCtrlPointDeleteNode(struct TvDeviceNode*); | ||||||
| int		TvCtrlPointRemoveDevice(const char *); | int		TvCtrlPointRemoveDevice(char*); | ||||||
| int		TvCtrlPointRemoveAll(void); | int		TvCtrlPointRemoveAll( void ); | ||||||
| int		TvCtrlPointRefresh(void); | int		TvCtrlPointRefresh( void ); | ||||||
|  |  | ||||||
|  |  | ||||||
| int		TvCtrlPointSendAction(int, int, char *, char **, char **, int); | int		TvCtrlPointSendAction(int, int, char *, char **, char **, int); | ||||||
| @@ -150,11 +138,11 @@ int		TvCtrlPointGetBrightness(int); | |||||||
| int		TvCtrlPointGetDevice(int, struct TvDeviceNode **); | int		TvCtrlPointGetDevice(int, struct TvDeviceNode **); | ||||||
| int		TvCtrlPointPrintList( void ); | int		TvCtrlPointPrintList( void ); | ||||||
| int		TvCtrlPointPrintDevice(int); | int		TvCtrlPointPrintDevice(int); | ||||||
| void	TvCtrlPointAddDevice(IXML_Document *, const char *, int);  | void	TvCtrlPointAddDevice (IXML_Document *, char *, int);  | ||||||
| void    TvCtrlPointHandleGetVar(const char *, const char *, const DOMString); | void    TvCtrlPointHandleGetVar(char *,char *,DOMString); | ||||||
| void	TvStateUpdate(char*,int, IXML_Document * , char **); | void	TvStateUpdate(char*,int, IXML_Document * , char **); | ||||||
| void	TvCtrlPointHandleEvent(const Upnp_SID, int, IXML_Document *);  | void	TvCtrlPointHandleEvent(Upnp_SID, int, IXML_Document *);  | ||||||
| void	TvCtrlPointHandleSubscribeUpdate(const char *, const Upnp_SID, int);  | void	TvCtrlPointHandleSubscribeUpdate(char *, Upnp_SID, int);  | ||||||
| int		TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *); | int		TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *); | ||||||
| void	TvCtrlPointVerifyTimeouts(int); | void	TvCtrlPointVerifyTimeouts(int); | ||||||
| void	TvCtrlPointPrintCommands( void ); | void	TvCtrlPointPrintCommands( void ); | ||||||
|   | |||||||
| @@ -1,41 +1,37 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "sample_util.h" |  | ||||||
| #include "upnp_tv_device.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | #include "sample_util.h" | ||||||
|  | #include "upnp_tv_device.h" | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
|  * linux_print |  * linux_print | ||||||
| @@ -86,7 +82,7 @@ TvDeviceCommandLoop( void *args ) | |||||||
|  |  | ||||||
|         if( strcasecmp( cmd, "exit" ) == 0 ) { |         if( strcasecmp( cmd, "exit" ) == 0 ) { | ||||||
|             SampleUtil_Print( "Shutting down...\n" ); |             SampleUtil_Print( "Shutting down...\n" ); | ||||||
|             TvDeviceStop(); |             TvDeviceStop(  ); | ||||||
|             exit( 0 ); |             exit( 0 ); | ||||||
|         } else { |         } else { | ||||||
|             SampleUtil_Print( "\n   Unknown command: %s\n\n", cmd ); |             SampleUtil_Print( "\n   Unknown command: %s\n\n", cmd ); | ||||||
| @@ -121,27 +117,26 @@ TvDeviceCommandLoop( void *args ) | |||||||
|  *                  |  *                  | ||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int main( IN int argc, IN char **argv ) | int | ||||||
|  | main( IN int argc, | ||||||
|  |       IN char **argv ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     unsigned int portTemp = 0; |     unsigned int portTemp = 0; | ||||||
|     char *ip_address = NULL, |     char *ip_address = NULL, | ||||||
|      *desc_doc_name = NULL, |      *desc_doc_name = NULL, | ||||||
|      *web_dir_path = NULL; |      *web_dir_path = NULL; | ||||||
|     int rc; |  | ||||||
|     ithread_t cmdloop_thread; |     ithread_t cmdloop_thread; | ||||||
| #ifdef WIN32 |  | ||||||
| #else |  | ||||||
|     int sig; |  | ||||||
|     sigset_t sigs_to_catch; |  | ||||||
| #endif |  | ||||||
|     int code; |     int code; | ||||||
|     unsigned int port = 0; |     unsigned int port = 0; | ||||||
|  |     int sig; | ||||||
|  |     sigset_t sigs_to_catch; | ||||||
|  |  | ||||||
|     int i = 0; |     int i = 0; | ||||||
|  |  | ||||||
|     SampleUtil_Initialize( linux_print ); |     SampleUtil_Initialize( linux_print ); | ||||||
|  |  | ||||||
|     // Parse options |     //Parse options | ||||||
|     for( i = 1; i < argc; i++ ) { |     for( i = 1; i < argc; i++ ) { | ||||||
|         if( strcmp( argv[i], "-ip" ) == 0 ) { |         if( strcmp( argv[i], "-ip" ) == 0 ) { | ||||||
|             ip_address = argv[++i]; |             ip_address = argv[++i]; | ||||||
| @@ -168,20 +163,21 @@ int main( IN int argc, IN char **argv ) | |||||||
|                 ( "\tweb_dir_path: Filesystem path where web files " |                 ( "\tweb_dir_path: Filesystem path where web files " | ||||||
|                   "related to the device are stored\n" ); |                   "related to the device are stored\n" ); | ||||||
|             SampleUtil_Print( "\t\te.g.: /upnp/sample/tvdevice/web\n" ); |             SampleUtil_Print( "\t\te.g.: /upnp/sample/tvdevice/web\n" ); | ||||||
|             return 1; |             exit( 1 ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     port = ( unsigned short )portTemp; |     port = ( unsigned short )portTemp; | ||||||
|  |  | ||||||
|     TvDeviceStart( ip_address, port, desc_doc_name, web_dir_path, linux_print ); |     TvDeviceStart( ip_address, port, desc_doc_name, web_dir_path, | ||||||
|  |                    linux_print ); | ||||||
|  |  | ||||||
|     /* start a command loop thread */ |     /* | ||||||
|     code = ithread_create( &cmdloop_thread, NULL, TvDeviceCommandLoop, NULL ); |        start a command loop thread  | ||||||
|  |      */ | ||||||
|  |     code = ithread_create( &cmdloop_thread, NULL, TvDeviceCommandLoop, | ||||||
|  |                            NULL ); | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
|     ithread_join(cmdloop_thread, NULL); |  | ||||||
| #else |  | ||||||
|     /* |     /* | ||||||
|        Catch Ctrl-C and properly shutdown  |        Catch Ctrl-C and properly shutdown  | ||||||
|      */ |      */ | ||||||
| @@ -190,9 +186,6 @@ int main( IN int argc, IN char **argv ) | |||||||
|     sigwait( &sigs_to_catch, &sig ); |     sigwait( &sigs_to_catch, &sig ); | ||||||
|  |  | ||||||
|     SampleUtil_Print( "Shutting down on signal %d...\n", sig ); |     SampleUtil_Print( "Shutting down on signal %d...\n", sig ); | ||||||
| #endif |     TvDeviceStop(  ); | ||||||
|     rc = TvDeviceStop(); |     exit( 0 ); | ||||||
|      |  | ||||||
|     return rc; |  | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,47 +1,40 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "upnp_tv_device.h" | #include "upnp_tv_device.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <assert.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define DEFAULT_WEB_DIR "./web" | #define DEFAULT_WEB_DIR "./web" | ||||||
|  |  | ||||||
|  |  | ||||||
| #define DESC_URL_SIZE 200 | #define DESC_URL_SIZE 200 | ||||||
|  |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|    Device type for tv device  |    Device type for tv device  | ||||||
|  */ |  */ | ||||||
| @@ -187,6 +180,7 @@ SetServiceTable( IN int serviceType, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     return SetActionTable( serviceType, out ); |     return SetActionTable( serviceType, out ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -257,6 +251,7 @@ SetActionTable( IN int serviceType, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -379,10 +374,10 @@ TvDeviceHandleSubscriptionRequest( IN struct Upnp_Subscription_Request | |||||||
| { | { | ||||||
|     unsigned int i = 0;         //,j=0; |     unsigned int i = 0;         //,j=0; | ||||||
|  |  | ||||||
| 	// IXML_Document *PropSet = NULL; |     // IXML_Document *PropSet=NULL; | ||||||
|  |  | ||||||
| 	// lock state mutex |     //lock state mutex | ||||||
| 	ithread_mutex_lock( &TVDevMutex ); |     ithread_mutex_lock( &TVDevMutex ); | ||||||
|  |  | ||||||
|     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { |     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { | ||||||
|         if( ( strcmp( sr_event->UDN, tv_service_table[i].UDN ) == 0 ) && |         if( ( strcmp( sr_event->UDN, tv_service_table[i].UDN ) == 0 ) && | ||||||
| @@ -390,48 +385,44 @@ TvDeviceHandleSubscriptionRequest( IN struct Upnp_Subscription_Request | |||||||
|               == 0 ) ) { |               == 0 ) ) { | ||||||
|  |  | ||||||
|             /* |             /* | ||||||
| 			PropSet = NULL; |                PropSet = NULL; | ||||||
|  |  | ||||||
| 			for (j = 0; j< tv_service_table[i].VariableCount; ++j) { |                for (j=0; j< tv_service_table[i].VariableCount; j++) | ||||||
| 				// add each variable to the property set |                { | ||||||
| 				// for initial state dump |                //add each variable to the property set | ||||||
| 				UpnpAddToPropertySet( |                //for initial state dump | ||||||
| 					&PropSet,  |                UpnpAddToPropertySet(&PropSet,  | ||||||
| 					tv_service_table[i].VariableName[j], |                tv_service_table[i].VariableName[j], | ||||||
| 					tv_service_table[i].VariableStrVal[j]); |                tv_service_table[i].VariableStrVal[j]); | ||||||
| 			} |                } | ||||||
|  |  | ||||||
| 			// dump initial state  |                //dump initial state  | ||||||
| 			UpnpAcceptSubscriptionExt( |                UpnpAcceptSubscriptionExt(device_handle, sr_event->UDN,  | ||||||
| 				device_handle, |                sr_event->ServiceId, | ||||||
| 				sr_event->UDN,  |                PropSet,sr_event->Sid); | ||||||
| 				sr_event->ServiceId, |                //free document | ||||||
| 				PropSet, |                Document_free(PropSet); | ||||||
| 				sr_event->Sid); |  | ||||||
| 			// free document |  | ||||||
| 			Document_free(PropSet); |  | ||||||
|  |  | ||||||
|              */ |              */ | ||||||
|  |  | ||||||
| 			UpnpAcceptSubscription( device_handle, |             UpnpAcceptSubscription( device_handle, | ||||||
| 				sr_event->UDN, |                                     sr_event->UDN, | ||||||
| 				sr_event->ServiceId, |                                     sr_event->ServiceId, | ||||||
| 				(const char **)tv_service_table[i]. |                                     ( const char ** )tv_service_table[i]. | ||||||
| 				VariableName, |                                     VariableName, | ||||||
| 				(const char **)tv_service_table[i]. |                                     ( const char ** )tv_service_table[i]. | ||||||
| 				VariableStrVal, |                                     VariableStrVal, | ||||||
| 				tv_service_table[i].VariableCount, |                                     tv_service_table[i].VariableCount, | ||||||
| 				sr_event->Sid); |                                     sr_event->Sid ); | ||||||
|  |  | ||||||
| 		} |         } | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	ithread_mutex_unlock( &TVDevMutex ); |     ithread_mutex_unlock( &TVDevMutex ); | ||||||
|  |  | ||||||
| 	return 1; |     return ( 1 ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
|  * TvDeviceHandleGetVarRequest |  * TvDeviceHandleGetVarRequest | ||||||
|  * |  * | ||||||
| @@ -448,8 +439,8 @@ int | |||||||
| TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | ||||||
|                              *cgv_event ) |                              *cgv_event ) | ||||||
| { | { | ||||||
|     unsigned int i = 0; |     unsigned int i = 0, | ||||||
|     unsigned int j = 0; |       j = 0; | ||||||
|     int getvar_succeeded = 0; |     int getvar_succeeded = 0; | ||||||
|  |  | ||||||
|     cgv_event->CurrentVal = NULL; |     cgv_event->CurrentVal = NULL; | ||||||
| @@ -457,12 +448,12 @@ TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | |||||||
|     ithread_mutex_lock( &TVDevMutex ); |     ithread_mutex_lock( &TVDevMutex ); | ||||||
|  |  | ||||||
|     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { |     for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { | ||||||
|         // check udn and service id |         //check udn and service id | ||||||
|         if( ( strcmp( cgv_event->DevUDN, tv_service_table[i].UDN ) == 0 ) |         if( ( strcmp( cgv_event->DevUDN, tv_service_table[i].UDN ) == 0 ) | ||||||
|             && |             && | ||||||
|             ( strcmp( cgv_event->ServiceID, tv_service_table[i].ServiceId ) |             ( strcmp( cgv_event->ServiceID, tv_service_table[i].ServiceId ) | ||||||
|               == 0 ) ) { |               == 0 ) ) { | ||||||
|             // check variable name |             //check variable name | ||||||
|             for( j = 0; j < tv_service_table[i].VariableCount; j++ ) { |             for( j = 0; j < tv_service_table[i].VariableCount; j++ ) { | ||||||
|                 if( strcmp( cgv_event->StateVarName, |                 if( strcmp( cgv_event->StateVarName, | ||||||
|                             tv_service_table[i].VariableName[j] ) == 0 ) { |                             tv_service_table[i].VariableName[j] ) == 0 ) { | ||||||
| @@ -507,6 +498,7 @@ TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request | |||||||
| int | int | ||||||
| TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|        Defaults if action not found  |        Defaults if action not found  | ||||||
|      */ |      */ | ||||||
| @@ -559,7 +551,7 @@ TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | |||||||
|                                                            ActionRequest, |                                                            ActionRequest, | ||||||
|                                                            &ca_event-> |                                                            &ca_event-> | ||||||
|                                                            ActionResult, |                                                            ActionResult, | ||||||
|                     &errorString ); |                                                            &errorString ); | ||||||
|             } else { |             } else { | ||||||
|                 errorString = "Power is Off"; |                 errorString = "Power is Off"; | ||||||
|                 retCode = UPNP_E_INTERNAL_ERROR; |                 retCode = UPNP_E_INTERNAL_ERROR; | ||||||
| @@ -577,7 +569,7 @@ TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event ) | |||||||
|         if( retCode == UPNP_E_SUCCESS ) { |         if( retCode == UPNP_E_SUCCESS ) { | ||||||
|             ca_event->ErrCode = UPNP_E_SUCCESS; |             ca_event->ErrCode = UPNP_E_SUCCESS; | ||||||
|         } else { |         } else { | ||||||
|             // copy the error string |             //copy the error string  | ||||||
|             strcpy( ca_event->ErrStr, errorString ); |             strcpy( ca_event->ErrStr, errorString ); | ||||||
|             switch ( retCode ) { |             switch ( retCode ) { | ||||||
|                 case UPNP_E_INVALID_PARAM: |                 case UPNP_E_INVALID_PARAM: | ||||||
| @@ -659,6 +651,7 @@ TvDeviceSetServiceTableVar( IN unsigned int service, | |||||||
|     ithread_mutex_unlock( &TVDevMutex ); |     ithread_mutex_unlock( &TVDevMutex ); | ||||||
|  |  | ||||||
|     return ( 1 ); |     return ( 1 ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -681,7 +674,7 @@ TvDeviceSetPower( IN int on ) | |||||||
|  |  | ||||||
|     if( on != POWER_ON && on != POWER_OFF ) { |     if( on != POWER_ON && on != POWER_OFF ) { | ||||||
|         SampleUtil_Print( "error: can't set power to value %d\n", on ); |         SampleUtil_Print( "error: can't set power to value %d\n", on ); | ||||||
|         return 0; |         return ( 0 ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
| @@ -692,7 +685,7 @@ TvDeviceSetPower( IN int on ) | |||||||
|     ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER, |     ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER, | ||||||
|                                       value ); |                                       value ); | ||||||
|  |  | ||||||
|     return ret; |     return ( ret ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -709,7 +702,9 @@ TvDeviceSetPower( IN int on ) | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDevicePowerOn( IN IXML_Document * in, | ||||||
|  |                  OUT IXML_Document ** out, | ||||||
|  |                  OUT char **errorString ) | ||||||
| { | { | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
|     ( *errorString ) = NULL; |     ( *errorString ) = NULL; | ||||||
| @@ -729,6 +724,7 @@ TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -746,7 +742,7 @@ TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDevicePowerOff( IN IXML_Document * in, | TvDevicePowerOff( IN IXML_Document * in, | ||||||
|                   OUT IXML_Document **out, |                   OUT IXML_Document ** out, | ||||||
|                   OUT char **errorString ) |                   OUT char **errorString ) | ||||||
| { | { | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -785,8 +781,11 @@ TvDevicePowerOff( IN IXML_Document * in, | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetChannel( IN IXML_Document * in, | ||||||
|  |                     OUT IXML_Document ** out, | ||||||
|  |                     OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int channel = 0; |     int channel = 0; | ||||||
| @@ -831,6 +830,7 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -848,10 +848,13 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString ) | IncrementChannel( IN int incr, | ||||||
|  |                   IN IXML_Document * in, | ||||||
|  |                   OUT IXML_Document ** out, | ||||||
|  |                   OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curchannel; |     int curchannel, | ||||||
|     int newchannel; |       newchannel; | ||||||
|  |  | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
| @@ -913,9 +916,12 @@ IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, O | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseChannel( IN IXML_Document * in, | ||||||
|  |                          OUT IXML_Document ** out, | ||||||
|  |                          OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementChannel( -1, in, out, errorString ); |     return IncrementChannel( -1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -932,9 +938,12 @@ TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseChannel( IN IXML_Document * in, | ||||||
|  |                          OUT IXML_Document ** out, | ||||||
|  |                          OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementChannel( 1, in, out, errorString ); |     return IncrementChannel( 1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -953,9 +962,13 @@ TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetVolume( IN IXML_Document * in, | ||||||
|  |                    OUT IXML_Document ** out, | ||||||
|  |                    OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int volume = 0; |     int volume = 0; | ||||||
|  |  | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -996,6 +1009,7 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1014,7 +1028,10 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT char **errorString ) | IncrementVolume( IN int incr, | ||||||
|  |                  IN IXML_Document * in, | ||||||
|  |                  OUT IXML_Document ** out, | ||||||
|  |                  OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curvolume, |     int curvolume, | ||||||
|       newvolume; |       newvolume; | ||||||
| @@ -1051,7 +1068,8 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT | |||||||
|                                     TV_CONTROL_VOLUME, value ) ) { |                                     TV_CONTROL_VOLUME, value ) ) { | ||||||
|         if( UpnpAddToActionResponse( out, actionName, |         if( UpnpAddToActionResponse( out, actionName, | ||||||
|                                      TvServiceType[TV_SERVICE_CONTROL], |                                      TvServiceType[TV_SERVICE_CONTROL], | ||||||
|                                      "Volume", value ) != UPNP_E_SUCCESS ) { |                                      "Volume", value ) != UPNP_E_SUCCESS ) | ||||||
|  |         { | ||||||
|             ( *out ) = NULL; |             ( *out ) = NULL; | ||||||
|             ( *errorString ) = "Internal Error"; |             ( *errorString ) = "Internal Error"; | ||||||
|             return UPNP_E_INTERNAL_ERROR; |             return UPNP_E_INTERNAL_ERROR; | ||||||
| @@ -1061,6 +1079,7 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1077,9 +1096,13 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseVolume( IN IXML_Document * in, | ||||||
|  |                         OUT IXML_Document ** out, | ||||||
|  |                         OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementVolume( 1, in, out, errorString ); |     return IncrementVolume( 1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1096,9 +1119,13 @@ TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseVolume( IN IXML_Document * in, | ||||||
|  |                         OUT IXML_Document ** out, | ||||||
|  |                         OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementVolume( -1, in, out, errorString ); |     return IncrementVolume( -1, in, out, errorString ); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1117,9 +1144,13 @@ TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetColor( IN IXML_Document * in, | ||||||
|  |                   OUT IXML_Document ** out, | ||||||
|  |                   OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int color = 0; |     int color = 0; | ||||||
|  |  | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -1159,6 +1190,7 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1175,11 +1207,16 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro | |||||||
|  *    IXML_Document **out - action result document |  *    IXML_Document **out - action result document | ||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
|  |  | ||||||
| int | int | ||||||
| IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementColor( IN int incr, | ||||||
|  |                 IN IXML_Document * in, | ||||||
|  |                 OUT IXML_Document ** out, | ||||||
|  |                 OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curcolor; |     int curcolor, | ||||||
|     int newcolor; |       newcolor; | ||||||
|  |  | ||||||
|     char *actionName; |     char *actionName; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1237,8 +1274,11 @@ IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseColor( IN IXML_Document * in, | ||||||
|  |                        OUT IXML_Document ** out, | ||||||
|  |                        OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementColor( -1, in, out, errorString ); |     return IncrementColor( -1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1255,8 +1295,11 @@ TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseColor( IN IXML_Document * in, | ||||||
|  |                        OUT IXML_Document ** out, | ||||||
|  |                        OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementColor( 1, in, out, errorString ); |     return IncrementColor( 1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1276,9 +1319,13 @@ TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetTint( IN IXML_Document * in, | ||||||
|  |                  OUT IXML_Document ** out, | ||||||
|  |                  OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|  |  | ||||||
|     int tint = -1; |     int tint = -1; | ||||||
|  |  | ||||||
|     ( *out ) = NULL; |     ( *out ) = NULL; | ||||||
| @@ -1337,10 +1384,14 @@ TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementTint( IN int incr, | ||||||
|  |                IN IXML_Document * in, | ||||||
|  |                OUT IXML_Document ** out, | ||||||
|  |                OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curtint; |     int curtint, | ||||||
|     int newtint; |       newtint; | ||||||
|  |  | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1383,6 +1434,7 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1399,8 +1451,11 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseTint( IN IXML_Document * in, | ||||||
|  |                       OUT IXML_Document ** out, | ||||||
|  |                       OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementTint( 1, in, out, errorString ); |     return IncrementTint( 1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1418,8 +1473,11 @@ TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char ** | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseTint( IN IXML_Document * in, | ||||||
|  |                       OUT IXML_Document ** out, | ||||||
|  |                       OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementTint( -1, in, out, errorString ); |     return IncrementTint( -1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1439,8 +1497,11 @@ TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char ** | |||||||
|  * |  * | ||||||
|  ****************************************************************************/ |  ****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetContrast( IN IXML_Document * in, | ||||||
|  |                      OUT IXML_Document ** out, | ||||||
|  |                      OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|     int contrast = -1; |     int contrast = -1; | ||||||
|  |  | ||||||
| @@ -1501,10 +1562,14 @@ TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **e | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementContrast( IN int incr, | ||||||
|  |                    IN IXML_Document * in, | ||||||
|  |                    OUT IXML_Document ** out, | ||||||
|  |                    OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curcontrast; |     int curcontrast, | ||||||
|     int newcontrast; |       newcontrast; | ||||||
|  |  | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1566,8 +1631,11 @@ IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, O | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseContrast( IN IXML_Document * in, | ||||||
|  |                           OUT IXML_Document ** out, | ||||||
|  |                           OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     return IncrementContrast( 1, in, out, errorString ); |     return IncrementContrast( 1, in, out, errorString ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1585,7 +1653,9 @@ TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseContrast( IXML_Document * in, | ||||||
|  |                           IXML_Document ** out, | ||||||
|  |                           char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementContrast( -1, in, out, errorString ); |     return IncrementContrast( -1, in, out, errorString ); | ||||||
| } | } | ||||||
| @@ -1603,8 +1673,11 @@ TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceSetBrightness( IN IXML_Document * in, | ||||||
|  |                        OUT IXML_Document ** out, | ||||||
|  |                        OUT char **errorString ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *value = NULL; |     char *value = NULL; | ||||||
|     int brightness = -1; |     int brightness = -1; | ||||||
|  |  | ||||||
| @@ -1647,6 +1720,7 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|         ( *errorString ) = "Internal Error"; |         ( *errorString ) = "Internal Error"; | ||||||
|         return UPNP_E_INTERNAL_ERROR; |         return UPNP_E_INTERNAL_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1664,10 +1738,13 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char * | |||||||
|  *    char **errorString - errorString (in case action was unsuccessful) |  *    char **errorString - errorString (in case action was unsuccessful) | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | IncrementBrightness( IN int incr, | ||||||
|  |                      IN IXML_Document * in, | ||||||
|  |                      OUT IXML_Document ** out, | ||||||
|  |                      OUT char **errorString ) | ||||||
| { | { | ||||||
|     int curbrightness; |     int curbrightness, | ||||||
|     int newbrightness; |       newbrightness; | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|     char value[TV_MAX_VAL_LEN]; |     char value[TV_MAX_VAL_LEN]; | ||||||
|  |  | ||||||
| @@ -1728,7 +1805,9 @@ IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceIncreaseBrightness( IN IXML_Document * in, | ||||||
|  |                             OUT IXML_Document ** out, | ||||||
|  |                             OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementBrightness( 1, in, out, errorString ); |     return IncrementBrightness( 1, in, out, errorString ); | ||||||
| } | } | ||||||
| @@ -1746,7 +1825,9 @@ TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceDecreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) | TvDeviceDecreaseBrightness( IN IXML_Document * in, | ||||||
|  |                             OUT IXML_Document ** out, | ||||||
|  |                             OUT char **errorString ) | ||||||
| { | { | ||||||
|     return IncrementBrightness( -1, in, out, errorString ); |     return IncrementBrightness( -1, in, out, errorString ); | ||||||
| } | } | ||||||
| @@ -1770,9 +1851,14 @@ TvDeviceDecreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT c | |||||||
|  *   Cookie -- Optional data specified during callback registration |  *   Cookie -- Optional data specified during callback registration | ||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Cookie) | int | ||||||
|  | TvDeviceCallbackEventHandler( Upnp_EventType EventType, | ||||||
|  |                               void *Event, | ||||||
|  |                               void *Cookie ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     switch ( EventType ) { |     switch ( EventType ) { | ||||||
|  |  | ||||||
|         case UPNP_EVENT_SUBSCRIPTION_REQUEST: |         case UPNP_EVENT_SUBSCRIPTION_REQUEST: | ||||||
|  |  | ||||||
|             TvDeviceHandleSubscriptionRequest( ( struct |             TvDeviceHandleSubscriptionRequest( ( struct | ||||||
| @@ -1806,14 +1892,17 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co | |||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         default: |         default: | ||||||
|             SampleUtil_Print( "Error in TvDeviceCallbackEventHandler: unknown event type %d\n", |             SampleUtil_Print | ||||||
|                 EventType ); |                 ( "Error in TvDeviceCallbackEventHandler: unknown event type %d\n", | ||||||
|  |                   EventType ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* Print a summary of the event received */ |     /* | ||||||
|  |        Print a summary of the event received  | ||||||
|  |      */ | ||||||
|     SampleUtil_PrintEvent( EventType, Event ); |     SampleUtil_PrintEvent( EventType, Event ); | ||||||
|  |  | ||||||
|     return 0; |     return ( 0 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /****************************************************************************** | /****************************************************************************** | ||||||
| @@ -1826,13 +1915,12 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co | |||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| int | int | ||||||
| TvDeviceStop(void) | TvDeviceStop(  ) | ||||||
| { | { | ||||||
|     UpnpUnRegisterRootDevice( device_handle ); |     UpnpUnRegisterRootDevice( device_handle ); | ||||||
|     UpnpFinish(); |     UpnpFinish(  ); | ||||||
|     SampleUtil_Finish(); |     SampleUtil_Finish(  ); | ||||||
|     ithread_mutex_destroy( &TVDevMutex ); |     ithread_mutex_destroy( &TVDevMutex ); | ||||||
|  |  | ||||||
|     return UPNP_E_SUCCESS; |     return UPNP_E_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1865,83 +1953,79 @@ TvDeviceStart( char *ip_address, | |||||||
|                print_string pfun ) |                print_string pfun ) | ||||||
| { | { | ||||||
|     int ret = UPNP_E_SUCCESS; |     int ret = UPNP_E_SUCCESS; | ||||||
|  |  | ||||||
|     char desc_doc_url[DESC_URL_SIZE]; |     char desc_doc_url[DESC_URL_SIZE]; | ||||||
|  |  | ||||||
|     ithread_mutex_init( &TVDevMutex, NULL ); |     ithread_mutex_init( &TVDevMutex, NULL ); | ||||||
|  |  | ||||||
|     SampleUtil_Initialize( pfun ); |     SampleUtil_Initialize( pfun ); | ||||||
|  |  | ||||||
|     SampleUtil_Print( |     SampleUtil_Print | ||||||
|         "Initializing UPnP Sdk with\n" |         ( "Initializing UPnP Sdk with \n \t ipaddress = %s port = %d\n", | ||||||
|         "\tipaddress = %s port = %u\n", |           ip_address, port ); | ||||||
|         ip_address, port ); |  | ||||||
|  |  | ||||||
|     ret = UpnpInit( ip_address, port ); |     if( ( ret = UpnpInit( ip_address, port ) ) != UPNP_E_SUCCESS ) { | ||||||
|     if( ret != UPNP_E_SUCCESS ) { |  | ||||||
|         SampleUtil_Print( "Error with UpnpInit -- %d\n", ret ); |         SampleUtil_Print( "Error with UpnpInit -- %d\n", ret ); | ||||||
|         UpnpFinish(); |         UpnpFinish(  ); | ||||||
|         return ret; |         return ret; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ip_address = UpnpGetServerIpAddress(); |     if( ip_address == NULL ) { | ||||||
|     port = UpnpGetServerPort(); |         ip_address = UpnpGetServerIpAddress(  ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     SampleUtil_Print( |         port = UpnpGetServerPort(  ); | ||||||
|         "UPnP Initialized\n" |  | ||||||
| 	"\tipaddress= %s port = %u\n", |  | ||||||
|         ip_address, port ); |  | ||||||
|  |  | ||||||
|     if( desc_doc_name == NULL ) { |     SampleUtil_Print( "UPnP Initialized\n \t ipaddress= %s port = %d\n", | ||||||
|  |                       ip_address, port ); | ||||||
|  |  | ||||||
|  |     if( desc_doc_name == NULL ) | ||||||
|         desc_doc_name = "tvdevicedesc.xml"; |         desc_doc_name = "tvdevicedesc.xml"; | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if( web_dir_path == NULL ) { |     if( web_dir_path == NULL ) | ||||||
|         web_dir_path = DEFAULT_WEB_DIR; |         web_dir_path = DEFAULT_WEB_DIR; | ||||||
|     } |  | ||||||
|  |  | ||||||
|     snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address, |     snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address, | ||||||
|               port, desc_doc_name ); |               port, desc_doc_name ); | ||||||
|  |  | ||||||
|     SampleUtil_Print( "Specifying the webserver root directory -- %s\n", |     SampleUtil_Print( "Specifying the webserver root directory -- %s\n", | ||||||
|                       web_dir_path ); |                       web_dir_path ); | ||||||
|     ret = UpnpSetWebServerRootDir( web_dir_path ); |     if( ( ret = | ||||||
|     if( ret != UPNP_E_SUCCESS ) { |           UpnpSetWebServerRootDir( web_dir_path ) ) != UPNP_E_SUCCESS ) { | ||||||
|         SampleUtil_Print( "Error specifying webserver root directory -- %s: %d\n", |         SampleUtil_Print | ||||||
|  |             ( "Error specifying webserver root directory -- %s: %d\n", | ||||||
|               web_dir_path, ret ); |               web_dir_path, ret ); | ||||||
|         UpnpFinish(); |         UpnpFinish(  ); | ||||||
|  |  | ||||||
|         return ret; |         return ret; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     SampleUtil_Print( |     SampleUtil_Print | ||||||
|         "Registering the RootDevice\n" |         ( "Registering the RootDevice\n\t with desc_doc_url: %s\n", | ||||||
|         "\t with desc_doc_url: %s\n", |           desc_doc_url ); | ||||||
|         desc_doc_url ); |  | ||||||
|  |  | ||||||
|     ret = UpnpRegisterRootDevice( desc_doc_url, TvDeviceCallbackEventHandler, |     if( ( ret = UpnpRegisterRootDevice( desc_doc_url, | ||||||
|         &device_handle, &device_handle ); |                                         TvDeviceCallbackEventHandler, | ||||||
|     if( ret != UPNP_E_SUCCESS ) { |                                         &device_handle, &device_handle ) ) | ||||||
|  |         != UPNP_E_SUCCESS ) { | ||||||
|         SampleUtil_Print( "Error registering the rootdevice : %d\n", ret ); |         SampleUtil_Print( "Error registering the rootdevice : %d\n", ret ); | ||||||
|         UpnpFinish(); |         UpnpFinish(  ); | ||||||
|  |  | ||||||
|         return ret; |         return ret; | ||||||
|     } else { |     } else { | ||||||
|         SampleUtil_Print( |         SampleUtil_Print( "RootDevice Registered\n" ); | ||||||
|             "RootDevice Registered\n" |  | ||||||
|             "Initializing State Table\n"); |  | ||||||
|         TvDeviceStateTableInit( desc_doc_url ); |  | ||||||
|         SampleUtil_Print("State Table Initialized\n"); |  | ||||||
|         ret = UpnpSendAdvertisement( device_handle, default_advr_expire ); |  | ||||||
|         if( ret != UPNP_E_SUCCESS ) { |  | ||||||
|             SampleUtil_Print( "Error sending advertisements : %d\n", ret ); |  | ||||||
|             UpnpFinish(); |  | ||||||
|  |  | ||||||
|  |         SampleUtil_Print( "Initializing State Table\n" ); | ||||||
|  |         TvDeviceStateTableInit( desc_doc_url ); | ||||||
|  |         SampleUtil_Print( "State Table Initialized\n" ); | ||||||
|  |  | ||||||
|  |         if( ( ret = | ||||||
|  |               UpnpSendAdvertisement( device_handle, default_advr_expire ) ) | ||||||
|  |             != UPNP_E_SUCCESS ) { | ||||||
|  |             SampleUtil_Print( "Error sending advertisements : %d\n", ret ); | ||||||
|  |             UpnpFinish(  ); | ||||||
|             return ret; |             return ret; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         SampleUtil_Print("Advertisements Sent\n"); |         SampleUtil_Print( "Advertisements Sent\n" ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return UPNP_E_SUCCESS; |     return UPNP_E_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,34 +1,33 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef UPNP_TV_DEVICE_H | #ifndef UPNP_TV_DEVICE_H | ||||||
| #define UPNP_TV_DEVICE_H | #define UPNP_TV_DEVICE_H | ||||||
| @@ -42,9 +41,7 @@ extern "C" { | |||||||
|  |  | ||||||
| #include "ithread.h" | #include "ithread.h" | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #ifndef WIN32 |  | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #endif |  | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include "upnp.h" | #include "upnp.h" | ||||||
| #include "sample_util.h" | #include "sample_util.h" | ||||||
| @@ -632,7 +629,7 @@ int TvDeviceDecreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out, | |||||||
|  |  | ||||||
| int TvDeviceStart(char * ip_address, unsigned short port,char * desc_doc_name, | int TvDeviceStart(char * ip_address, unsigned short port,char * desc_doc_name, | ||||||
| 				  char *web_dir_path, print_string pfun); | 				  char *web_dir_path, print_string pfun); | ||||||
| int TvDeviceStop(void); | int TvDeviceStop(); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,205 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \addtogroup UpnpString |  | ||||||
|  * |  | ||||||
|  * Due to its heavy use, this class is coded for efficiency, not for beauty. |  | ||||||
|  * Do not use this as example to other classes. Please take a look at any |  | ||||||
|  * other one. |  | ||||||
|  * |  | ||||||
|  * \todo Always alloc a minimum size like 64 bytes or so and when shrinking |  | ||||||
|  * do not perform a new memory allocation. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  * |  | ||||||
|  * \file |  | ||||||
|  * |  | ||||||
|  * \brief UpnpString object implementation. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "config.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "UpnpString.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdlib.h> /* for calloc(), free() */ |  | ||||||
| #include <string.h> /* for strlen(), strdup() */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef WIN32 |  | ||||||
| 	#define strcasecmp stricmp |  | ||||||
| #else |  | ||||||
| 	/* Other systems have strncasecmp */ |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* strndup() is a GNU extension. Other systems must fix it with elif's. */ |  | ||||||
| #ifdef __GNUC__ |  | ||||||
| extern char *strndup(__const char *__string, size_t __n); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Internal implementation of the class UpnpString. |  | ||||||
|  * |  | ||||||
|  * \internal |  | ||||||
|  */ |  | ||||||
| struct SUpnpString |  | ||||||
| { |  | ||||||
| 	/*! \brief Length of the string. */ |  | ||||||
| 	int m_length; |  | ||||||
| 	/*! \brief Pointer to a dynamically allocated area that holds the NULL |  | ||||||
| 	 * terminated string. */ |  | ||||||
| 	char *m_string; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| UpnpString *UpnpString_new() |  | ||||||
| { |  | ||||||
| 	// All bytes are zero, and so is the length of the string. |  | ||||||
| 	struct SUpnpString *p = calloc(1, sizeof (struct SUpnpString)); |  | ||||||
| 	if (p == NULL) { |  | ||||||
| 		goto error_handler1; |  | ||||||
| 	} |  | ||||||
| #if 0 |  | ||||||
| 	p->m_length = 0; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	// This byte is zero, calloc does initialize it. |  | ||||||
| 	p->m_string = calloc(1, 1); |  | ||||||
| 	if (p->m_string == NULL) { |  | ||||||
| 		goto error_handler2; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return (UpnpString *)p; |  | ||||||
|  |  | ||||||
| 	//free(p->m_string); |  | ||||||
| error_handler2: |  | ||||||
| 	free(p); |  | ||||||
| error_handler1: |  | ||||||
| 	return NULL; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpString_delete(UpnpString *p) |  | ||||||
| { |  | ||||||
| 	struct SUpnpString *q = (struct SUpnpString *)p; |  | ||||||
| 		 |  | ||||||
| 	if (!q) return; |  | ||||||
|  |  | ||||||
| 	q->m_length = 0; |  | ||||||
|  |  | ||||||
| 	free(q->m_string); |  | ||||||
| 	q->m_string = NULL; |  | ||||||
|  |  | ||||||
| 	free(p); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| UpnpString *UpnpString_dup(const UpnpString *p) |  | ||||||
| { |  | ||||||
| 	struct SUpnpString *q = calloc(1, sizeof (struct SUpnpString)); |  | ||||||
| 	if (q == NULL) { |  | ||||||
| 		goto error_handler1; |  | ||||||
| 	} |  | ||||||
| 	q->m_length = ((struct SUpnpString *)p)->m_length; |  | ||||||
| 	q->m_string = strdup(((struct SUpnpString *)p)->m_string); |  | ||||||
| 	if (q->m_string == NULL) { |  | ||||||
| 		goto error_handler2; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return (UpnpString *)q; |  | ||||||
|  |  | ||||||
| 	//free(q->m_string); |  | ||||||
| error_handler2: |  | ||||||
| 	free(q); |  | ||||||
| error_handler1: |  | ||||||
| 	return NULL; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpString_assign(UpnpString *p, const UpnpString *q) |  | ||||||
| { |  | ||||||
| 	if (p != q) { |  | ||||||
| 		UpnpString_set_String(p, UpnpString_get_String(q)); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| size_t UpnpString_get_Length(const UpnpString *p) |  | ||||||
| { |  | ||||||
| 	return ((struct SUpnpString *)p)->m_length; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpString_set_Length(UpnpString *p, size_t n) |  | ||||||
| { |  | ||||||
| 	if (((struct SUpnpString *)p)->m_length > n) { |  | ||||||
| 		((struct SUpnpString *)p)->m_length = n; |  | ||||||
| 		/* No need to realloc now, will do later when needed. */ |  | ||||||
| 		((struct SUpnpString *)p)->m_string[n] = 0; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| const char *UpnpString_get_String(const UpnpString *p) |  | ||||||
| { |  | ||||||
| 	return ((struct SUpnpString *)p)->m_string; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int UpnpString_set_String(UpnpString *p, const char *s) |  | ||||||
| { |  | ||||||
| 	char *q = strdup(s); |  | ||||||
| 	if (!q) goto error_handler1; |  | ||||||
| 	free(((struct SUpnpString *)p)->m_string); |  | ||||||
| 	((struct SUpnpString *)p)->m_length = strlen(q); |  | ||||||
| 	((struct SUpnpString *)p)->m_string = q; |  | ||||||
|  |  | ||||||
| error_handler1: |  | ||||||
| 	return q != NULL; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int UpnpString_set_StringN(UpnpString *p, const char *s, size_t n) |  | ||||||
| { |  | ||||||
| 	char *q = strndup(s, n); |  | ||||||
| 	if (!q) goto error_handler1; |  | ||||||
| 	free(((struct SUpnpString *)p)->m_string); |  | ||||||
| 	((struct SUpnpString *)p)->m_length = strlen(q); |  | ||||||
| 	((struct SUpnpString *)p)->m_string = q; |  | ||||||
|  |  | ||||||
| error_handler1: |  | ||||||
| 	return q != NULL; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpString_clear(UpnpString *p) |  | ||||||
| { |  | ||||||
| 	((struct SUpnpString *)p)->m_length = 0; |  | ||||||
| 	/* No need to realloc now, will do later when needed. */ |  | ||||||
| 	((struct SUpnpString *)p)->m_string[0] = 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int UpnpString_cmp(UpnpString *p, UpnpString *q) |  | ||||||
| { |  | ||||||
| 	const char *cp = UpnpString_get_String(p); |  | ||||||
| 	const char *cq = UpnpString_get_String(q); |  | ||||||
|  |  | ||||||
| 	return strcmp(cp, cq); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int UpnpString_casecmp(UpnpString *p, UpnpString *q) |  | ||||||
| { |  | ||||||
| 	const char *cp = UpnpString_get_String(p); |  | ||||||
| 	const char *cq = UpnpString_get_String(q); |  | ||||||
|  |  | ||||||
| 	return strcasecmp(cp, cq); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* @} UpnpString */ |  | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,121 +1,177 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #include "config.h" | #include "config.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ithread.h" |  | ||||||
| #include "ixml.h" |  | ||||||
| #include "upnp.h" |  | ||||||
| #include "upnpdebug.h" | #include "upnpdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdarg.h> |  | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | #include "ithread.h" | ||||||
|  | #include "upnp.h" | ||||||
|  | #include <stdarg.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! Mutex to synchronize all the log file opeartions in the debug mode */ | //Mutex to synchronize all the log file opeartions in the debug mode | ||||||
| static ithread_mutex_t GlobalDebugMutex; | static ithread_mutex_t GlobalDebugMutex; | ||||||
|  |  | ||||||
| /*! Global log level */ | // Global log level | ||||||
| static Upnp_LogLevel g_log_level = UPNP_DEFAULT_LOG_LEVEL; | static Upnp_LogLevel g_log_level = UPNP_DEFAULT_LOG_LEVEL; | ||||||
|  |  | ||||||
| /*! File handle for the error log file */ | //File handle for the error log file | ||||||
| static FILE *ErrFileHnd = NULL; | static FILE *ErrFileHnd = NULL; | ||||||
|  |  | ||||||
| /*! File handle for the information log file */ | //File handle for the information log file | ||||||
| static FILE *InfoFileHnd = NULL; | static FILE *InfoFileHnd = NULL; | ||||||
|  |  | ||||||
| /*! Name of the error file */ | //Name of the error file | ||||||
| static const char *errFileName = "IUpnpErrFile.txt"; | static const char *errFileName = "IUpnpErrFile.txt"; | ||||||
|  |  | ||||||
| /*! Name of the info file */ | //Name of the info file | ||||||
| static const char *infoFileName = "IUpnpInfoFile.txt"; | static const char *infoFileName = "IUpnpInfoFile.txt"; | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef DEBUG |  | ||||||
|  |  | ||||||
|  | /*************************************************************************** | ||||||
| int UpnpInitLog(void) |  * Function : UpnpSetLogFileNames					 | ||||||
|  |  *								 | ||||||
|  |  * Parameters:							 | ||||||
|  |  *	IN const char* ErrFileName: name of the error file | ||||||
|  |  *	IN const char *InfoFileName: name of the information file | ||||||
|  |  *	IN int size: Size of the buffer | ||||||
|  |  *	IN int starLength: This parameter provides the width of the banner | ||||||
|  |  *									 | ||||||
|  |  * Description:							 | ||||||
|  |  *	This functions takes the buffer and writes the buffer in the file as  | ||||||
|  |  *	per the requested banner					 | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
|  | void | ||||||
|  | UpnpSetLogFileNames ( IN const char *ErrFileName, | ||||||
|  | 		      IN const char *InfoFileName ) | ||||||
| { | { | ||||||
| 	ithread_mutex_init(&GlobalDebugMutex, NULL); |     if( ErrFileName ) { | ||||||
| 	if(DEBUG_TARGET == 1) { |  | ||||||
| 		if((ErrFileHnd = fopen( errFileName, "a")) == NULL) { |  | ||||||
| 			return -1; |  | ||||||
| 		} |  | ||||||
| 		if((InfoFileHnd = fopen( infoFileName, "a")) == NULL) { |  | ||||||
| 			return -1; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return UPNP_E_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpSetLogLevel(Upnp_LogLevel log_level) |  | ||||||
| { |  | ||||||
| 	g_log_level = log_level; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpCloseLog(void) |  | ||||||
| { |  | ||||||
| 	if (DEBUG_TARGET == 1) { |  | ||||||
| 		fflush(ErrFileHnd); |  | ||||||
| 		fflush(InfoFileHnd); |  | ||||||
| 		fclose(ErrFileHnd); |  | ||||||
| 		fclose(InfoFileHnd); |  | ||||||
| 	} |  | ||||||
| 	ithread_mutex_destroy(&GlobalDebugMutex); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpSetLogFileNames( |  | ||||||
| 	const char *ErrFileName, |  | ||||||
| 	const char *InfoFileName) |  | ||||||
| { |  | ||||||
|     if (ErrFileName) { |  | ||||||
|         errFileName = ErrFileName; |         errFileName = ErrFileName; | ||||||
|     } |     } | ||||||
|     if (InfoFileName) { |     if( InfoFileName ) { | ||||||
|         infoFileName = InfoFileName; |         infoFileName = InfoFileName; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*************************************************************************** | ||||||
|  |  * Function : UpnpInitLog | ||||||
|  |  * | ||||||
|  |  * Parameters:	void | ||||||
|  |  * | ||||||
|  |  * Description: | ||||||
|  |  *	This functions initializes the log files | ||||||
|  |  * | ||||||
|  |  * Returns: int | ||||||
|  |  *	-1 : If fails | ||||||
|  |  *	UPNP_E_SUCCESS : if success | ||||||
|  |  ***************************************************************************/ | ||||||
|  | int | ||||||
|  | UpnpInitLog() | ||||||
|  | { | ||||||
|  |     ithread_mutex_init( &GlobalDebugMutex, NULL ); | ||||||
|  |  | ||||||
|  |     if( DEBUG_TARGET == 1 ) { | ||||||
|  |         if( ( ErrFileHnd = fopen( errFileName, "a" ) ) == NULL ) | ||||||
|  |             return -1; | ||||||
|  |         if( ( InfoFileHnd = fopen( infoFileName, "a" ) ) == NULL ) | ||||||
|  |             return -1; | ||||||
|  |     } | ||||||
|  |     return UPNP_E_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*************************************************************************** | ||||||
|  |  * Function : UpnpSetLogLevel | ||||||
|  |  *				 | ||||||
|  |  * Parameters:	Upnp_LogLevel log_level | ||||||
|  |  * | ||||||
|  |  * Description:							 | ||||||
|  |  *	This functions set the log level (see {\tt Upnp_LogLevel} | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
|  | void  | ||||||
|  | UpnpSetLogLevel (Upnp_LogLevel log_level) | ||||||
|  | { | ||||||
|  | 	g_log_level = log_level; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*************************************************************************** | ||||||
|  |  * Function : UpnpCloseLog					 | ||||||
|  |  *								 | ||||||
|  |  * Parameters:	void					 | ||||||
|  |  *								 | ||||||
|  |  * Description:						 | ||||||
|  |  *	This functions closes the log files | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
|  | void | ||||||
|  | UpnpCloseLog() | ||||||
|  | { | ||||||
|  |     if( DEBUG_TARGET == 1 ) { | ||||||
|  |         fflush( ErrFileHnd ); | ||||||
|  |         fflush( InfoFileHnd ); | ||||||
|  |         fclose( ErrFileHnd ); | ||||||
|  |         fclose( InfoFileHnd ); | ||||||
|  |     } | ||||||
|  |     ithread_mutex_destroy( &GlobalDebugMutex ); | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*************************************************************************** | ||||||
|  |  * Function : DebugAtThisLevel					 | ||||||
|  |  *									 | ||||||
|  |  * Parameters:			 | ||||||
|  |  *	IN Upnp_LogLevel 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( | int DebugAtThisLevel( | ||||||
| 	Upnp_LogLevel DLevel, | 	IN Upnp_LogLevel DLevel, | ||||||
| 	Dbg_Module Module) | 	IN Dbg_Module Module) | ||||||
| { | { | ||||||
| 	int ret = DLevel <= g_log_level; | 	int ret = DLevel <= g_log_level; | ||||||
| 	ret &= | 	ret &= | ||||||
| @@ -130,15 +186,38 @@ int DebugAtThisLevel( | |||||||
| 	 | 	 | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*************************************************************************** | ||||||
|  |  * Function : UpnpPrintf					 | ||||||
|  |  *									 | ||||||
|  |  * Parameters:			 | ||||||
|  |  *	IN Upnp_LogLevel 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 | ||||||
|  |  *	IN char *DbgFileName: Name of the file from where debug statement is | ||||||
|  |  *							coming | ||||||
|  |  *	IN int DbgLineNo : Line number of the file from where debug statement  | ||||||
|  |  *				is coming | ||||||
|  |  *	IN char * FmtStr, ...: Variable number of arguments that will go  | ||||||
|  |  *				in the debug statement | ||||||
|  |  *					 | ||||||
|  |  * Description:					 | ||||||
|  |  *	This functions prints the debug statement either on the startdard  | ||||||
|  |  *	output or log file along with the information from where this debug  | ||||||
|  |  *	statement is coming | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
|  | #ifdef DEBUG | ||||||
| void UpnpPrintf( | void UpnpPrintf( | ||||||
| 	Upnp_LogLevel DLevel, | 	IN Upnp_LogLevel DLevel, | ||||||
| 	Dbg_Module Module, | 	IN Dbg_Module Module, | ||||||
| 	const char *DbgFileName, | 	IN const char *DbgFileName, | ||||||
| 	int DbgLineNo, | 	IN int DbgLineNo, | ||||||
| 	const char *FmtStr, | 	IN const char *FmtStr, | ||||||
| 	...) | 	... ) | ||||||
| { | { | ||||||
| 	va_list ArgList; | 	va_list ArgList; | ||||||
| 	 | 	 | ||||||
| @@ -170,9 +249,27 @@ void UpnpPrintf( | |||||||
| 	va_end(ArgList); | 	va_end(ArgList); | ||||||
| 	ithread_mutex_unlock(&GlobalDebugMutex); | 	ithread_mutex_unlock(&GlobalDebugMutex); | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| FILE *GetDebugFile(Upnp_LogLevel DLevel, Dbg_Module Module) | /*************************************************************************** | ||||||
|  |  * Function : UpnpGetDebugFile					 | ||||||
|  |  *				 | ||||||
|  |  * Parameters:			 | ||||||
|  |  *	IN Upnp_LogLevel 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 function checks if the module is turned on for debug  | ||||||
|  |  *	and returns the file descriptor corresponding to the debug level | ||||||
|  |  * Returns: FILE * | ||||||
|  |  *	NULL : if the module is turn off for debug  | ||||||
|  |  *	else returns the right file descriptor | ||||||
|  |  ***************************************************************************/ | ||||||
|  | #ifdef DEBUG | ||||||
|  | FILE *GetDebugFile( Upnp_LogLevel DLevel, Dbg_Module Module ) | ||||||
| { | { | ||||||
| 	FILE *ret; | 	FILE *ret; | ||||||
|  |  | ||||||
| @@ -190,51 +287,65 @@ FILE *GetDebugFile(Upnp_LogLevel DLevel, Dbg_Module Module) | |||||||
|  |  | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpDisplayFileAndLine( |  | ||||||
| 	FILE *fd, |  | ||||||
| 	const char *DbgFileName, |  | ||||||
| 	int DbgLineNo) |  | ||||||
| { |  | ||||||
| #define NLINES 2 |  | ||||||
| #define MAX_LINE_SIZE 512 |  | ||||||
| #define NUMBER_OF_STARS 80 |  | ||||||
| 	const char *lines[NLINES]; |  | ||||||
| 	char buf[NLINES][MAX_LINE_SIZE]; |  | ||||||
| 	int i; |  | ||||||
|  |  | ||||||
| 	/* Initialize the pointer array */ |  | ||||||
| 	for (i = 0; i < NLINES; i++) { |  | ||||||
| 		lines[i] = buf[i]; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* Put the debug lines in the buffer */ |  | ||||||
| 	sprintf(buf[0], "DEBUG - THREAD ID: 0x%lX", |  | ||||||
| #ifdef WIN32 |  | ||||||
| 		(unsigned long int)ithread_self().p |  | ||||||
| #else |  | ||||||
| 		(unsigned long int)ithread_self() |  | ||||||
| #endif | #endif | ||||||
| 	); |  | ||||||
| 	if (DbgFileName) { |  | ||||||
| 		sprintf(buf[1], |  | ||||||
| 			"FILE: %s, LINE: %d", |  | ||||||
| 			DbgFileName, |  | ||||||
| 			DbgLineNo); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* Show the lines centered */ |  | ||||||
| 	UpnpDisplayBanner(fd, lines, NLINES, NUMBER_OF_STARS); | /*************************************************************************** | ||||||
|  |  * Function : UpnpDisplayFileAndLine				 | ||||||
|  |  *	 | ||||||
|  |  * Parameters:	 | ||||||
|  |  *	IN FILE *fd: File descriptor where line number and file name will be  | ||||||
|  |  *			written  | ||||||
|  |  *	IN char *DbgFileName: Name of the file   | ||||||
|  |  *	IN int DbgLineNo : Line number of the file | ||||||
|  |  *		 | ||||||
|  |  * Description: | ||||||
|  |  *	This function writes the file name and file number from where | ||||||
|  |  *		debug statement is coming to the log file | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
|  | #ifdef DEBUG | ||||||
|  | void UpnpDisplayFileAndLine( | ||||||
|  | 	IN FILE * fd, | ||||||
|  | 	IN const char *DbgFileName, | ||||||
|  | 	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); | 	fflush(fd); | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*************************************************************************** | ||||||
|  |  * Function : UpnpDisplayBanner	 | ||||||
|  |  * | ||||||
|  |  * Parameters:			 | ||||||
|  |  *	IN FILE *fd: file descriptor where the banner will be written | ||||||
|  |  *	IN char **lines: The buffer that will be written | ||||||
|  |  *	IN int size: Size of the buffer | ||||||
|  |  *	IN int starLength: This parameter provides the width of the banner | ||||||
|  |  *	 | ||||||
|  |  * Description:			 | ||||||
|  |  *	This functions takes the buffer and writes the buffer in the file as  | ||||||
|  |  *	per the requested banner | ||||||
|  |  * Returns: void | ||||||
|  |  ***************************************************************************/ | ||||||
|  | #ifdef DEBUG | ||||||
| void UpnpDisplayBanner( | void UpnpDisplayBanner( | ||||||
| 	FILE * fd, | 	IN FILE * fd, | ||||||
| 	const char **lines, | 	IN const char **lines, | ||||||
| 	size_t size, | 	IN size_t size, | ||||||
| 	int starLength) | 	IN int starLength) | ||||||
| { | { | ||||||
| 	int leftMarginLength = starLength / 2 + 1; | 	int leftMarginLength = starLength / 2 + 1; | ||||||
| 	int rightMarginLength = starLength / 2 + 1; | 	int rightMarginLength = starLength / 2 + 1; | ||||||
| @@ -275,81 +386,12 @@ void UpnpDisplayBanner( | |||||||
| 		rightMargin[rightMarginLength] = 0; | 		rightMargin[rightMarginLength] = 0; | ||||||
| 		fprintf( fd, "*%s%s%s*\n", leftMargin, line, rightMargin ); | 		fprintf( fd, "*%s%s%s*\n", leftMargin, line, rightMargin ); | ||||||
| 	} | 	} | ||||||
| 	fprintf(fd, "%s\n\n", stars); | 	fprintf( fd, "%s\n\n", stars ); | ||||||
|  |  | ||||||
| 	free(currentLine); | 	free( currentLine ); | ||||||
| 	free(stars); | 	free( stars ); | ||||||
| 	free(rightMargin); | 	free( rightMargin ); | ||||||
| 	free(leftMargin); | 	free( leftMargin ); | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
| void PrintThreadPoolStats( |  | ||||||
| 	ThreadPool *tp,  |  | ||||||
| 	const char *DbgFileName, |  | ||||||
| 	int DbgLineNo, |  | ||||||
| 	const char *msg) |  | ||||||
| { |  | ||||||
| 	ThreadPoolStats stats; |  | ||||||
| 	ThreadPoolGetStats(tp, &stats); |  | ||||||
| 	UpnpPrintf(UPNP_INFO, API, DbgFileName, DbgLineNo,  |  | ||||||
| 		"%s\n" |  | ||||||
| 		"High Jobs pending: %d\n" |  | ||||||
| 		"Med Jobs Pending: %d\n" |  | ||||||
| 		"Low Jobs Pending: %d\n" |  | ||||||
| 		"Average wait in High Q in milliseconds: %lf\n" |  | ||||||
| 		"Average wait in Med Q in milliseconds: %lf\n" |  | ||||||
| 		"Average wait in Low Q in milliseconds: %lf\n" |  | ||||||
| 		"Max Threads Used: %d\n" |  | ||||||
| 		"Worker Threads: %d\n" |  | ||||||
| 		"Persistent Threads: %d\n" |  | ||||||
| 		"Idle Threads: %d\n" |  | ||||||
| 		"Total Threads: %d\n" |  | ||||||
| 		"Total Work Time: %lf\n" |  | ||||||
| 		"Total Idle Time: %lf\n", |  | ||||||
| 		msg, |  | ||||||
| 		stats.currentJobsHQ, |  | ||||||
| 		stats.currentJobsMQ, |  | ||||||
| 		stats.currentJobsLQ, |  | ||||||
| 		stats.avgWaitHQ, |  | ||||||
| 		stats.avgWaitMQ, |  | ||||||
| 		stats.avgWaitLQ, |  | ||||||
| 		stats.maxThreads, |  | ||||||
| 		stats.workerThreads, |  | ||||||
| 		stats.persistentThreads, |  | ||||||
| 		stats.idleThreads, |  | ||||||
| 		stats.totalThreads, |  | ||||||
| 		stats.totalWorkTime, |  | ||||||
| 		stats.totalIdleTime); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void printNodes(IXML_Node *tmpRoot, int depth) |  | ||||||
| { |  | ||||||
|     int i; |  | ||||||
|     IXML_NodeList *NodeList1; |  | ||||||
|     IXML_Node *ChildNode1; |  | ||||||
|     unsigned short NodeType; |  | ||||||
|     const DOMString NodeValue; |  | ||||||
|     const DOMString NodeName; |  | ||||||
|     NodeList1 = ixmlNode_getChildNodes(tmpRoot); |  | ||||||
|     for (i = 0; i < 100; ++i) { |  | ||||||
|         ChildNode1 = ixmlNodeList_item(NodeList1, i); |  | ||||||
|         if (ChildNode1 == NULL) { |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|      |  | ||||||
|         printNodes(ChildNode1, depth+1); |  | ||||||
|         NodeType = ixmlNode_getNodeType(ChildNode1); |  | ||||||
|         NodeValue = ixmlNode_getNodeValue(ChildNode1); |  | ||||||
|         NodeName = ixmlNode_getNodeName(ChildNode1); |  | ||||||
|         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); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* DEBUG */ |  | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,475 +1,584 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "config.h" | #include "config.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #if EXCLUDE_DOM == 0 | #if EXCLUDE_DOM == 0 | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "upnp.h" |  | ||||||
| #include "upnptools.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "uri.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdarg.h> | #include <stdarg.h> | ||||||
| #include <stdio.h> | #include "upnptools.h" | ||||||
|  | #include "uri.h" | ||||||
|  |  | ||||||
| /*! Maximum action header buffer length. */ |  | ||||||
| #define HEADER_LENGTH 2000 | #define HEADER_LENGTH 2000 | ||||||
|  |  | ||||||
|  | //Structure to maintain a error code and string associated with the  | ||||||
| /*! | // error code | ||||||
|  * \brief Structure to maintain a error code and string associated with the |  | ||||||
|  * error code. |  | ||||||
|  */ |  | ||||||
| struct ErrorString { | struct ErrorString { | ||||||
| 	/*! Error code. */ |     int rc;                     /* error code */ | ||||||
| 	int rc; |     const char *rcError;        /* error description */ | ||||||
| 	/*! Error description. */ |  | ||||||
| 	const char *rcError; |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | //Intializing the array of error structures.  | ||||||
| /*! | struct ErrorString ErrorMessages[] = { {UPNP_E_SUCCESS, "UPNP_E_SUCCESS"}, | ||||||
|  * \brief Array of error structures. | {UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"}, | ||||||
|  */ | {UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"}, | ||||||
| struct ErrorString ErrorMessages[] = { | {UPNP_E_OUTOF_HANDLE, "UPNP_E_OUTOF_HANDLE"}, | ||||||
| 	{UPNP_E_SUCCESS, "UPNP_E_SUCCESS"}, | {UPNP_E_OUTOF_CONTEXT, "UPNP_E_OUTOF_CONTEXT"}, | ||||||
| 	{UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"}, | {UPNP_E_OUTOF_MEMORY, "UPNP_E_OUTOF_MEMOR"}, | ||||||
| 	{UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"}, | {UPNP_E_INIT, "UPNP_E_INIT"}, | ||||||
| 	{UPNP_E_OUTOF_HANDLE, "UPNP_E_OUTOF_HANDLE"}, | {UPNP_E_BUFFER_TOO_SMALL, "UPNP_E_BUFFER_TOO_SMALL"}, | ||||||
| 	{UPNP_E_OUTOF_CONTEXT, "UPNP_E_OUTOF_CONTEXT"}, | {UPNP_E_INVALID_DESC, "UPNP_E_INVALID_DESC"}, | ||||||
| 	{UPNP_E_OUTOF_MEMORY, "UPNP_E_OUTOF_MEMORY"}, | {UPNP_E_INVALID_URL, "UPNP_E_INVALID_URL"}, | ||||||
| 	{UPNP_E_INIT, "UPNP_E_INIT"}, | {UPNP_E_INVALID_SID, "UPNP_E_INVALID_SID"}, | ||||||
| 	{UPNP_E_BUFFER_TOO_SMALL, "UPNP_E_BUFFER_TOO_SMALL"}, | {UPNP_E_INVALID_DEVICE, "UPNP_E_INVALID_DEVICE"}, | ||||||
| 	{UPNP_E_INVALID_DESC, "UPNP_E_INVALID_DESC"}, | {UPNP_E_INVALID_SERVICE, "UPNP_E_INVALID_SERVICE"}, | ||||||
| 	{UPNP_E_INVALID_URL, "UPNP_E_INVALID_URL"}, | {UPNP_E_BAD_RESPONSE, "UPNP_E_BAD_RESPONSE"}, | ||||||
| 	{UPNP_E_INVALID_SID, "UPNP_E_INVALID_SID"}, | {UPNP_E_BAD_REQUEST, "UPNP_E_BAD_REQUEST"}, | ||||||
| 	{UPNP_E_INVALID_DEVICE, "UPNP_E_INVALID_DEVICE"}, | {UPNP_E_INVALID_ACTION, "UPNP_E_INVALID_ACTION"}, | ||||||
| 	{UPNP_E_INVALID_SERVICE, "UPNP_E_INVALID_SERVICE"}, | {UPNP_E_FINISH, "UPNP_E_FINISH"}, | ||||||
| 	{UPNP_E_BAD_RESPONSE, "UPNP_E_BAD_RESPONSE"}, | {UPNP_E_INIT_FAILED, "UPNP_E_INIT_FAILED"}, | ||||||
| 	{UPNP_E_BAD_REQUEST, "UPNP_E_BAD_REQUEST"}, | {UPNP_E_BAD_HTTPMSG, "UPNP_E_BAD_HTTPMSG"}, | ||||||
| 	{UPNP_E_INVALID_ACTION, "UPNP_E_INVALID_ACTION"}, | {UPNP_E_NETWORK_ERROR, "UPNP_E_NETWORK_ERROR"}, | ||||||
| 	{UPNP_E_FINISH, "UPNP_E_FINISH"}, | {UPNP_E_SOCKET_WRITE, "UPNP_E_SOCKET_WRITE"}, | ||||||
| 	{UPNP_E_INIT_FAILED, "UPNP_E_INIT_FAILED"}, | {UPNP_E_SOCKET_READ, "UPNP_E_SOCKET_READ"}, | ||||||
| 	{UPNP_E_URL_TOO_BIG, "UPNP_E_URL_TOO_BIG"}, | {UPNP_E_SOCKET_BIND, "UPNP_E_SOCKET_BIND"}, | ||||||
| 	{UPNP_E_BAD_HTTPMSG, "UPNP_E_BAD_HTTPMSG"}, | {UPNP_E_SOCKET_CONNECT, "UPNP_E_SOCKET_CONNECT"}, | ||||||
| 	{UPNP_E_ALREADY_REGISTERED, "UPNP_E_ALREADY_REGISTERED"}, | {UPNP_E_OUTOF_SOCKET, "UPNP_E_OUTOF_SOCKET"}, | ||||||
| 	{UPNP_E_INVALID_INTERFACE, "UPNP_E_INVALID_INTERFACE"}, | {UPNP_E_LISTEN, "UPNP_E_LISTEN"}, | ||||||
| 	{UPNP_E_NETWORK_ERROR, "UPNP_E_NETWORK_ERROR"}, | {UPNP_E_EVENT_PROTOCOL, "UPNP_E_EVENT_PROTOCOL"}, | ||||||
| 	{UPNP_E_SOCKET_WRITE, "UPNP_E_SOCKET_WRITE"}, | {UPNP_E_SUBSCRIBE_UNACCEPTED, "UPNP_E_SUBSCRIBE_UNACCEPTED"}, | ||||||
| 	{UPNP_E_SOCKET_READ, "UPNP_E_SOCKET_READ"}, | {UPNP_E_UNSUBSCRIBE_UNACCEPTED, "UPNP_E_UNSUBSCRIBE_UNACCEPTED"}, | ||||||
| 	{UPNP_E_SOCKET_BIND, "UPNP_E_SOCKET_BIND"}, | {UPNP_E_NOTIFY_UNACCEPTED, "UPNP_E_NOTIFY_UNACCEPTED"}, | ||||||
| 	{UPNP_E_SOCKET_CONNECT, "UPNP_E_SOCKET_CONNECT"}, | {UPNP_E_INTERNAL_ERROR, "UPNP_E_INTERNAL_ERROR"}, | ||||||
| 	{UPNP_E_OUTOF_SOCKET, "UPNP_E_OUTOF_SOCKET"}, | {UPNP_E_INVALID_ARGUMENT, "UPNP_E_INVALID_ARGUMENT"}, | ||||||
| 	{UPNP_E_LISTEN, "UPNP_E_LISTEN"}, | {UPNP_E_OUTOF_BOUNDS, "UPNP_E_OUTOF_BOUNDS"} | ||||||
| 	{UPNP_E_TIMEDOUT, "UPNP_E_TIMEDOUT"}, |  | ||||||
| 	{UPNP_E_SOCKET_ERROR, "UPNP_E_SOCKET_ERROR"}, |  | ||||||
| 	{UPNP_E_FILE_WRITE_ERROR, "UPNP_E_FILE_WRITE_ERROR"}, |  | ||||||
| 	{UPNP_E_CANCELED, "UPNP_E_CANCELED"}, |  | ||||||
| 	{UPNP_E_EVENT_PROTOCOL, "UPNP_E_EVENT_PROTOCOL"}, |  | ||||||
| 	{UPNP_E_SUBSCRIBE_UNACCEPTED, "UPNP_E_SUBSCRIBE_UNACCEPTED"}, |  | ||||||
| 	{UPNP_E_UNSUBSCRIBE_UNACCEPTED, "UPNP_E_UNSUBSCRIBE_UNACCEPTED"}, |  | ||||||
| 	{UPNP_E_NOTIFY_UNACCEPTED, "UPNP_E_NOTIFY_UNACCEPTED"}, |  | ||||||
| 	{UPNP_E_INVALID_ARGUMENT, "UPNP_E_INVALID_ARGUMENT"}, |  | ||||||
| 	{UPNP_E_FILE_NOT_FOUND, "UPNP_E_FILE_NOT_FOUND"}, |  | ||||||
| 	{UPNP_E_FILE_READ_ERROR, "UPNP_E_FILE_READ_ERROR"}, |  | ||||||
| 	{UPNP_E_EXT_NOT_XML, "UPNP_E_EXT_NOT_XML"}, |  | ||||||
| 	{UPNP_E_NO_WEB_SERVER, "UPNP_E_NO_WEB_SERVER"}, |  | ||||||
| 	{UPNP_E_OUTOF_BOUNDS, "UPNP_E_OUTOF_BOUNDS"}, |  | ||||||
| 	{UPNP_E_NOT_FOUND, "UPNP_E_NOT_FOUND"}, |  | ||||||
| 	{UPNP_E_INTERNAL_ERROR, "UPNP_E_INTERNAL_ERROR"}, |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| const char *UpnpGetErrorMessage(int rc) | * Function : UpnpGetErrorMessage											 | ||||||
|  | *																	 | ||||||
|  | * Parameters:														 | ||||||
|  | *	IN int rc: error code | ||||||
|  | *																	 | ||||||
|  | * Description:														 | ||||||
|  | *	This functions returns the error string mapped to the error code  | ||||||
|  | * Returns: const char * | ||||||
|  | *	return either the right string or "Unknown Error" | ||||||
|  | ***************************************************************************/ | ||||||
|  | const char * | ||||||
|  | UpnpGetErrorMessage( IN int rc ) | ||||||
| { | { | ||||||
| 	int i; |     int i; | ||||||
|  |  | ||||||
| 	for (i = 0; i < sizeof (ErrorMessages) / sizeof (ErrorMessages[0]); ++i) { |     for( i = 0; i < sizeof( ErrorMessages ) / sizeof( ErrorMessages[0] ); | ||||||
| 		if (rc == ErrorMessages[i].rc) { |          i++ ) { | ||||||
| 			return ErrorMessages[i].rcError; |         if( rc == ErrorMessages[i].rc ) | ||||||
| 		} |             return ErrorMessages[i].rcError; | ||||||
| 	} |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return "Unknown Error"; | ||||||
|  |  | ||||||
| 	return "Unknown error code"; |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| /*! | * Function : UpnpResolveURL											 | ||||||
|  * \todo There is some unnecessary allocation and deallocation going on here | *																	 | ||||||
|  * because of the way resolve_rel_url() was originally written and used. In the | * Parameters:														 | ||||||
|  * future it would be nice to clean this up. | *	IN char * BaseURL: Base URL string | ||||||
|  */ | *	IN char * RelURL: relative URL string | ||||||
| int UpnpResolveURL( | *	OUT char * AbsURL: Absolute URL string | ||||||
| 	const char *BaseURL, | * Description:														 | ||||||
| 	const char *RelURL, | *	This functions concatinates the base URL and relative URL to generate  | ||||||
| 	char *AbsURL) | *	the absolute URL | ||||||
|  | * Returns: int | ||||||
|  | *	return either UPNP_E_SUCCESS or appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
|  | int | ||||||
|  | UpnpResolveURL( IN const char *BaseURL, | ||||||
|  |                 IN const char *RelURL, | ||||||
|  |                 OUT char *AbsURL ) | ||||||
| { | { | ||||||
| 	int ret = UPNP_E_SUCCESS; |     // There is some unnecessary allocation and | ||||||
| 	char *tempRel = NULL; |     // deallocation going on here because of the way | ||||||
|  |     // resolve_rel_url was originally written and used | ||||||
|  |     // in the future it would be nice to clean this up | ||||||
|  |  | ||||||
| 	if (RelURL == NULL) { |     char *tempRel; | ||||||
| 		ret = UPNP_E_INVALID_PARAM; |  | ||||||
| 		goto ExitFunction; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	tempRel = resolve_rel_url((char *)BaseURL, (char *)RelURL); |     if( RelURL == NULL ) | ||||||
| 	if (tempRel) { |         return UPNP_E_INVALID_PARAM; | ||||||
| 		strcpy(AbsURL, tempRel); |  | ||||||
| 		free(tempRel); |     tempRel = NULL; | ||||||
| 	} else { |  | ||||||
| 		ret = UPNP_E_INVALID_URL; |     tempRel = resolve_rel_url((char*) BaseURL, (char*) RelURL ); | ||||||
| 	} |  | ||||||
|  |     if( tempRel ) { | ||||||
|  |         strcpy( AbsURL, tempRel ); | ||||||
|  |         free( tempRel ); | ||||||
|  |     } else { | ||||||
|  |         return UPNP_E_INVALID_URL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return UPNP_E_SUCCESS; | ||||||
|  |  | ||||||
| ExitFunction: |  | ||||||
| 	return UPNP_E_SUCCESS; |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| /*! | * Function : addToAction											 | ||||||
|  * \brief Adds the argument in the action request or response. | *																	 | ||||||
|  * | * Parameters:														 | ||||||
|  * This function creates the action request or response if it is a first | *	IN int response: flag to tell if the ActionDoc is for response  | ||||||
|  * argument, otherwise it will add the argument in the document. | *					or request | ||||||
|  * | *	INOUT IXML_Document **ActionDoc: request or response document | ||||||
|  * \returns UPNP_E_SUCCESS if successful, otherwise the appropriate error. | *	IN char *ActionName: Name of the action request or response | ||||||
|  */ | *	IN char *ServType: Service type | ||||||
| static int addToAction( | *	IN char * ArgName: Name of the argument | ||||||
| 	/*! [in] flag to tell if the ActionDoc is for response or request. */ | *	IN char * ArgValue: Value of the argument | ||||||
| 	int response, | * | ||||||
| 	/*! [in,out] Request or response document. */ | * Description:		 | ||||||
| 	IXML_Document **ActionDoc, | *	This function adds the argument in the action request or response.  | ||||||
| 	/*! [in] Name of the action request or response. */ | * This function creates the action request or response if it is a first | ||||||
| 	const char *ActionName, | * argument else it will add the argument in the document | ||||||
| 	/*! [in] Service type. */ | * | ||||||
| 	const char *ServType, | * Returns: int | ||||||
| 	/*! [in] Name of the argument. */ | *	returns UPNP_E_SUCCESS if successful else returns appropriate error | ||||||
| 	const char *ArgName, | ***************************************************************************/ | ||||||
| 	/*! [in] Value of the argument. */ | static int | ||||||
| 	const char *ArgValue) | addToAction( IN int response, | ||||||
|  |              INOUT IXML_Document ** ActionDoc, | ||||||
|  |              IN const char *ActionName, | ||||||
|  |              IN const char *ServType, | ||||||
|  |              IN const char *ArgName, | ||||||
|  |              IN const char *ArgValue ) | ||||||
| { | { | ||||||
| 	char *ActBuff = NULL; |     char *ActBuff = NULL; | ||||||
| 	IXML_Node *node = NULL; |     IXML_Node *node = NULL; | ||||||
| 	IXML_Element *Ele = NULL; |     IXML_Element *Ele = NULL; | ||||||
| 	IXML_Node *Txt = NULL; |     IXML_Node *Txt = NULL; | ||||||
| 	int rc = 0; |     int rc = 0; | ||||||
|  |  | ||||||
| 	if (ActionName == NULL || ServType == NULL) { |     if( ActionName == NULL || ServType == NULL ) { | ||||||
| 		return UPNP_E_INVALID_PARAM; |         return UPNP_E_INVALID_PARAM; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (*ActionDoc == NULL) { |     if( *ActionDoc == NULL ) { | ||||||
| 		ActBuff = (char *)malloc(HEADER_LENGTH); |         ActBuff = ( char * )malloc( HEADER_LENGTH ); | ||||||
| 		if (ActBuff == NULL) { |         if( ActBuff == NULL ) { | ||||||
| 			return UPNP_E_OUTOF_MEMORY; |             return UPNP_E_OUTOF_MEMORY; | ||||||
| 		} |         } | ||||||
|  |  | ||||||
| 		if (response) { |         if( response ) { | ||||||
| 			sprintf(ActBuff, |             sprintf( ActBuff, | ||||||
| 				"<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", |                 "<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", | ||||||
| 				ActionName, ServType, ActionName); |                 ActionName, ServType, ActionName ); | ||||||
| 		} else { |         } else { | ||||||
| 			sprintf(ActBuff, |             sprintf( ActBuff, | ||||||
| 				"<u:%s xmlns:u=\"%s\">\r\n</u:%s>", |                 "<u:%s xmlns:u=\"%s\">\r\n</u:%s>", | ||||||
| 				ActionName, ServType, ActionName); |                 ActionName, ServType, ActionName ); | ||||||
| 		} |         } | ||||||
|  |  | ||||||
| 		rc = ixmlParseBufferEx(ActBuff, ActionDoc); |         rc = ixmlParseBufferEx( ActBuff, ActionDoc ); | ||||||
| 		free(ActBuff); |         free( ActBuff ); | ||||||
| 		if (rc != IXML_SUCCESS) { |         if( rc != IXML_SUCCESS ) { | ||||||
| 			if (rc == IXML_INSUFFICIENT_MEMORY) { |             if( rc == IXML_INSUFFICIENT_MEMORY ) { | ||||||
| 				return UPNP_E_OUTOF_MEMORY; |                 return UPNP_E_OUTOF_MEMORY; | ||||||
| 			} else { |             } else { | ||||||
| 				return UPNP_E_INVALID_DESC; |                 return UPNP_E_INVALID_DESC; | ||||||
| 			} |             } | ||||||
| 		} |         } | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (ArgName != NULL /*&& ArgValue != NULL */) { |     if( ArgName != NULL /*&& ArgValue != NULL */  ) { | ||||||
| 		node = ixmlNode_getFirstChild((IXML_Node *)*ActionDoc); |         node = ixmlNode_getFirstChild( ( IXML_Node * ) * ActionDoc ); | ||||||
| 		Ele = ixmlDocument_createElement(*ActionDoc, ArgName); |         Ele = ixmlDocument_createElement( *ActionDoc, ArgName ); | ||||||
| 		if(ArgValue) { |         if( ArgValue ) { | ||||||
| 			Txt = ixmlDocument_createTextNode(*ActionDoc, ArgValue); |             Txt = ixmlDocument_createTextNode( *ActionDoc, ArgValue ); | ||||||
| 			ixmlNode_appendChild((IXML_Node *)Ele, Txt); |             ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt ); | ||||||
| 		} |         } | ||||||
| 		ixmlNode_appendChild(node, (IXML_Node *)Ele); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return UPNP_E_SUCCESS; |         ixmlNode_appendChild( node, ( IXML_Node * ) Ele ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return UPNP_E_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| /*! | * Function : makeAction											 | ||||||
|  * \brief Creates the action request or response from the argument list. | *																	 | ||||||
|  * | * Parameters:														 | ||||||
|  * \return Action request or response document if successful, otherwise | *	IN int response: flag to tell if the ActionDoc is for response  | ||||||
|  * 	returns NULL | *					or request | ||||||
|  */ | *	IN char * ActionName: Name of the action request or response | ||||||
| static IXML_Document *makeAction( | *	IN char * ServType: Service type | ||||||
| 	/*! [in] flag to tell if the ActionDoc is for response or request. */ | *	IN int NumArg :Number of arguments in the action request or response | ||||||
| 	int response, | *	IN char * Arg : pointer to the first argument | ||||||
| 	/*! [in] Name of the action request or response. */ | *	IN va_list ArgList: Argument list | ||||||
| 	const char *ActionName, | * | ||||||
| 	/*! [in] Service type. */ | * Description:		 | ||||||
| 	const char *ServType, | *	This function creates the action request or response from the argument | ||||||
| 	/*! [in] Number of arguments in the action request or response. */ | * list. | ||||||
| 	int NumArg, | * Returns: IXML_Document * | ||||||
| 	/*! [in] pointer to the first argument. */ | *	returns action request or response document if successful  | ||||||
| 	const char *Arg, | *	else returns NULL | ||||||
| 	/*! [in] Argument list. */ | ***************************************************************************/ | ||||||
| 	va_list ArgList) | static IXML_Document * | ||||||
|  | makeAction( IN int response, | ||||||
|  |             IN const char *ActionName, | ||||||
|  |             IN const char *ServType, | ||||||
|  |             IN int NumArg, | ||||||
|  |             IN const char *Arg, | ||||||
|  |             IN va_list ArgList ) | ||||||
| { | { | ||||||
| 	const char *ArgName; |     const char *ArgName; | ||||||
| 	const char *ArgValue; |     const char *ArgValue; | ||||||
| 	char *ActBuff; |     char *ActBuff; | ||||||
| 	int Idx = 0; |     int Idx = 0; | ||||||
| 	IXML_Document *ActionDoc; |     IXML_Document *ActionDoc; | ||||||
| 	IXML_Node *node; |     IXML_Node *node; | ||||||
| 	IXML_Element *Ele; |     IXML_Element *Ele; | ||||||
| 	IXML_Node *Txt = NULL; |     IXML_Node *Txt = NULL; | ||||||
|  |  | ||||||
| 	if (ActionName == NULL || ServType == NULL) { |     if( ActionName == NULL || ServType == NULL ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	ActBuff = (char *)malloc(HEADER_LENGTH); |     ActBuff = ( char * )malloc( HEADER_LENGTH ); | ||||||
| 	if (ActBuff == NULL) { |     if( ActBuff == NULL ) { | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (response) { |     if( response ) { | ||||||
| 		sprintf(ActBuff, |         sprintf( ActBuff, | ||||||
| 			"<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", |             "<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", | ||||||
| 			ActionName, ServType, ActionName); |             ActionName, ServType, ActionName ); | ||||||
| 	} else { |     } else { | ||||||
| 		sprintf(ActBuff, |         sprintf( ActBuff, | ||||||
| 			"<u:%s xmlns:u=\"%s\">\r\n</u:%s>", |             "<u:%s xmlns:u=\"%s\">\r\n</u:%s>", | ||||||
| 			ActionName, ServType, ActionName); |             ActionName, ServType, ActionName ); | ||||||
| 	} |     } | ||||||
| 	if (ixmlParseBufferEx(ActBuff, &ActionDoc) != IXML_SUCCESS) { |  | ||||||
| 		free(ActBuff); |  | ||||||
| 		return NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	free(ActBuff); |     if( ixmlParseBufferEx( ActBuff, &ActionDoc ) != IXML_SUCCESS ) { | ||||||
| 	if(ActionDoc == NULL) { |         free( ActBuff ); | ||||||
| 		return NULL; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (NumArg > 0) { |     free( ActBuff ); | ||||||
| 		//va_start(ArgList, Arg); |  | ||||||
| 		ArgName = Arg; |  | ||||||
| 		for ( ; ; ) { |  | ||||||
| 			ArgValue = va_arg(ArgList, const char *); |  | ||||||
| 			if (ArgName != NULL) { |  | ||||||
| 				node = ixmlNode_getFirstChild((IXML_Node *)ActionDoc); |  | ||||||
| 				Ele = ixmlDocument_createElement(ActionDoc, ArgName); |  | ||||||
| 				if (ArgValue) { |  | ||||||
| 					Txt = ixmlDocument_createTextNode(ActionDoc, ArgValue); |  | ||||||
| 					ixmlNode_appendChild((IXML_Node *)Ele, Txt); |  | ||||||
| 				} |  | ||||||
| 				ixmlNode_appendChild(node, (IXML_Node *)Ele); |  | ||||||
| 			} |  | ||||||
| 			if (++Idx < NumArg) { |  | ||||||
| 				ArgName = va_arg(ArgList, const char *); |  | ||||||
| 			} else { |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		//va_end(ArgList); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return ActionDoc; |     if( ActionDoc == NULL ) { | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if( NumArg > 0 ) { | ||||||
|  |         //va_start(ArgList, Arg); | ||||||
|  |         ArgName = Arg; | ||||||
|  |         for ( ; ; ) { | ||||||
|  |             ArgValue = va_arg( ArgList, const char * ); | ||||||
|  |  | ||||||
|  |             if( ArgName != NULL ) { | ||||||
|  |                 node = ixmlNode_getFirstChild( ( IXML_Node * ) ActionDoc ); | ||||||
|  |                 Ele = ixmlDocument_createElement( ActionDoc, ArgName ); | ||||||
|  |                 if( ArgValue ) { | ||||||
|  |                     Txt = | ||||||
|  |                         ixmlDocument_createTextNode( ActionDoc, ArgValue ); | ||||||
|  |                     ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 ixmlNode_appendChild( node, ( IXML_Node * ) Ele ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (++Idx < NumArg) { | ||||||
|  |                 ArgName = va_arg( ArgList, const char * ); | ||||||
|  |             } else { | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         //va_end(ArgList); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return ActionDoc; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| IXML_Document *UpnpMakeAction( | * Function : UpnpMakeAction											 | ||||||
| 	const char *ActionName, | *																	 | ||||||
| 	const char *ServType, | * Parameters:														 | ||||||
| 	int NumArg, | *	IN char * ActionName: Name of the action request or response | ||||||
| 	const char *Arg, | *	IN char * ServType: Service type | ||||||
| 	...) | *	IN int NumArg :Number of arguments in the action request or response | ||||||
|  | *	IN char * Arg : pointer to the first argument | ||||||
|  | *	IN ... : variable argument list | ||||||
|  | *	IN va_list ArgList: Argument list | ||||||
|  | * | ||||||
|  | * Description:		 | ||||||
|  | *	This function creates the action request from the argument | ||||||
|  | * list. Its a wrapper function that calls makeAction function to create | ||||||
|  | * the action request. | ||||||
|  | * | ||||||
|  | * Returns: IXML_Document * | ||||||
|  | *	returns action request document if successful  | ||||||
|  | *	else returns NULL | ||||||
|  | ***************************************************************************/ | ||||||
|  | IXML_Document * | ||||||
|  | UpnpMakeAction( const char *ActionName, | ||||||
|  |                 const char *ServType, | ||||||
|  |                 int NumArg, | ||||||
|  |                 const char *Arg, | ||||||
|  |                 ... ) | ||||||
| { | { | ||||||
| 	va_list ArgList; |     va_list ArgList; | ||||||
| 	IXML_Document *out = NULL; |     IXML_Document *out = NULL; | ||||||
|  |  | ||||||
| 	va_start(ArgList, Arg); |     va_start( ArgList, Arg ); | ||||||
| 	out = makeAction(0, ActionName, ServType, NumArg, Arg, ArgList); |     out = makeAction( 0, ActionName, ServType, NumArg, Arg, ArgList ); | ||||||
| 	va_end(ArgList); |     va_end( ArgList ); | ||||||
|  |  | ||||||
| 	return out; |     return out; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| IXML_Document *UpnpMakeActionResponse( | * Function : UpnpMakeActionResponse											 | ||||||
| 	const char *ActionName, | *																	 | ||||||
| 	const char *ServType, | * Parameters:														 | ||||||
| 	int NumArg, | *	IN char * ActionName: Name of the action request or response | ||||||
| 	const char *Arg, | *	IN char * ServType: Service type | ||||||
| 	...) | *	IN int NumArg :Number of arguments in the action request or response | ||||||
|  | *	IN char * Arg : pointer to the first argument | ||||||
|  | *	IN ... : variable argument list | ||||||
|  | *	IN va_list ArgList: Argument list | ||||||
|  | * | ||||||
|  | * Description:		 | ||||||
|  | *	This function creates the action response from the argument | ||||||
|  | * list. Its a wrapper function that calls makeAction function to create | ||||||
|  | * the action response. | ||||||
|  | * | ||||||
|  | * Returns: IXML_Document * | ||||||
|  | *	returns action response document if successful  | ||||||
|  | *	else returns NULL | ||||||
|  | ***************************************************************************/ | ||||||
|  | IXML_Document * | ||||||
|  | UpnpMakeActionResponse( const char *ActionName, | ||||||
|  |                         const char *ServType, | ||||||
|  |                         int NumArg, | ||||||
|  |                         const char *Arg, | ||||||
|  |                         ... ) | ||||||
| { | { | ||||||
| 	va_list ArgList; |     va_list ArgList; | ||||||
| 	IXML_Document *out = NULL; |     IXML_Document *out = NULL; | ||||||
|  |  | ||||||
| 	va_start(ArgList, Arg); |     va_start( ArgList, Arg ); | ||||||
| 	out = makeAction(1, ActionName, ServType, NumArg, Arg, ArgList); |     out = makeAction( 1, ActionName, ServType, NumArg, Arg, ArgList ); | ||||||
| 	va_end(ArgList); |     va_end( ArgList ); | ||||||
|  |  | ||||||
| 	return out; |     return out; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| int UpnpAddToAction( | * Function : UpnpAddToActionResponse									 | ||||||
| 	IXML_Document **ActionDoc, | *																	 | ||||||
| 	const char *ActionName, | * Parameters: | ||||||
| 	const char *ServType, | *	INOUT IXML_Document **ActionResponse: action response document	 | ||||||
| 	const char *ArgName, | *	IN char * ActionName: Name of the action request or response | ||||||
| 	const char *ArgValue) | *	IN char * ServType: Service type | ||||||
|  | *	IN int ArgName :Name of argument to be added in the action response | ||||||
|  | *	IN char * ArgValue : value of the argument | ||||||
|  | * | ||||||
|  | * Description:		 | ||||||
|  | *	This function adds the argument in the action response. Its a wrapper  | ||||||
|  | * function that calls addToAction function to add the argument in the  | ||||||
|  | * action response. | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	returns UPNP_E_SUCCESS if successful  | ||||||
|  | *	else returns appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
|  | int | ||||||
|  | UpnpAddToActionResponse( INOUT IXML_Document ** ActionResponse, | ||||||
|  |                          IN const char *ActionName, | ||||||
|  |                          IN const char *ServType, | ||||||
|  |                          IN const char *ArgName, | ||||||
|  |                          IN const char *ArgValue ) | ||||||
| { | { | ||||||
| 	return addToAction(0, ActionDoc, ActionName, ServType, ArgName, ArgValue); |     return addToAction( 1, ActionResponse, ActionName, ServType, ArgName, | ||||||
|  |                         ArgValue ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| int UpnpAddToActionResponse( | * Function : UpnpAddToAction									 | ||||||
| 	IXML_Document **ActionResponse, | *																	 | ||||||
| 	const char *ActionName, | * Parameters: | ||||||
| 	const char *ServType, | *	INOUT IXML_Document **ActionDoc: action request document	 | ||||||
| 	const char *ArgName, | *	IN char * ActionName: Name of the action request or response | ||||||
| 	const char *ArgValue) | *	IN char * ServType: Service type | ||||||
|  | *	IN int ArgName :Name of argument to be added in the action response | ||||||
|  | *	IN char * ArgValue : value of the argument | ||||||
|  | * | ||||||
|  | * Description:		 | ||||||
|  | *	This function adds the argument in the action request. Its a wrapper  | ||||||
|  | * function that calls addToAction function to add the argument in the  | ||||||
|  | * action request. | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	returns UPNP_E_SUCCESS if successful  | ||||||
|  | *	else returns appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
|  | int | ||||||
|  | UpnpAddToAction( IXML_Document ** ActionDoc, | ||||||
|  |                  const char *ActionName, | ||||||
|  |                  const char *ServType, | ||||||
|  |                  const char *ArgName, | ||||||
|  |                  const char *ArgValue ) | ||||||
| { | { | ||||||
| 	return addToAction(1, ActionResponse, ActionName, ServType, ArgName, ArgValue); |  | ||||||
|  |     return addToAction( 0, ActionDoc, ActionName, ServType, ArgName, | ||||||
|  |                         ArgValue ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| IXML_Document *UpnpCreatePropertySet( | * Function : UpnpAddToPropertySet											 | ||||||
| 	int NumArg, | *																	 | ||||||
| 	const char *Arg, | * Parameters:														 | ||||||
| 	...) | *	INOUT IXML_Document **PropSet: propertyset document | ||||||
|  | *	IN char *ArgName: Name of the argument | ||||||
|  | *	IN char *ArgValue: value of the argument | ||||||
|  | * | ||||||
|  | * Description:		 | ||||||
|  | *	This function adds the argument in the propertyset node  | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	returns UPNP_E_SUCCESS if successful else returns appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
|  | int | ||||||
|  | UpnpAddToPropertySet( INOUT IXML_Document ** PropSet, | ||||||
|  |                       IN const char *ArgName, | ||||||
|  |                       IN const char *ArgValue ) | ||||||
| { | { | ||||||
| 	va_list ArgList; |  | ||||||
| 	int Idx = 0; |  | ||||||
| 	char BlankDoc[] = |  | ||||||
| 		"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">" |  | ||||||
| 		"</e:propertyset>"; |  | ||||||
| 	const char *ArgName, |  | ||||||
| 	*ArgValue; |  | ||||||
| 	IXML_Node *node; |  | ||||||
| 	IXML_Element *Ele; |  | ||||||
| 	IXML_Element *Ele1; |  | ||||||
| 	IXML_Node *Txt; |  | ||||||
| 	IXML_Document *PropSet; |  | ||||||
|  |  | ||||||
| 	if(ixmlParseBufferEx(BlankDoc, &PropSet) != IXML_SUCCESS) { |     char BlankDoc[] = "<e:propertyset xmlns:e=\"urn:schemas" | ||||||
| 		return NULL; |         "-upnp-org:event-1-0\"></e:propertyset>"; | ||||||
| 	} |     IXML_Node *node; | ||||||
|  |     IXML_Element *Ele; | ||||||
|  |     IXML_Element *Ele1; | ||||||
|  |     IXML_Node *Txt; | ||||||
|  |     int rc; | ||||||
|  |  | ||||||
| 	if (NumArg < 1) { |     if( ArgName == NULL ) { | ||||||
| 		return PropSet; |         return UPNP_E_INVALID_PARAM; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	va_start(ArgList, Arg); |     if( *PropSet == NULL ) { | ||||||
| 	ArgName = Arg; |         rc = ixmlParseBufferEx( BlankDoc, PropSet ); | ||||||
| 	while (Idx++ != NumArg) { |         if( rc != IXML_SUCCESS ) { | ||||||
| 		ArgValue = va_arg(ArgList, const char *); |             return UPNP_E_OUTOF_MEMORY; | ||||||
| 		if (ArgName != NULL /*&& ArgValue != NULL */) { |         } | ||||||
| 			node = ixmlNode_getFirstChild((IXML_Node *)PropSet); |     } | ||||||
| 			Ele1 = ixmlDocument_createElement(PropSet, "e:property"); |  | ||||||
| 			Ele = ixmlDocument_createElement(PropSet, ArgName); |  | ||||||
| 			if (ArgValue) { |  | ||||||
| 				Txt = ixmlDocument_createTextNode(PropSet, ArgValue); |  | ||||||
| 				ixmlNode_appendChild((IXML_Node *)Ele, Txt); |  | ||||||
| 			} |  | ||||||
| 			ixmlNode_appendChild((IXML_Node *)Ele1, (IXML_Node *)Ele); |  | ||||||
| 			ixmlNode_appendChild(             node, (IXML_Node *)Ele1); |  | ||||||
| 		} |  | ||||||
| 		ArgName = va_arg(ArgList, const char *); |  | ||||||
| 	} |  | ||||||
| 	va_end(ArgList); |  | ||||||
|  |  | ||||||
| 	return PropSet; |     node = ixmlNode_getFirstChild( ( IXML_Node * ) * PropSet ); | ||||||
|  |  | ||||||
|  |     Ele1 = ixmlDocument_createElement( *PropSet, "e:property" ); | ||||||
|  |     Ele = ixmlDocument_createElement( *PropSet, ArgName ); | ||||||
|  |  | ||||||
|  |     if( ArgValue ) { | ||||||
|  |         Txt = ixmlDocument_createTextNode( *PropSet, ArgValue ); | ||||||
|  |         ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ixmlNode_appendChild( ( IXML_Node * ) Ele1, ( IXML_Node * ) Ele ); | ||||||
|  |     ixmlNode_appendChild( node, ( IXML_Node * ) Ele1 ); | ||||||
|  |  | ||||||
|  |     return UPNP_E_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| int UpnpAddToPropertySet( | * Function : UpnpCreatePropertySet											 | ||||||
| 	IXML_Document **PropSet, | *																	 | ||||||
| 	const char *ArgName, | * Parameters:														 | ||||||
| 	const char *ArgValue) | *	IN int NumArg: Number of argument that will go in the propertyset node | ||||||
|  | *	IN char * Args: argument strings | ||||||
|  | * | ||||||
|  | * Description:		 | ||||||
|  | *	This function creates a propertyset node and put all the input  | ||||||
|  | *	parameters in the node as elements | ||||||
|  | * | ||||||
|  | * Returns: IXML_Document * | ||||||
|  | *	returns the document containing propertyset node. | ||||||
|  | ***************************************************************************/ | ||||||
|  | IXML_Document * | ||||||
|  | UpnpCreatePropertySet( IN int NumArg, | ||||||
|  |                        IN const char *Arg, | ||||||
|  |                        ... ) | ||||||
| { | { | ||||||
| 	char BlankDoc[] = |     va_list ArgList; | ||||||
| 		"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">" |     int Idx = 0; | ||||||
| 		"</e:propertyset>"; |     char BlankDoc[] = "<e:propertyset xmlns:e=\"urn:schemas-" | ||||||
| 	IXML_Node *node; |         "upnp-org:event-1-0\"></e:propertyset>"; | ||||||
| 	IXML_Element *Ele; |     const char *ArgName, | ||||||
| 	IXML_Element *Ele1; |      *ArgValue; | ||||||
| 	IXML_Node *Txt; |     IXML_Node *node; | ||||||
| 	int rc; |     IXML_Element *Ele; | ||||||
|  |     IXML_Element *Ele1; | ||||||
|  |     IXML_Node *Txt; | ||||||
|  |     IXML_Document *PropSet; | ||||||
|  |  | ||||||
| 	if (ArgName == NULL) { |     if( ixmlParseBufferEx( BlankDoc, &PropSet ) != IXML_SUCCESS ) { | ||||||
| 		return UPNP_E_INVALID_PARAM; |         return NULL; | ||||||
| 	} |     } | ||||||
|  |  | ||||||
| 	if (*PropSet == NULL) { |     if( NumArg < 1 ) { | ||||||
| 		rc = ixmlParseBufferEx(BlankDoc, PropSet); |         return NULL; | ||||||
| 		if (rc != IXML_SUCCESS) { |     } | ||||||
| 			return UPNP_E_OUTOF_MEMORY; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	node = ixmlNode_getFirstChild((IXML_Node *)*PropSet); |     va_start( ArgList, Arg ); | ||||||
|  |     ArgName = Arg; | ||||||
|  |  | ||||||
| 	Ele1 = ixmlDocument_createElement(*PropSet, "e:property"); |     while( Idx++ != NumArg ) { | ||||||
| 	Ele = ixmlDocument_createElement(*PropSet, ArgName); |         ArgValue = va_arg( ArgList, const char * ); | ||||||
|  |  | ||||||
| 	if (ArgValue) { |         if( ArgName != NULL /*&& ArgValue != NULL */  ) { | ||||||
| 		Txt = ixmlDocument_createTextNode(*PropSet, ArgValue); |             node = ixmlNode_getFirstChild( ( IXML_Node * ) PropSet ); | ||||||
| 		ixmlNode_appendChild((IXML_Node *)Ele, Txt); |             Ele1 = ixmlDocument_createElement( PropSet, "e:property" ); | ||||||
| 	} |             Ele = ixmlDocument_createElement( PropSet, ArgName ); | ||||||
|  |             if( ArgValue ) { | ||||||
|  |                 Txt = ixmlDocument_createTextNode( PropSet, ArgValue ); | ||||||
|  |                 ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt ); | ||||||
|  |             } | ||||||
|  |  | ||||||
| 	ixmlNode_appendChild((IXML_Node *)Ele1, (IXML_Node *)Ele); |             ixmlNode_appendChild( ( IXML_Node * ) Ele1, | ||||||
| 	ixmlNode_appendChild(node, (IXML_Node *)Ele1); |                                   ( IXML_Node * ) Ele ); | ||||||
|  |             ixmlNode_appendChild( node, ( IXML_Node * ) Ele1 ); | ||||||
|  |         } | ||||||
|  |  | ||||||
| 	return UPNP_E_SUCCESS; |         ArgName = va_arg( ArgList, const char * ); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |     va_end( ArgList ); | ||||||
|  |     return PropSet; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #endif | ||||||
| #endif /* EXCLUDE_DOM == 0 */ |  | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,329 +1,209 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Purpose: This file defines the functions for clients. It defines  | * Purpose: This file defines the functions for clients. It defines  | ||||||
|  * functions for adding and removing clients to and from the client table,  | * functions for adding and removing clients to and from the client table,  | ||||||
|  * adding and accessing subscription and other attributes pertaining to the  | * adding and accessing subscription and other attributes pertaining to the  | ||||||
|  * client   | * client   | ||||||
|  ************************************************************************/ | ************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "config.h" | #include "config.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "client_table.h" | #include "client_table.h" | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| #ifdef INCLUDE_CLIENT_APIS | *	Function :	copy_client_subscription | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
| #include <stdlib.h> // for calloc(), free() | *		client_subscription * in ;	- source client subscription | ||||||
|  | *		client_subscription * out ;	- destination client subscription | ||||||
|  | * | ||||||
| struct SClientSubscription { | *	Description :	Make a copy of the client subscription data | ||||||
| 	int m_renewEventId; | * | ||||||
| 	UpnpString *m_SID; | *	Return : int ; | ||||||
| 	UpnpString *m_actualSID; | *		UPNP_E_OUTOF_MEMORY - On Failure to allocate memory | ||||||
| 	UpnpString *m_eventURL; | *		HTTP_SUCCESS - On Success | ||||||
| 	struct SClientSubscription *m_next; | * | ||||||
| }; | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | CLIENTONLY( int copy_client_subscription( client_subscription * in, | ||||||
| /** Constructor */ |                                           client_subscription * out ) { | ||||||
| ClientSubscription *UpnpClientSubscription_new() |             int len = strlen( in->ActualSID ) + 1; | ||||||
| { |             int len1 = strlen( in->EventURL ) + 1; | ||||||
| 	struct SClientSubscription *p = calloc(1, sizeof (struct SClientSubscription)); |             memcpy( out->sid, in->sid, SID_SIZE ); | ||||||
| #if 0 |             out->sid[SID_SIZE] = 0; | ||||||
| 	p->renewEventId =  0; |             out->ActualSID = ( char * )malloc( len ); | ||||||
| #endif |             if( out->ActualSID == NULL ) | ||||||
| 	p->m_SID = UpnpString_new(); |                 return UPNP_E_OUTOF_MEMORY; | ||||||
| 	p->m_actualSID = UpnpString_new(); |             out->EventURL = ( char * )malloc( len1 ); | ||||||
| 	p->m_eventURL = UpnpString_new(); |             if( out->EventURL == NULL ) { | ||||||
| 	p->m_next = NULL; |                 free(out->ActualSID); | ||||||
|  |                 return UPNP_E_OUTOF_MEMORY; | ||||||
| 	return (ClientSubscription *)p; |             } | ||||||
| } |             memcpy( out->ActualSID, in->ActualSID, len ); | ||||||
|  |             memcpy( out->EventURL, in->EventURL, len1 ); | ||||||
|  |             //copies do not get RenewEvent Ids or next | ||||||
| /** Destructor */ |             out->RenewEventId = -1; out->next = NULL; return HTTP_SUCCESS;} | ||||||
| void UpnpClientSubscription_delete(ClientSubscription *p) |  | ||||||
| { | /************************************************************************ | ||||||
| 	struct SClientSubscription *q = (struct SClientSubscription *)p; | *	Function :	free_client_subscription | ||||||
|  | * | ||||||
| 	if (!q) return; | *	Parameters : | ||||||
|  | *		client_subscription * sub ;	- Client subscription to be freed | ||||||
| 	q->m_renewEventId = 0; | * | ||||||
|  | *	Description :	Free memory allocated for client subscription data. | ||||||
| 	UpnpString_delete(q->m_SID); | *		Remove timer thread associated with this subscription event. | ||||||
| 	q->m_SID = NULL; | * | ||||||
|  | *	Return : void ; | ||||||
| 	UpnpString_delete(q->m_actualSID); | * | ||||||
| 	q->m_actualSID = NULL; | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| 	UpnpString_delete(q->m_eventURL); |             void free_client_subscription( client_subscription * sub ) { | ||||||
| 	q->m_eventURL = NULL; |             upnp_timeout * event; ThreadPoolJob tempJob; if( sub ) { | ||||||
|  |             if( sub->ActualSID ) | ||||||
| 	q->m_next = NULL; |             free( sub->ActualSID ); if( sub->EventURL ) | ||||||
|  |             free( sub->EventURL ); if( sub->RenewEventId != -1 )    //do not remove timer event of copy | ||||||
| 	free(p); |             //invalid timer event id | ||||||
| } |             { | ||||||
|  |             if( TimerThreadRemove | ||||||
|  |                 ( &gTimerThread, sub->RenewEventId, &tempJob ) == 0 ) { | ||||||
| /** Copy Constructor */ |             event = ( upnp_timeout * ) tempJob.arg; | ||||||
| ClientSubscription *UpnpClientSubscription_dup(const ClientSubscription *p) |             free_upnp_timeout( event );} | ||||||
| { |             } | ||||||
| 	ClientSubscription *q = UpnpClientSubscription_new(); |  | ||||||
| 	 |             sub->RenewEventId = -1;} | ||||||
| 	UpnpClientSubscription_assign(q, p); |             } | ||||||
| 	 |  | ||||||
| 	return q; | /************************************************************************ | ||||||
| } | *	Function :	freeClientSubList | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
| /** Assignment operator */ | *		client_subscription * list ; Client subscription  | ||||||
| void UpnpClientSubscription_assign(ClientSubscription *q, const ClientSubscription *p) | * | ||||||
| { | *	Description :	Free the client subscription table. | ||||||
| 	if (q != p) { | * | ||||||
| 		// Do not copy RenewEventId | *	Return : void ; | ||||||
| 		((struct SClientSubscription *)q)->m_renewEventId = -1; | * | ||||||
| 		UpnpClientSubscription_set_SID(q, UpnpClientSubscription_get_SID(p)); | *	Note : | ||||||
| 		UpnpClientSubscription_set_ActualSID(q, UpnpClientSubscription_get_ActualSID(p)); | ************************************************************************/ | ||||||
| 		UpnpClientSubscription_set_EventURL(q, UpnpClientSubscription_get_EventURL(p)); |             void freeClientSubList( client_subscription * list ) { | ||||||
| 		// Do not copy m_next |             client_subscription * next; while( list ) { | ||||||
| 		((struct SClientSubscription *)q)->m_next = NULL; |             free_client_subscription( list ); | ||||||
| 	} |             next = list->next; free( list ); list = next;} | ||||||
| } |             } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| int UpnpClientSubscription_get_RenewEventId(const ClientSubscription *p) | *	Function :	RemoveClientSubClientSID | ||||||
| { | * | ||||||
| 	return ((struct SClientSubscription *)p)->m_renewEventId; | *	Parameters : | ||||||
| } | *		client_subscription **head ; Head of the subscription list	 | ||||||
|  | *		const Upnp_SID sid ;		 Subscription ID to be mactched | ||||||
|  | * | ||||||
| void UpnpClientSubscription_set_RenewEventId(ClientSubscription *p, int n) | *	Description :	Remove the client subscription matching the  | ||||||
| { | *		subscritpion id represented by the const Upnp_SID sid parameter  | ||||||
| 	((struct SClientSubscription *)p)->m_renewEventId = n; | *		from the table and update the table. | ||||||
| } | * | ||||||
|  | *	Return : void ; | ||||||
|  | * | ||||||
| const UpnpString *UpnpClientSubscription_get_SID(const ClientSubscription *p) | *	Note : | ||||||
| { | ************************************************************************/ | ||||||
| 	return ((struct SClientSubscription *)p)->m_SID; |             void RemoveClientSubClientSID( client_subscription ** head, | ||||||
| } |                                            const Upnp_SID sid ) { | ||||||
|  |             client_subscription * finger = ( *head ); | ||||||
| const char *UpnpClientSubscription_get_SID_cstr(const ClientSubscription *p) |             client_subscription * previous = NULL; while( finger ) { | ||||||
| { |             if( !( strcmp( sid, finger->sid ) ) ) { | ||||||
| 	return UpnpString_get_String(UpnpClientSubscription_get_SID(p)); |             if( previous ) | ||||||
| } |             previous->next = finger->next; | ||||||
|  |             else | ||||||
|  |             ( *head ) = finger->next; | ||||||
| void UpnpClientSubscription_set_SID(ClientSubscription *p, const UpnpString *s) |             finger->next = NULL; | ||||||
| { |             freeClientSubList( finger ); finger = NULL;} | ||||||
| 	UpnpString_delete(((struct SClientSubscription *)p)->m_SID); |             else | ||||||
| 	((struct SClientSubscription *)p)->m_SID = UpnpString_dup(s); |             { | ||||||
| } |             previous = finger; finger = finger->next;} | ||||||
|  |             } | ||||||
|  |             } | ||||||
| void UpnpClientSubscription_strcpy_SID(ClientSubscription *p, const char *s) |  | ||||||
| { | /************************************************************************ | ||||||
| 	UpnpString_delete(((struct SClientSubscription *)p)->m_SID); | *	Function :	GetClientSubClientSID | ||||||
| 	((struct SClientSubscription *)p)->m_SID = UpnpString_new(); | * | ||||||
| 	UpnpString_set_String(((struct SClientSubscription *)p)->m_SID, s); | *	Parameters : | ||||||
| } | *		client_subscription *head ; Head of the subscription list	 | ||||||
|  | *		const Upnp_SID sid ;		Subscription ID to be matched | ||||||
|  | * | ||||||
|  | *	Description :	Return the client subscription from the client table  | ||||||
| const UpnpString *UpnpClientSubscription_get_ActualSID(const ClientSubscription *p) | *		that matches const Upnp_SID sid subscrition id value.  | ||||||
| { | * | ||||||
| 	return ((struct SClientSubscription *)p)->m_actualSID; | *	Return : client_subscription * ; The matching subscription | ||||||
| } | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| const char *UpnpClientSubscription_get_ActualSID_cstr(const ClientSubscription *p) |             client_subscription * | ||||||
| { |             GetClientSubClientSID( client_subscription * head, | ||||||
| 	return UpnpString_get_String(UpnpClientSubscription_get_ActualSID(p)); |                                    const Upnp_SID sid ) { | ||||||
| } |             client_subscription * next = head; while( next ) { | ||||||
|  |             if( !strcmp( next->sid, sid ) ) | ||||||
|  |             break; | ||||||
| void UpnpClientSubscription_set_ActualSID(ClientSubscription *p, const UpnpString *s) |             else | ||||||
| { |             { | ||||||
| 	UpnpString_delete(((struct SClientSubscription *)p)->m_actualSID); |             next = next->next;} | ||||||
| 	((struct SClientSubscription *)p)->m_actualSID = UpnpString_dup(s); |             } | ||||||
| } |             return next;} | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| void UpnpClientSubscription_strcpy_ActualSID(ClientSubscription *p, const char *s) | *	Function :	GetClientSubActualSID | ||||||
| { | * | ||||||
| 	UpnpString_delete(((struct SClientSubscription *)p)->m_actualSID); | *	Parameters : | ||||||
| 	((struct SClientSubscription *)p)->m_actualSID = UpnpString_new(); | *		client_subscription *head ;	Head of the subscription list		 | ||||||
| 	UpnpString_set_String(((struct SClientSubscription *)p)->m_actualSID, s); | *		token * sid ;				Subscription ID to be matched | ||||||
| } | * | ||||||
|  | *	Description :	Returns the client subscription from the client  | ||||||
|  | *		subscription table that has the matching token * sid buffer | ||||||
| const UpnpString *UpnpClientSubscription_get_EventURL(const ClientSubscription *p) | *		value. | ||||||
| { | * | ||||||
| 	return ((struct SClientSubscription *)p)->m_eventURL; | *	Return : client_subscription * ; The matching subscription | ||||||
| } | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| const char *UpnpClientSubscription_get_EventURL_cstr(const ClientSubscription *p) |             client_subscription * | ||||||
| { |             GetClientSubActualSID( client_subscription * head, | ||||||
| 	return UpnpString_get_String(UpnpClientSubscription_get_EventURL(p)); |                                    token * sid ) { | ||||||
| } |             client_subscription * next = head; while( next ) { | ||||||
|  |  | ||||||
|  |             if( !memcmp( next->ActualSID, sid->buff, sid->size ) ) | ||||||
| void UpnpClientSubscription_set_EventURL(ClientSubscription *p, const UpnpString *s) |             break; | ||||||
| { |             else | ||||||
| 	UpnpString_delete(((struct SClientSubscription *)p)->m_eventURL); |             { | ||||||
| 	((struct SClientSubscription *)p)->m_eventURL = UpnpString_dup(s); |             next = next->next;} | ||||||
| } |             } | ||||||
|  |             return next;} | ||||||
|  |  | ||||||
| void UpnpClientSubscription_strcpy_EventURL(ClientSubscription *p, const char *s) |  ) | ||||||
| { |  | ||||||
| 	UpnpString_delete(((struct SClientSubscription *)p)->m_eventURL); |  | ||||||
| 	((struct SClientSubscription *)p)->m_eventURL = UpnpString_new(); |  | ||||||
| 	UpnpString_set_String(((struct SClientSubscription *)p)->m_eventURL, s); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ClientSubscription *UpnpClientSubscription_get_Next(const ClientSubscription *p) |  | ||||||
| { |  | ||||||
| 	return (ClientSubscription *)(((struct SClientSubscription *)p)->m_next); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void UpnpClientSubscription_set_Next(ClientSubscription *p, ClientSubscription *q) |  | ||||||
| { |  | ||||||
| 	((struct SClientSubscription *)p)->m_next = (struct SClientSubscription *)q; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void free_client_subscription(ClientSubscription *sub) |  | ||||||
| { |  | ||||||
| 	upnp_timeout *event; |  | ||||||
| 	ThreadPoolJob tempJob; |  | ||||||
| 	if (sub) { |  | ||||||
| 		int renewEventId = UpnpClientSubscription_get_RenewEventId(sub); |  | ||||||
| 		UpnpClientSubscription_strcpy_ActualSID(sub, ""); |  | ||||||
| 		UpnpClientSubscription_strcpy_EventURL(sub, ""); |  | ||||||
| 		if (renewEventId != -1) { |  | ||||||
| 			// do not remove timer event of copy |  | ||||||
| 			// invalid timer event id |  | ||||||
| 			if (TimerThreadRemove(&gTimerThread, renewEventId, &tempJob) == 0) { |  | ||||||
| 				event = (upnp_timeout *)tempJob.arg; |  | ||||||
| 				free_upnp_timeout(event); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		UpnpClientSubscription_set_RenewEventId(sub, -1); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void freeClientSubList(ClientSubscription *list) |  | ||||||
| { |  | ||||||
| 	ClientSubscription *next; |  | ||||||
| 	while (list) { |  | ||||||
| 		free_client_subscription(list); |  | ||||||
| 		next = UpnpClientSubscription_get_Next(list); |  | ||||||
| 		UpnpClientSubscription_delete(list); |  | ||||||
| 		list = next; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void RemoveClientSubClientSID(ClientSubscription **head, const UpnpString *sid) |  | ||||||
| { |  | ||||||
| 	ClientSubscription *finger = *head; |  | ||||||
| 	ClientSubscription *previous = NULL; |  | ||||||
| 	int found = 0; |  | ||||||
| 	while (finger) { |  | ||||||
| 		found = !strcmp( |  | ||||||
| 			UpnpString_get_String(sid), |  | ||||||
| 			UpnpClientSubscription_get_SID_cstr(finger)); |  | ||||||
| 		if (found) { |  | ||||||
| 			if (previous) { |  | ||||||
| 				UpnpClientSubscription_set_Next(previous, |  | ||||||
| 					UpnpClientSubscription_get_Next(finger)); |  | ||||||
| 			} else { |  | ||||||
| 				*head = UpnpClientSubscription_get_Next(finger); |  | ||||||
| 			} |  | ||||||
| 			UpnpClientSubscription_set_Next(finger, NULL); |  | ||||||
| 			freeClientSubList(finger); |  | ||||||
| 			finger = NULL; |  | ||||||
| 		} else { |  | ||||||
| 			previous = finger; |  | ||||||
| 			finger = UpnpClientSubscription_get_Next(finger); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ClientSubscription *GetClientSubClientSID(ClientSubscription *head, const UpnpString *sid) |  | ||||||
| { |  | ||||||
| 	ClientSubscription *next = head; |  | ||||||
| 	int found = 0; |  | ||||||
| 	while (next) { |  | ||||||
| 		found = !strcmp( |  | ||||||
| 			UpnpClientSubscription_get_SID_cstr(next), |  | ||||||
| 			UpnpString_get_String(sid)); |  | ||||||
| 		if(found) { |  | ||||||
| 			break; |  | ||||||
| 		} else { |  | ||||||
| 			next = UpnpClientSubscription_get_Next(next); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return next; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ClientSubscription *GetClientSubActualSID(ClientSubscription *head, token *sid) |  | ||||||
| { |  | ||||||
| 	ClientSubscription *next = head; |  | ||||||
| 	while (next) { |  | ||||||
| 		if (!memcmp( |  | ||||||
| 			UpnpClientSubscription_get_ActualSID_cstr(next), |  | ||||||
| 			sid->buff, sid->size)) { |  | ||||||
| 			break; |  | ||||||
| 		} else { |  | ||||||
| 			next = UpnpClientSubscription_get_Next(next); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return next; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  #endif /* INCLUDE_CLIENT_APIS */ |  | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,65 +1,52 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * \file |  | ||||||
|  * |  | ||||||
|  * \brief Contains functions for scanner and parser for http messages. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | * Purpose: This file contains functions for scanner and parser for http  | ||||||
|  | * messages. | ||||||
|  | ************************************************************************/ | ||||||
|  |  | ||||||
| #define _GNU_SOURCE	// For strcasestr() in string.h | #define _GNU_SOURCE	// For strcasestr() in string.h | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "config.h" | #include "config.h" | ||||||
|  | #include <assert.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <ctype.h> | ||||||
|  | #include <limits.h> | ||||||
|  | #include <stdarg.h> | ||||||
| #include "strintmap.h" | #include "strintmap.h" | ||||||
| #include "httpparser.h" | #include "httpparser.h" | ||||||
| #include "statcodes.h" | #include "statcodes.h" | ||||||
| #include "unixutil.h" | #include "unixutil.h" | ||||||
| #include "upnpdebug.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <assert.h> |  | ||||||
| #include <ctype.h> |  | ||||||
| #include <limits.h> |  | ||||||
| #include <stdarg.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <string.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* entity positions */ |  | ||||||
|  |  | ||||||
|  | // entity positions | ||||||
|  |  | ||||||
| #define NUM_HTTP_METHODS 9 | #define NUM_HTTP_METHODS 9 | ||||||
| static str_int_entry Http_Method_Table[NUM_HTTP_METHODS] = { | static str_int_entry Http_Method_Table[NUM_HTTP_METHODS] = { | ||||||
| @@ -72,6 +59,7 @@ static str_int_entry Http_Method_Table[NUM_HTTP_METHODS] = { | |||||||
|     {"SUBSCRIBE", HTTPMETHOD_SUBSCRIBE}, |     {"SUBSCRIBE", HTTPMETHOD_SUBSCRIBE}, | ||||||
|     {"UNSUBSCRIBE", HTTPMETHOD_UNSUBSCRIBE}, |     {"UNSUBSCRIBE", HTTPMETHOD_UNSUBSCRIBE}, | ||||||
|     {"POST", SOAPMETHOD_POST}, |     {"POST", SOAPMETHOD_POST}, | ||||||
|  |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #define NUM_HTTP_HEADER_NAMES 33 | #define NUM_HTTP_HEADER_NAMES 33 | ||||||
| @@ -112,7 +100,9 @@ str_int_entry Http_Header_Names[NUM_HTTP_HEADER_NAMES] = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| /***********************************************************************/ | /***********************************************************************/ | ||||||
|  |  | ||||||
| /*************                 scanner                     *************/ | /*************                 scanner                     *************/ | ||||||
|  |  | ||||||
| /***********************************************************************/ | /***********************************************************************/ | ||||||
|  |  | ||||||
| #define TOKCHAR_CR		0xD | #define TOKCHAR_CR		0xD | ||||||
| @@ -131,11 +121,13 @@ str_int_entry Http_Header_Names[NUM_HTTP_HEADER_NAMES] = { | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE void scanner_init(OUT scanner_t *scanner, IN membuffer *bufptr) | static UPNP_INLINE void | ||||||
|  | scanner_init( OUT scanner_t * scanner, | ||||||
|  |               IN membuffer * bufptr ) | ||||||
| { | { | ||||||
| 	scanner->cursor = 0; |     scanner->cursor = 0; | ||||||
| 	scanner->msg = bufptr; |     scanner->msg = bufptr; | ||||||
| 	scanner->entire_msg_loaded = FALSE; |     scanner->entire_msg_loaded = FALSE; | ||||||
| } | } | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| @@ -150,9 +142,10 @@ static UPNP_INLINE void scanner_init(OUT scanner_t *scanner, IN membuffer *bufpt | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE xboolean is_separator_char(IN char c) | static UPNP_INLINE xboolean | ||||||
|  | is_separator_char( IN char c ) | ||||||
| { | { | ||||||
|     return strchr(" \t()<>@,;:\\\"/[]?={}", c) != NULL; |     return strchr( " \t()<>@,;:\\\"/[]?={}", c ) != NULL; | ||||||
| } | } | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| @@ -167,9 +160,10 @@ static UPNP_INLINE xboolean is_separator_char(IN char c) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE xboolean is_identifier_char(IN char c) | static UPNP_INLINE xboolean | ||||||
|  | is_identifier_char( IN char c ) | ||||||
| { | { | ||||||
|     return c >= 32 && c <= 126 && !is_separator_char(c); |     return ( c >= 32 && c <= 126 ) && !is_separator_char( c ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| @@ -184,9 +178,10 @@ static UPNP_INLINE xboolean is_identifier_char(IN char c) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE xboolean is_control_char(IN char c) | static UPNP_INLINE xboolean | ||||||
|  | is_control_char( IN char c ) | ||||||
| { | { | ||||||
|     return (c >= 0 && c <= 31) || c == 127; |     return ( ( c >= 0 && c <= 31 ) || ( c == 127 ) ); | ||||||
| } | } | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| @@ -201,7 +196,8 @@ static UPNP_INLINE xboolean is_control_char(IN char c) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE xboolean is_qdtext_char(IN char cc) | static UPNP_INLINE xboolean | ||||||
|  | is_qdtext_char( IN char cc ) | ||||||
| { | { | ||||||
|     unsigned char c = ( unsigned char )cc; |     unsigned char c = ( unsigned char )cc; | ||||||
|  |  | ||||||
| @@ -235,10 +231,10 @@ static UPNP_INLINE xboolean is_qdtext_char(IN char cc) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static parse_status_t scanner_get_token( | static parse_status_t | ||||||
| 	INOUT scanner_t *scanner, | scanner_get_token( INOUT scanner_t * scanner, | ||||||
| 	OUT memptr *token, |                    OUT memptr * token, | ||||||
| 	OUT token_type_t *tok_type) |                    OUT token_type_t * tok_type ) | ||||||
| { | { | ||||||
|     char *cursor; |     char *cursor; | ||||||
|     char *null_terminator;      // point to null-terminator in buffer |     char *null_terminator;      // point to null-terminator in buffer | ||||||
| @@ -379,11 +375,52 @@ static parse_status_t scanner_get_token( | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE char *scanner_get_str(IN scanner_t * scanner) | static UPNP_INLINE char * | ||||||
|  | scanner_get_str( IN scanner_t * scanner ) | ||||||
| { | { | ||||||
| 	return scanner->msg->buf + scanner->cursor; |     return scanner->msg->buf + scanner->cursor; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | * Function :	scanner_pushback | ||||||
|  | * | ||||||
|  | * Parameters : | ||||||
|  | *	INOUT scanner_t* scanner ;	Scanner Object | ||||||
|  | *	IN size_t pushback_bytes ;	Bytes to be moved back | ||||||
|  | * | ||||||
|  | * Description :	Move back by a certain number of bytes.				 | ||||||
|  | *	This is used to put back one or more tokens back into the input		 | ||||||
|  | * | ||||||
|  | * Return : void ; | ||||||
|  | * | ||||||
|  | * Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | #warning The only use of the function 'scanner_pushback()' in the code is commented out. | ||||||
|  | #warning 'scanner_pushback()' is a candidate for removal. | ||||||
|  | static UPNP_INLINE void | ||||||
|  | scanner_pushback( INOUT scanner_t * scanner, | ||||||
|  |                   IN size_t pushback_bytes ) | ||||||
|  | { | ||||||
|  |     scanner->cursor -= pushback_bytes; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
|  | /*************                end of scanner              **************/ | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
|  | /*************                    parser                  **************/ | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
|  | /*************                 http_message_t             **************/ | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Function :	httpmsg_compare | * Function :	httpmsg_compare | ||||||
| @@ -398,14 +435,15 @@ static UPNP_INLINE char *scanner_get_str(IN scanner_t * scanner) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static int httpmsg_compare(void *param1, void *param2) | static int | ||||||
|  | httpmsg_compare( void *param1, | ||||||
|  |                  void *param2 ) | ||||||
| { | { | ||||||
|     assert( param1 != NULL ); |     assert( param1 != NULL ); | ||||||
|     assert( param2 != NULL ); |     assert( param2 != NULL ); | ||||||
|  |  | ||||||
|     return |     return ( ( http_header_t * ) param1 )->name_id == | ||||||
| 	    ((http_header_t *)param1)->name_id == |         ( ( http_header_t * ) param2 )->name_id; | ||||||
| 	    ((http_header_t *)param2)->name_id; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| @@ -420,7 +458,8 @@ static int httpmsg_compare(void *param1, void *param2) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static void httpheader_free(void *msg) | static void | ||||||
|  | httpheader_free( void *msg ) | ||||||
| { | { | ||||||
|     http_header_t *hdr = ( http_header_t * ) msg; |     http_header_t *hdr = ( http_header_t * ) msg; | ||||||
|  |  | ||||||
| @@ -441,7 +480,8 @@ static void httpheader_free(void *msg) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| void httpmsg_init(INOUT http_message_t *msg) | void | ||||||
|  | httpmsg_init( INOUT http_message_t * msg ) | ||||||
| { | { | ||||||
|     msg->initialized = 1; |     msg->initialized = 1; | ||||||
|     msg->entity.buf = NULL; |     msg->entity.buf = NULL; | ||||||
| @@ -463,7 +503,8 @@ void httpmsg_init(INOUT http_message_t *msg) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| void httpmsg_destroy( INOUT http_message_t * msg ) | void | ||||||
|  | httpmsg_destroy( INOUT http_message_t * msg ) | ||||||
| { | { | ||||||
|     assert( msg != NULL ); |     assert( msg != NULL ); | ||||||
|  |  | ||||||
| @@ -491,9 +532,9 @@ void httpmsg_destroy( INOUT http_message_t * msg ) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| http_header_t *httpmsg_find_hdr_str( | http_header_t * | ||||||
| 	IN http_message_t *msg, | httpmsg_find_hdr_str( IN http_message_t * msg, | ||||||
| 	IN const char *header_name) |                       IN const char *header_name ) | ||||||
| { | { | ||||||
|     http_header_t *header; |     http_header_t *header; | ||||||
|  |  | ||||||
| @@ -528,21 +569,27 @@ http_header_t *httpmsg_find_hdr_str( | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| http_header_t *httpmsg_find_hdr( | http_header_t * | ||||||
| 	IN http_message_t *msg, | httpmsg_find_hdr( IN http_message_t * msg, | ||||||
| 	IN int header_name_id, |                   IN int header_name_id, | ||||||
| 	OUT memptr *value) |                   OUT memptr * value ) | ||||||
| { | { | ||||||
|     http_header_t header;       // temp header for searching |     http_header_t header;       // temp header for searching | ||||||
|  |  | ||||||
|     ListNode *node; |     ListNode *node; | ||||||
|  |  | ||||||
|     http_header_t *data; |     http_header_t *data; | ||||||
|  |  | ||||||
|     header.name_id = header_name_id; |     header.name_id = header_name_id; | ||||||
|  |  | ||||||
|     node = ListFind( &msg->headers, NULL, &header ); |     node = ListFind( &msg->headers, NULL, &header ); | ||||||
|  |  | ||||||
|     if( node == NULL ) { |     if( node == NULL ) { | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     data = ( http_header_t * ) node->item; |     data = ( http_header_t * ) node->item; | ||||||
|  |  | ||||||
|     if( value != NULL ) { |     if( value != NULL ) { | ||||||
|         value->buf = data->value.buf; |         value->buf = data->value.buf; | ||||||
|         value->length = data->value.length; |         value->length = data->value.length; | ||||||
| @@ -551,6 +598,12 @@ http_header_t *httpmsg_find_hdr( | |||||||
|     return data; |     return data; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
|  | /*************              http_parser_t                 **************/ | ||||||
|  |  | ||||||
|  | /***********************************************************************/ | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Function :	skip_blank_lines | * Function :	skip_blank_lines | ||||||
| * | * | ||||||
| @@ -563,23 +616,26 @@ http_header_t *httpmsg_find_hdr( | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE int skip_blank_lines(INOUT scanner_t *scanner) | static UPNP_INLINE int | ||||||
|  | skip_blank_lines( INOUT scanner_t * scanner ) | ||||||
| { | { | ||||||
| 	memptr token; |     memptr token; | ||||||
| 	token_type_t tok_type; |     token_type_t tok_type; | ||||||
| 	parse_status_t status; |     parse_status_t status; | ||||||
|  |  | ||||||
| 	/* skip ws, crlf */ |     // skip ws, crlf | ||||||
| 	do { |     do { | ||||||
| 		status = scanner_get_token(scanner, &token, &tok_type); |         status = scanner_get_token( scanner, &token, &tok_type ); | ||||||
| 	} while (status == PARSE_OK && |     } while( status == PARSE_OK && | ||||||
| 		 (tok_type == TT_WHITESPACE || tok_type == TT_CRLF)); |              ( tok_type == TT_WHITESPACE || tok_type == TT_CRLF ) ); | ||||||
| 	if (status == PARSE_OK) { |  | ||||||
| 		/* pushback a non-whitespace token */ |  | ||||||
| 		scanner->cursor -= token.length; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return status; |     if( status == PARSE_OK ) { | ||||||
|  |         // pushback a non-whitespace token | ||||||
|  |         scanner->cursor -= token.length; | ||||||
|  |         //scanner_pushback( scanner, token.length ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return status; | ||||||
| } | } | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| @@ -597,7 +653,8 @@ static UPNP_INLINE int skip_blank_lines(INOUT scanner_t *scanner) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE int skip_lws(INOUT scanner_t *scanner) | static UPNP_INLINE int | ||||||
|  | skip_lws( INOUT scanner_t * scanner ) | ||||||
| { | { | ||||||
|     memptr token; |     memptr token; | ||||||
|     token_type_t tok_type; |     token_type_t tok_type; | ||||||
| @@ -651,9 +708,9 @@ static UPNP_INLINE int skip_lws(INOUT scanner_t *scanner) | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE parse_status_t match_non_ws_string( | static UPNP_INLINE parse_status_t | ||||||
| 	INOUT scanner_t *scanner, | match_non_ws_string( INOUT scanner_t * scanner, | ||||||
| 	OUT memptr *str) |                      OUT memptr * str ) | ||||||
| { | { | ||||||
|     memptr token; |     memptr token; | ||||||
|     token_type_t tok_type; |     token_type_t tok_type; | ||||||
| @@ -717,9 +774,9 @@ static UPNP_INLINE parse_status_t match_non_ws_string( | |||||||
| * | * | ||||||
| * Note : | * Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE parse_status_t match_raw_value( | static UPNP_INLINE parse_status_t | ||||||
| 	INOUT scanner_t * scanner, | match_raw_value( INOUT scanner_t * scanner, | ||||||
| 	OUT memptr *raw_value) |                  OUT memptr * raw_value ) | ||||||
| { | { | ||||||
|     memptr token; |     memptr token; | ||||||
|     token_type_t tok_type; |     token_type_t tok_type; | ||||||
| @@ -808,10 +865,10 @@ static UPNP_INLINE parse_status_t match_raw_value( | |||||||
| *   PARSE_FAILURE		-- bad input | *   PARSE_FAILURE		-- bad input | ||||||
| *   PARSE_INCOMPLETE | *   PARSE_INCOMPLETE | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| static UPNP_INLINE int match_int( | static UPNP_INLINE int | ||||||
| 	INOUT scanner_t *scanner, | match_int( INOUT scanner_t * scanner, | ||||||
| 	IN int base, |            IN int base, | ||||||
| 	OUT int *value) |            OUT int *value ) | ||||||
| { | { | ||||||
|     memptr token; |     memptr token; | ||||||
|     token_type_t   tok_type; |     token_type_t   tok_type; | ||||||
| @@ -895,6 +952,31 @@ read_until_crlf( INOUT scanner_t * scanner, | |||||||
|     return status; |     return status; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | * Function: skip_to_end_of_header | ||||||
|  | * | ||||||
|  | * Parameters: | ||||||
|  | *	INOUT scanner_t* scanner ; Scanner Object | ||||||
|  | * | ||||||
|  | * Description: Skip to end of header | ||||||
|  | * | ||||||
|  | * Returns: | ||||||
|  | *   PARSE_OK | ||||||
|  | *   PARSE_FAILURE | ||||||
|  | *   PARSE_INCOMPLETE | ||||||
|  | ************************************************************************/ | ||||||
|  | #warning There are currently no uses of the function 'skip_to_end_of_header()' in the code. | ||||||
|  | #warning 'skip_to_end_of_header()' is a candidate for removal. | ||||||
|  | static UPNP_INLINE int | ||||||
|  | skip_to_end_of_header( INOUT scanner_t * scanner ) | ||||||
|  | { | ||||||
|  |     memptr dummy_raw_value; | ||||||
|  |     parse_status_t status; | ||||||
|  |  | ||||||
|  |     status = match_raw_value( scanner, &dummy_raw_value ); | ||||||
|  |     return status; | ||||||
|  | } | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Function: match_char | * Function: match_char | ||||||
| * | * | ||||||
| @@ -1440,9 +1522,7 @@ parser_parse_responseline( INOUT http_parser_t * parser ) | |||||||
|  |  | ||||||
|     if( num_scanned != 3 || |     if( num_scanned != 3 || | ||||||
|         hmsg->major_version < 0 || |         hmsg->major_version < 0 || | ||||||
|         /* HTTP version equals to 1.0 should fail as required by the |         hmsg->minor_version < 0 || hmsg->status_code < 0 ) { | ||||||
|          * UPnP certification tool */ |  | ||||||
|         hmsg->minor_version < 1 || hmsg->status_code < 0 ) { |  | ||||||
|         // bad response line |         // bad response line | ||||||
|         return PARSE_FAILURE; |         return PARSE_FAILURE; | ||||||
|     } |     } | ||||||
| @@ -1649,6 +1729,140 @@ parser_parse_headers( INOUT http_parser_t * parser ) | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | //////////////////////////////////////////////////////////////////////// | ||||||
|  | #ifdef HIGHLY_UNLIKELY | ||||||
|  | // ************** | ||||||
|  | static parse_status_t | ||||||
|  | parser_parse_headers_old( INOUT http_parser_t * parser ) | ||||||
|  | { | ||||||
|  |     parse_status_t status; | ||||||
|  |     memptr token; | ||||||
|  |     memptr hdr_value; | ||||||
|  |     token_type_t tok_type; | ||||||
|  |     scanner_t *scanner = &parser->scanner; | ||||||
|  |     size_t save_pos; | ||||||
|  |     http_header_t *header; | ||||||
|  |     int header_id; | ||||||
|  |     int ret = 0; | ||||||
|  |     int index; | ||||||
|  |     http_header_t *orig_header; | ||||||
|  |     char save_char; | ||||||
|  |     int ret2, | ||||||
|  |       ret3; | ||||||
|  |  | ||||||
|  |     assert( parser->position == POS_HEADERS || | ||||||
|  |             parser->ent_position == ENTREAD_CHUNKY_HEADERS ); | ||||||
|  |  | ||||||
|  |     while( TRUE ) { | ||||||
|  |         save_pos = scanner->cursor; | ||||||
|  |  | ||||||
|  |         // | ||||||
|  |         // check end of headers | ||||||
|  |         // | ||||||
|  |         status = scanner_get_token( scanner, &token, &tok_type ); | ||||||
|  |         if( status != PARSE_OK ) { | ||||||
|  |             return status; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if( tok_type == TT_CRLF ) { | ||||||
|  |             // end of headers | ||||||
|  |             parser->position = POS_ENTITY;  // read entity next | ||||||
|  |             return PARSE_OK; | ||||||
|  |         } | ||||||
|  |         // | ||||||
|  |         // not end; read header | ||||||
|  |         // | ||||||
|  |         if( tok_type != TT_IDENTIFIER ) { | ||||||
|  |             return PARSE_FAILURE;   // didn't see header name | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         status = match( scanner, " : %R%c", &hdr_value ); | ||||||
|  |         if( status != PARSE_OK ) { | ||||||
|  |             // pushback tokens; useful only on INCOMPLETE error | ||||||
|  |             scanner->cursor = save_pos; | ||||||
|  |             return status; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // | ||||||
|  |         // add header | ||||||
|  |         // | ||||||
|  |  | ||||||
|  |         // find header | ||||||
|  |         index = map_str_to_int( token.buf, token.length, Http_Header_Names, | ||||||
|  |                                 NUM_HTTP_HEADER_NAMES, FALSE ); | ||||||
|  |         if( index != -1 ) { | ||||||
|  |             header_id = Http_Header_Names[index].id; | ||||||
|  |  | ||||||
|  |             orig_header = | ||||||
|  |                 httpmsg_find_hdr( &parser->msg, header_id, NULL ); | ||||||
|  |         } else { | ||||||
|  |             header_id = HDR_UNKNOWN; | ||||||
|  |  | ||||||
|  |             save_char = token.buf[token.length]; | ||||||
|  |             token.buf[token.length] = '\0'; | ||||||
|  |  | ||||||
|  |             orig_header = httpmsg_find_hdr_str( &parser->msg, token.buf ); | ||||||
|  |  | ||||||
|  |             token.buf[token.length] = save_char;    // restore | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if( orig_header == NULL ) { | ||||||
|  |             // | ||||||
|  |             // add new header | ||||||
|  |             // | ||||||
|  |  | ||||||
|  |             header = ( http_header_t * ) malloc( sizeof( http_header_t ) ); | ||||||
|  |             if( header == NULL ) { | ||||||
|  |                 parser->http_error_code = HTTP_INTERNAL_SERVER_ERROR; | ||||||
|  |                 return PARSE_FAILURE; | ||||||
|  |             } | ||||||
|  |             membuffer_init( &header->multi_hdr_buf ); | ||||||
|  |  | ||||||
|  |             header->name = token; | ||||||
|  |             header->value = hdr_value; | ||||||
|  |             header->name_id = header_id; | ||||||
|  |  | ||||||
|  |             ret = dlist_append( &parser->msg.headers, header ); | ||||||
|  |             if( ret == UPNP_E_OUTOF_MEMORY ) { | ||||||
|  |                 parser->http_error_code = HTTP_INTERNAL_SERVER_ERROR; | ||||||
|  |                 return PARSE_FAILURE; | ||||||
|  |             } | ||||||
|  |         } else if( hdr_value.length > 0 ) { | ||||||
|  |             // | ||||||
|  |             // append value to existing header | ||||||
|  |             // | ||||||
|  |  | ||||||
|  |             if( orig_header->multi_hdr_buf.buf == NULL ) { | ||||||
|  |                 // store in buffer | ||||||
|  |                 ret = membuffer_append( &orig_header->multi_hdr_buf, | ||||||
|  |                                         orig_header->value.buf, | ||||||
|  |                                         orig_header->value.length ); | ||||||
|  |             } | ||||||
|  |             // append space | ||||||
|  |             ret2 = | ||||||
|  |                 membuffer_append( &orig_header->multi_hdr_buf, ", ", 2 ); | ||||||
|  |  | ||||||
|  |             // append continuation of header value | ||||||
|  |             ret3 = membuffer_append( &orig_header->multi_hdr_buf, | ||||||
|  |                                      hdr_value.buf, hdr_value.length ); | ||||||
|  |  | ||||||
|  |             if( ret == UPNP_E_OUTOF_MEMORY || | ||||||
|  |                 ret2 == UPNP_E_OUTOF_MEMORY || | ||||||
|  |                 ret3 == UPNP_E_OUTOF_MEMORY ) { | ||||||
|  |                 // not enuf mem | ||||||
|  |                 parser->http_error_code = HTTP_INTERNAL_SERVER_ERROR; | ||||||
|  |                 return PARSE_FAILURE; | ||||||
|  |             } | ||||||
|  |             // header value points to allocated buf | ||||||
|  |             orig_header->value.buf = orig_header->multi_hdr_buf.buf; | ||||||
|  |             orig_header->value.length = orig_header->multi_hdr_buf.length; | ||||||
|  |         } | ||||||
|  |     }                           // end while | ||||||
|  |  | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | // ****************************** | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Function: parser_parse_entity_using_clen | * Function: parser_parse_entity_using_clen | ||||||
| * | * | ||||||
| @@ -1670,9 +1884,9 @@ parser_parse_entity_using_clen( INOUT http_parser_t * parser ) | |||||||
|     assert( parser->ent_position == ENTREAD_USING_CLEN ); |     assert( parser->ent_position == ENTREAD_USING_CLEN ); | ||||||
|  |  | ||||||
|     // determine entity (i.e. body) length so far |     // determine entity (i.e. body) length so far | ||||||
|  |     //entity_length = parser->msg.msg.length - parser->entity_start_position; | ||||||
|     parser->msg.entity.length = |     parser->msg.entity.length = | ||||||
|         parser->msg.msg.length - parser->entity_start_position +  |         parser->msg.msg.length - parser->entity_start_position; | ||||||
|         parser->msg.entity_offset; |  | ||||||
|  |  | ||||||
|     if( parser->msg.entity.length < parser->content_length ) { |     if( parser->msg.entity.length < parser->content_length ) { | ||||||
|         // more data to be read |         // more data to be read | ||||||
| @@ -1680,8 +1894,7 @@ parser_parse_entity_using_clen( INOUT http_parser_t * parser ) | |||||||
|     } else { |     } else { | ||||||
|         if( parser->msg.entity.length > parser->content_length ) { |         if( parser->msg.entity.length > parser->content_length ) { | ||||||
|             // silently discard extra data |             // silently discard extra data | ||||||
|             parser->msg.msg.buf[parser->entity_start_position - |             parser->msg.msg.buf[parser->entity_start_position + | ||||||
|                                 parser->msg.entity_offset + |  | ||||||
|                                 parser->content_length] = '\0'; |                                 parser->content_length] = '\0'; | ||||||
|         } |         } | ||||||
|         // save entity length |         // save entity length | ||||||
| @@ -2066,7 +2279,6 @@ parser_response_init( OUT http_parser_t * parser, | |||||||
|     parser_init( parser ); |     parser_init( parser ); | ||||||
|     parser->msg.is_request = FALSE; |     parser->msg.is_request = FALSE; | ||||||
|     parser->msg.request_method = request_method; |     parser->msg.request_method = request_method; | ||||||
|     parser->msg.entity_offset = 0; |  | ||||||
|     parser->position = POS_RESPONSE_LINE; |     parser->position = POS_RESPONSE_LINE; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -2162,6 +2374,10 @@ parser_append( INOUT http_parser_t * parser, | |||||||
|     return parser_parse( parser ); |     return parser_parse( parser ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | **********                   end of parser                    *********** | ||||||
|  | ************************************************************************/ | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Function: raw_to_int | * Function: raw_to_int | ||||||
| * | * | ||||||
| @@ -2174,7 +2390,9 @@ parser_append( INOUT http_parser_t * parser, | |||||||
| * Returns: | * Returns: | ||||||
| *	 int | *	 int | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int raw_to_int(IN memptr *raw_value, IN int base) | int | ||||||
|  | raw_to_int( IN memptr * raw_value, | ||||||
|  |             IN int base ) | ||||||
| { | { | ||||||
|     long  num; |     long  num; | ||||||
|     char *end_ptr; |     char *end_ptr; | ||||||
| @@ -2211,7 +2429,9 @@ int raw_to_int(IN memptr *raw_value, IN int base) | |||||||
| * Returns: | * Returns: | ||||||
| *	 int - index at which the substring is found.						 | *	 int - index at which the substring is found.						 | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int raw_find_str(IN memptr *raw_value, IN const char *str) | int | ||||||
|  | raw_find_str( IN memptr *raw_value, | ||||||
|  |               IN const char *str ) | ||||||
| { | { | ||||||
|     char c; |     char c; | ||||||
|     char *ptr; |     char *ptr; | ||||||
| @@ -2254,7 +2474,8 @@ int raw_find_str(IN memptr *raw_value, IN const char *str) | |||||||
| * Returns: | * 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) | const char * | ||||||
|  | method_to_str( IN http_method_t method ) | ||||||
| { | { | ||||||
|     int index; |     int index; | ||||||
|  |  | ||||||
| @@ -2265,15 +2486,26 @@ const char *method_to_str(IN http_method_t method) | |||||||
|     return index == -1 ? NULL : Http_Method_Table[index].name; |     return index == -1 ? NULL : Http_Method_Table[index].name; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | * Function: print_http_headers | ||||||
|  | * | ||||||
|  | * Parameters: | ||||||
|  | *	http_message_t* hmsg ; HTTP Message object | ||||||
|  | * | ||||||
|  | * Description: | ||||||
|  | * | ||||||
|  | * Returns: | ||||||
|  | *	 void | ||||||
|  | ************************************************************************/ | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void print_http_headers(http_message_t *hmsg) | void | ||||||
|  | print_http_headers( http_message_t * hmsg ) | ||||||
| { | { | ||||||
|     ListNode *node; |     ListNode *node; | ||||||
|     /* NNS:  dlist_node *node; */ |     // NNS:  dlist_node *node; | ||||||
|     http_header_t *header; |     http_header_t *header; | ||||||
|  |  | ||||||
|     /* print start line */ |     // print start line | ||||||
|     if( hmsg->is_request ) { |     if( hmsg->is_request ) { | ||||||
|         printf( "method = %d, version = %d.%d, url = %.*s\n",  |         printf( "method = %d, version = %d.%d, url = %.*s\n",  | ||||||
|             hmsg->method, hmsg->major_version, hmsg->minor_version, |             hmsg->method, hmsg->major_version, hmsg->minor_version, | ||||||
| @@ -2284,19 +2516,19 @@ void print_http_headers(http_message_t *hmsg) | |||||||
|             (int)hmsg->status_msg.length, hmsg->status_msg.buf); |             (int)hmsg->status_msg.length, hmsg->status_msg.buf); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* print headers */ |     // print headers | ||||||
|     node = ListHead( &hmsg->headers ); |     node = ListHead( &hmsg->headers ); | ||||||
|     /* NNS: node = dlist_first_node( &hmsg->headers ); */ |     // NNS: node = dlist_first_node( &hmsg->headers ); | ||||||
|     while( node != NULL ) { |     while( node != NULL ) { | ||||||
|         header = ( http_header_t * ) node->item; |         header = ( http_header_t * ) node->item; | ||||||
|         /* NNS: header = (http_header_t *)node->data; */ |         // NNS: header = (http_header_t *)node->data; | ||||||
|         printf( "hdr name: %.*s, value: %.*s\n",  |         printf( "hdr name: %.*s, value: %.*s\n",  | ||||||
|             (int)header->name.length, header->name.buf, |             (int)header->name.length, header->name.buf, | ||||||
|             (int)header->value.length, header->value.buf ); |             (int)header->value.length, header->value.buf ); | ||||||
|  |  | ||||||
|         node = ListNext( &hmsg->headers, node ); |         node = ListNext( &hmsg->headers, node ); | ||||||
|         /* NNS: node = dlist_next( &hmsg->headers, node ); */ |         // NNS: node = dlist_next( &hmsg->headers, node ); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| #endif /* DEBUG */ | #endif | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -176,7 +176,7 @@ http_get_code_text( int statusCode ) | |||||||
|     int table_num; |     int table_num; | ||||||
|  |  | ||||||
|     if( !gInitialized ) { |     if( !gInitialized ) { | ||||||
|         init_tables(); |         init_tables(  ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if( statusCode < 100 && statusCode >= 600 ) { |     if( statusCode < 100 && statusCode >= 600 ) { | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,58 +1,60 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Purpose: This file implements the sockets functionality  | * Purpose: This file implements the sockets functionality  | ||||||
|  ************************************************************************/ | ************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "config.h" | #include "config.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "sock.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "unixutil.h" /* for socklen_t, EAFNOSUPPORT */ |  | ||||||
| #include "upnp.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <time.h> | #include <time.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  |  | ||||||
|  | #include "sock.h" | ||||||
|  | #include "upnp.h" | ||||||
|  | #ifndef WIN32 | ||||||
|  |  #include <arpa/inet.h> | ||||||
|  |  #include <netinet/in.h> | ||||||
|  |  #include <sys/types.h> | ||||||
|  |  #include <sys/socket.h> | ||||||
|  |  #include <sys/time.h> | ||||||
|  |  #include <unistd.h> | ||||||
|  | #else | ||||||
|  |  #include <winsock2.h> | ||||||
|  | #endif | ||||||
|  | #include "unixutil.h" | ||||||
|  |  | ||||||
| #ifndef MSG_NOSIGNAL | #ifndef MSG_NOSIGNAL | ||||||
| 	#define MSG_NOSIGNAL 0 |  #define MSG_NOSIGNAL 0 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| @@ -60,7 +62,7 @@ | |||||||
| * | * | ||||||
| *	Parameters : | *	Parameters : | ||||||
| *		OUT SOCKINFO* info ;	Socket Information Object | *		OUT SOCKINFO* info ;	Socket Information Object | ||||||
| *		IN SOCKET sockfd ;	Socket Descriptor | *		IN int sockfd ;			Socket Descriptor | ||||||
| * | * | ||||||
| *	Description :	Assign the passed in socket descriptor to socket  | *	Description :	Assign the passed in socket descriptor to socket  | ||||||
| *		descriptor in the SOCKINFO structure. | *		descriptor in the SOCKINFO structure. | ||||||
| @@ -74,7 +76,7 @@ | |||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| sock_init( OUT SOCKINFO * info, | sock_init( OUT SOCKINFO * info, | ||||||
|            IN SOCKET sockfd ) |            IN int sockfd ) | ||||||
| { | { | ||||||
|     assert( info ); |     assert( info ); | ||||||
|  |  | ||||||
| @@ -89,9 +91,10 @@ sock_init( OUT SOCKINFO * info, | |||||||
| *	Function :	sock_init_with_ip | *	Function :	sock_init_with_ip | ||||||
| * | * | ||||||
| *	Parameters : | *	Parameters : | ||||||
| *		OUT SOCKINFO* info ;		Socket Information Object | *		OUT SOCKINFO* info ;				Socket Information Object | ||||||
| *		IN SOCKET sockfd ;		Socket Descriptor | *		IN int sockfd ;						Socket Descriptor | ||||||
| *		IN struct sockaddr* foreign_sockaddr; remote socket address. | *		IN struct in_addr foreign_ip_addr ;	Remote IP Address | ||||||
|  | *		IN unsigned short foreign_ip_port ;	Remote Port number | ||||||
| * | * | ||||||
| *	Description :	Calls the sock_init function and assigns the passed in | *	Description :	Calls the sock_init function and assigns the passed in | ||||||
| *		IP address and port to the IP address and port in the SOCKINFO | *		IP address and port to the IP address and port in the SOCKINFO | ||||||
| @@ -106,8 +109,9 @@ sock_init( OUT SOCKINFO * info, | |||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| sock_init_with_ip( OUT SOCKINFO * info, | sock_init_with_ip( OUT SOCKINFO * info, | ||||||
|                    IN SOCKET sockfd, |                    IN int sockfd, | ||||||
|                    IN struct sockaddr* foreign_sockaddr ) |                    IN struct in_addr foreign_ip_addr, | ||||||
|  |                    IN unsigned short foreign_ip_port ) | ||||||
| { | { | ||||||
|     int ret; |     int ret; | ||||||
|  |  | ||||||
| @@ -116,8 +120,8 @@ sock_init_with_ip( OUT SOCKINFO * info, | |||||||
|         return ret; |         return ret; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     memcpy( &info->foreign_sockaddr, foreign_sockaddr,  |     info->foreign_ip_addr = foreign_ip_addr; | ||||||
|         sizeof( info->foreign_sockaddr) ); |     info->foreign_ip_port = foreign_ip_port; | ||||||
|  |  | ||||||
|     return UPNP_E_SUCCESS; |     return UPNP_E_SUCCESS; | ||||||
| } | } | ||||||
| @@ -145,11 +149,9 @@ int | |||||||
| sock_destroy( INOUT SOCKINFO * info, | sock_destroy( INOUT SOCKINFO * info, | ||||||
|               int ShutdownMethod ) |               int ShutdownMethod ) | ||||||
| { | { | ||||||
|     if( info->socket != INVALID_SOCKET ) { |     shutdown( info->socket, ShutdownMethod ); | ||||||
|         shutdown( info->socket, ShutdownMethod ); |     if( UpnpCloseSocket( info->socket ) == -1 ) { | ||||||
|         if( UpnpCloseSocket( info->socket ) == -1 ) { |         return UPNP_E_SOCKET_ERROR; | ||||||
|             return UPNP_E_SOCKET_ERROR; |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return UPNP_E_SUCCESS; |     return UPNP_E_SUCCESS; | ||||||
| @@ -188,7 +190,7 @@ sock_read_write( IN SOCKINFO * info, | |||||||
|     struct timeval timeout; |     struct timeval timeout; | ||||||
|     int numBytes; |     int numBytes; | ||||||
|     time_t start_time = time( NULL ); |     time_t start_time = time( NULL ); | ||||||
|     SOCKET sockfd = info->socket; |     int sockfd = info->socket; | ||||||
|     long bytes_sent = 0, |     long bytes_sent = 0, | ||||||
|       byte_left = 0, |       byte_left = 0, | ||||||
|       num_written; |       num_written; | ||||||
| @@ -200,9 +202,9 @@ sock_read_write( IN SOCKINFO * info, | |||||||
|     FD_ZERO( &readSet ); |     FD_ZERO( &readSet ); | ||||||
|     FD_ZERO( &writeSet ); |     FD_ZERO( &writeSet ); | ||||||
|     if( bRead ) { |     if( bRead ) { | ||||||
|         FD_SET( sockfd, &readSet ); |         FD_SET( ( unsigned )sockfd, &readSet ); | ||||||
|     } else { |     } else { | ||||||
|         FD_SET( sockfd, &writeSet ); |         FD_SET( ( unsigned )sockfd, &writeSet ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     timeout.tv_sec = *timeoutSecs; |     timeout.tv_sec = *timeoutSecs; | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,34 +1,33 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Purpose: This file defines the functions for services. It defines  | * Purpose: This file defines the functions for services. It defines  | ||||||
| @@ -117,8 +116,25 @@ RemoveSubscriptionSID( Upnp_SID sid, | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| subscription *GetSubscriptionSID(const Upnp_SID sid, service_info *service) | *	Function :	GetSubscriptionSID | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		Upnp_SID sid ;	subscription ID | ||||||
|  | *		service_info * service ;	service object providing the list of | ||||||
|  | *						subscriptions | ||||||
|  | * | ||||||
|  | *	Description :	Return the subscription from the service table  | ||||||
|  | *		that matches const Upnp_SID sid value.  | ||||||
|  | * | ||||||
|  | *	Return : subscription * - Pointer to the matching subscription  | ||||||
|  | *		node; | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | subscription * | ||||||
|  | GetSubscriptionSID( Upnp_SID sid, | ||||||
|  |                     service_info * service ) | ||||||
| { | { | ||||||
|     subscription *next = service->subscriptionList; |     subscription *next = service->subscriptionList; | ||||||
|     subscription *previous = NULL; |     subscription *previous = NULL; | ||||||
| @@ -913,10 +929,8 @@ getServiceList( IXML_Node * node, | |||||||
|         ( *end ) = current; |         ( *end ) = current; | ||||||
|  |  | ||||||
|         return head; |         return head; | ||||||
|     } else { |     } else | ||||||
|         ( *end ) = NULL; |  | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -962,8 +976,7 @@ getAllServiceList( IXML_Node * node, | |||||||
|             if( head ) { |             if( head ) { | ||||||
|                 end->next = |                 end->next = | ||||||
|                     getServiceList( currentDevice, &next_end, URLBase ); |                     getServiceList( currentDevice, &next_end, URLBase ); | ||||||
|                 if ( next_end ) |                 end = next_end; | ||||||
|                     end = next_end; |  | ||||||
|             } else |             } else | ||||||
|                 head = getServiceList( currentDevice, &end, URLBase ); |                 head = getServiceList( currentDevice, &end, URLBase ); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,33 +1,33 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Purpose: This file contains functions that operate on memory and  | * Purpose: This file contains functions that operate on memory and  | ||||||
| @@ -491,8 +491,6 @@ membuffer_delete( INOUT membuffer * m, | |||||||
|  |  | ||||||
|     assert( m != NULL ); |     assert( m != NULL ); | ||||||
|  |  | ||||||
|     if (!m) return; |  | ||||||
|  |  | ||||||
|     if( m->length == 0 ) { |     if( m->length == 0 ) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,48 +1,43 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| * Purpose: This file contains functions for copying strings based on  | * Purpose: This file contains functions for copying strings based on  | ||||||
| * different options. | * different options. | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "config.h" | #include "config.h" | ||||||
| #include "upnp.h" | #include "upnp.h" | ||||||
| #include "util.h" | #include "util.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <string.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| *	Function :	linecopy | *	Function :	linecopy | ||||||
| * | * | ||||||
|   | |||||||
| @@ -1,69 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef VIRTUALDIR_H |  | ||||||
| #define VIRTUALDIR_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** The \b VirtualDirCallbacks structure contains the pointers to |  | ||||||
|  *  file-related callback functions a device application can register to |  | ||||||
|  *  virtualize URLs.   |  | ||||||
|  */ |  | ||||||
| struct VirtualDirCallbacks |  | ||||||
| { |  | ||||||
| 	/** Called by the web server to query information on a file.  The callback |  | ||||||
| 	 *  should return 0 on success or -1 on an error. */ |  | ||||||
| 	VDCallback_GetInfo get_info; |  | ||||||
|  |  | ||||||
| 	/** Called by the web server to open a file.  The callback should return |  | ||||||
| 	 *  a valid handle if the file can be opened.  Otherwise, it should return |  | ||||||
| 	 *  \c NULL to signify an error. */ |  | ||||||
| 	VDCallback_Open open; |  | ||||||
|  |  | ||||||
| 	/** Called by the web server to perform a sequential read from an open |  | ||||||
| 	 *  file.  The callback should copy \b buflen bytes from the file into |  | ||||||
| 	 *  the buffer. |  | ||||||
| 	 *  @return An integer representing one of the following: |  | ||||||
| 	 *      \li <tt>   0</tt>:  The file contains no more data (EOF). |  | ||||||
| 	 *      \li <tt> > 0</tt>: A successful read of the number of bytes in the |  | ||||||
| 	 *      	return code. |  | ||||||
| 	 *      \li <tt> < 0</tt>: An error occurred reading the file. |  | ||||||
| 	 */ |  | ||||||
| 	VDCallback_Read read; |  | ||||||
|  |  | ||||||
| 	/** Called by the web server to perform a sequential write to an open |  | ||||||
| 	 *  file.  The callback should write \b buflen bytes into the file from |  | ||||||
| 	 *  the buffer.  It should return the actual number of bytes written,  |  | ||||||
| 	 *  which might be less than \b buflen in the case of a write error. |  | ||||||
| 	 */ |  | ||||||
| 	VDCallback_Write write; |  | ||||||
|  |  | ||||||
| 	/** Called by the web server to move the file pointer, or offset, into |  | ||||||
| 	 *  an open file.  The \b origin parameter determines where to start |  | ||||||
| 	 *  moving the file pointer.  A value of \c SEEK_CUR moves the |  | ||||||
| 	 *  file pointer relative to where it is.  The \b offset parameter can |  | ||||||
| 	 *  be either positive (move forward) or negative (move backward).   |  | ||||||
| 	 *  \c SEEK_END moves relative to the end of the file.  A positive  |  | ||||||
| 	 *  \b offset extends the file.  A negative \b offset moves backward  |  | ||||||
| 	 *  in the file.  Finally, \c SEEK_SET moves to an absolute position in  |  | ||||||
| 	 *  the file. In this case, \b offset must be positive.  The callback  |  | ||||||
| 	 *  should return 0 on a successful seek or a non-zero value on an error. |  | ||||||
| 	 */ |  | ||||||
| 	VDCallback_Seek seek; |  | ||||||
|  |  | ||||||
| 	/** Called by the web server to close a file opened via the \b open |  | ||||||
| 	 *  callback.  It should return 0 on success, or a non-zero value on an  |  | ||||||
| 	 *  error. |  | ||||||
| 	 */ |  | ||||||
| 	VDCallback_Close close; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct virtual_Dir_List |  | ||||||
| { |  | ||||||
| 	struct virtual_Dir_List *next; |  | ||||||
| 	char dirName[NAME_SIZE]; |  | ||||||
| } virtualDirList; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* VIRTUALDIR_H */ |  | ||||||
|  |  | ||||||
| @@ -1,248 +1,167 @@ | |||||||
|  | /////////////////////////////////////////////////////////////////////////// | ||||||
|  | // | ||||||
|  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  | // All rights reserved.  | ||||||
|  | // | ||||||
|  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  | // | ||||||
|  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  | // this list of conditions and the following disclaimer.  | ||||||
|  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  | // and/or other materials provided with the distribution.  | ||||||
|  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  | // may be used to endorse or promote products derived from this software  | ||||||
|  | // without specific prior written permission. | ||||||
|  | //  | ||||||
|  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  | // | ||||||
|  | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #ifndef CLIENT_TABLE_H | #ifndef _CLIENT_TABLE | ||||||
| #define CLIENT_TABLE_H | #define _CLIENT_TABLE | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "service_table.h" |  | ||||||
| #include "upnp.h" | #include "upnp.h" | ||||||
| #include "UpnpString.h" |  | ||||||
| #include "upnp_timeout.h" |  | ||||||
| #include "uri.h" |  | ||||||
| #include "TimerThread.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | //#include <malloc.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <time.h> | #include <time.h> | ||||||
|  | #include "uri.h" | ||||||
|  | #include "service_table.h" | ||||||
|  |  | ||||||
|  | #include "TimerThread.h" | ||||||
|  | #include "upnp_timeout.h" | ||||||
|  |  | ||||||
| extern TimerThread gTimerThread; | extern TimerThread gTimerThread; | ||||||
|  |  | ||||||
|  | CLIENTONLY( | ||||||
|  | typedef struct CLIENT_SUBSCRIPTION { | ||||||
|  |   Upnp_SID sid; | ||||||
|  |   char * ActualSID; | ||||||
|  |   char * EventURL; | ||||||
|  |   int RenewEventId; | ||||||
|  |   struct CLIENT_SUBSCRIPTION * next; | ||||||
|  | } client_subscription; | ||||||
|  |  | ||||||
| #ifdef INCLUDE_CLIENT_APIS | /************************************************************************ | ||||||
|  | *	Function :	copy_client_subscription | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		client_subscription * in ;	- source client subscription | ||||||
|  | *		client_subscription * out ;	- destination client subscription | ||||||
|  | * | ||||||
|  | *	Description :	Make a copy of the client subscription data | ||||||
|  | * | ||||||
|  | *	Return : int ; | ||||||
|  | *		UPNP_E_OUTOF_MEMORY - On Failure to allocate memory | ||||||
|  | *		HTTP_SUCCESS - On Success | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | int copy_client_subscription(client_subscription * in, client_subscription * out); | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	free_client_subscription | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		client_subscription * sub ;	- Client subscription to be freed | ||||||
|  | * | ||||||
|  | *	Description :	Free memory allocated for client subscription data. | ||||||
|  | *		Remove timer thread associated with this subscription event. | ||||||
|  | * | ||||||
|  | *	Return : void ; | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | void free_client_subscription(client_subscription * sub); | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct s_ClientSubscription ClientSubscription; | /************************************************************************ | ||||||
|  | *	Function :	freeClientSubList | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		client_subscription * list ; Client subscription  | ||||||
|  | * | ||||||
|  | *	Description :	Free the client subscription table. | ||||||
|  | * | ||||||
|  | *	Return : void ; | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | void freeClientSubList(client_subscription * list); | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	RemoveClientSubClientSID | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		client_subscription **head ; Head of the subscription list	 | ||||||
|  | *		const Upnp_SID sid ;		 Subscription ID to be mactched | ||||||
|  | * | ||||||
|  | *	Description :	Remove the client subscription matching the  | ||||||
|  | *		subscritpion id represented by the const Upnp_SID sid parameter  | ||||||
|  | *		from the table and update the table. | ||||||
|  | * | ||||||
|  | *	Return : void ; | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | void RemoveClientSubClientSID(client_subscription **head,  | ||||||
|  | 				       const Upnp_SID sid); | ||||||
|  |  | ||||||
| /*! | /************************************************************************ | ||||||
|  * \brief Constructor. | *	Function :	GetClientSubClientSID | ||||||
|  */ | * | ||||||
| ClientSubscription *UpnpClientSubscription_new(); | *	Parameters : | ||||||
|  | *		client_subscription *head ; Head of the subscription list	 | ||||||
|  | *		const Upnp_SID sid ;		Subscription ID to be matched | ||||||
| /*! | * | ||||||
|  * \brief Destructor. | *	Description :	Return the client subscription from the client table  | ||||||
|  */ | *		that matches const Upnp_SID sid subscrition id value.  | ||||||
| void UpnpClientSubscription_delete( | * | ||||||
| 	/*! [in] The \b this pointer. */ | *	Return : client_subscription * ; The matching subscription | ||||||
| 	ClientSubscription *p); | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| /*! | client_subscription * GetClientSubClientSID(client_subscription *head | ||||||
|  * \brief Copy Constructor. | 						     , const Upnp_SID sid); | ||||||
|  */ |  | ||||||
| ClientSubscription *UpnpClientSubscription_dup( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	const ClientSubscription *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Assignment operator. |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_assign( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *q, |  | ||||||
| 	const ClientSubscription *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| int UpnpClientSubscription_get_RenewEventId( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	const ClientSubscription *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_set_RenewEventId( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	/*! [in] . */ |  | ||||||
| 	int n); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| const UpnpString *UpnpClientSubscription_get_SID( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	const ClientSubscription *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_set_SID( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	const UpnpString *s); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_strcpy_SID( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	const char *s); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| const UpnpString *UpnpClientSubscription_get_ActualSID( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	const ClientSubscription *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_set_ActualSID( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	const UpnpString *s); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_strcpy_ActualSID( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	const char *s); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| const UpnpString *UpnpClientSubscription_get_EventURL( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	const ClientSubscription *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_set_EventURL( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	const UpnpString *s); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_strcpy_EventURL( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	const char *s); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| ClientSubscription *UpnpClientSubscription_get_Next( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	const ClientSubscription *p); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief  |  | ||||||
|  */ |  | ||||||
| void UpnpClientSubscription_set_Next( |  | ||||||
| 	/*! [in] The \b this pointer. */ |  | ||||||
| 	ClientSubscription *p, |  | ||||||
| 	ClientSubscription *q); |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Free memory allocated for client subscription data. |  | ||||||
|  * |  | ||||||
|  * Remove timer thread associated with this subscription event. |  | ||||||
|  */ |  | ||||||
| void free_client_subscription( |  | ||||||
| 	/*! [in] Client subscription to be freed. */ |  | ||||||
| 	ClientSubscription *sub); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Free the client subscription table. |  | ||||||
|  */ |  | ||||||
| void freeClientSubList( |  | ||||||
| 	/*! [in] Client subscription list to be freed. */ |  | ||||||
| 	ClientSubscription *list); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Remove the client subscription matching the subscritpion id |  | ||||||
|  * represented by the const Upnp_SID sid parameter from the table and |  | ||||||
|  * update the table. |  | ||||||
|  */ |  | ||||||
| void RemoveClientSubClientSID( |  | ||||||
| 	/*! [in] Head of the subscription list. */ |  | ||||||
| 	ClientSubscription **head, |  | ||||||
| 	/*! [in] Subscription ID to be mactched. */ |  | ||||||
| 	const UpnpString *sid); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Return the client subscription from the client table that matches |  | ||||||
|  * const Upnp_SID sid subscrition id value. |  | ||||||
|  * |  | ||||||
|  * \return The matching subscription. |  | ||||||
|  */ |  | ||||||
| ClientSubscription *GetClientSubClientSID( |  | ||||||
| 	/*! [in] Head of the subscription list. */ |  | ||||||
| 	ClientSubscription *head, |  | ||||||
| 	/*! [in] Subscription ID to be mactched. */ |  | ||||||
| 	const UpnpString *sid); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Returns the client subscription from the client subscription table |  | ||||||
|  * that has the matching token *sid buffer value. |  | ||||||
|  * |  | ||||||
|  * \return The matching subscription. |  | ||||||
|  */ |  | ||||||
| ClientSubscription *GetClientSubActualSID( |  | ||||||
| 	/*! [in] Head of the subscription list. */ |  | ||||||
| 	ClientSubscription *head, |  | ||||||
| 	/*! [in] Subscription ID to be mactched. */ |  | ||||||
| 	token *sid); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* INCLUDE_CLIENT_APIS */ |  | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	GetClientSubActualSID | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		client_subscription *head ;	Head of the subscription list		 | ||||||
|  | *		token * sid ;				Subscription ID to be matched | ||||||
|  | * | ||||||
|  | *	Description :	Returns the client subscription from the client  | ||||||
|  | *		subscription table that has the matching token * sid buffer | ||||||
|  | *		value. | ||||||
|  | * | ||||||
|  | *	Return : client_subscription * ; The matching subscription | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | client_subscription * GetClientSubActualSID(client_subscription *head | ||||||
|  | 						     , token * sid); | ||||||
|  | ) | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif /* __cplusplus */ | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* CLIENT_TABLE_H */ |  | ||||||
|  |  | ||||||
|  | #endif /*	_CLIENT_TABLE */ | ||||||
|   | |||||||
| @@ -1,214 +1,148 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved. | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met: | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice, | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice, | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution. | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  * | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #ifndef INTERNAL_CONFIG_H | #ifndef INTERNAL_CONFIG_H | ||||||
| #define INTERNAL_CONFIG_H  | #define INTERNAL_CONFIG_H  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "autoconfig.h" | #include "autoconfig.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /** @name Compile time configuration options | ||||||
|  *  \name Compile time configuration options |  | ||||||
|  * |  | ||||||
|  *  The Linux SDK for UPnP Devices contains some compile-time parameters  |  *  The Linux SDK for UPnP Devices contains some compile-time parameters  | ||||||
|  *  that effect the behavior of the SDK.  All configuration options are  |  *  that effect the behavior of the SDK.  All configuration options are  | ||||||
|  *  located in {\tt src/inc/config.h}. |  *  located in {\tt src/inc/config.h}. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|   |   | ||||||
|  | //@{ | ||||||
|  |  | ||||||
| /*! | /** @name THREAD_IDLE_TIME | ||||||
|  *  \name THREAD_IDLE_TIME |  | ||||||
|  * |  | ||||||
|  *  The {\tt THREAD_IDLE_TIME} constant determines when a thread will be |  *  The {\tt THREAD_IDLE_TIME} constant determines when a thread will be | ||||||
|  *  removed from the thread pool and returned to the operating system. When  |  *  removed from the thread pool and returned to the operating system. When  | ||||||
|  *  a thread in the thread pool has been idle for this number of milliseconds |  *  a thread in the thread pool has been idle for this number of milliseconds | ||||||
|  *  the thread will be released from the thread pool.  The default value is |  *  the thread will be released from the thread pool.  The default value is | ||||||
|  *  5000 milliseconds (5 seconds). |  *  5000 milliseconds (5 seconds). | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define THREAD_IDLE_TIME 5000 | #define THREAD_IDLE_TIME 5000 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name JOBS_PER_THREAD | ||||||
| /*! |  *  The {\tt JOBS_PER_THREAD} constant determines when a new thread will be | ||||||
|  * \name JOBS_PER_THREAD |  *  allocated to the thread pool inside the  SDK. The thread pool will | ||||||
|  * |  *  try and maintain this jobs/thread ratio. When the jobs/thread ratio  | ||||||
|  * The {\tt JOBS_PER_THREAD} constant determines when a new thread will be |  *  becomes greater than this, then a new thread (up to the max) will be  | ||||||
|  * allocated to the thread pool inside the  SDK. The thread pool will |  *  allocated to the thread pool.  The default ratio is 10 jobs/thread. | ||||||
|  * try and maintain this jobs/thread ratio. When the jobs/thread ratio  |  | ||||||
|  * becomes greater than this, then a new thread (up to the max) will be  |  | ||||||
|  * allocated to the thread pool.  The default ratio is 10 jobs/thread. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define JOBS_PER_THREAD 10 | #define JOBS_PER_THREAD 10 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MIN_THREADS | ||||||
| /*! |  *  The {\tt MIN_THREADS} constant defines the minimum number of threads the | ||||||
|  * \name MIN_THREADS |  *  thread pool inside the SDK will create.  The thread pool will | ||||||
|  * |  *  always have this number of threads. These threads are used | ||||||
|  * The {\tt MIN_THREADS} constant defines the minimum number of threads the |  *  for both callbacks into applications built on top of the SDK and also | ||||||
|  * thread pool inside the SDK will create.  The thread pool will |  *  for making connections to other control points and devices. This number | ||||||
|  * always have this number of threads. These threads are used |  *  includes persistent threads.  The default value is two threads. | ||||||
|  * for both callbacks into applications built on top of the SDK and also |  | ||||||
|  * for making connections to other control points and devices. This number |  | ||||||
|  * includes persistent threads.  The default value is two threads. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MIN_THREADS 2  | #define MIN_THREADS 2  | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MAX_THREADS | ||||||
| /*! |  *  The {\tt MAX_THREADS} constant defines the maximum number of threads the | ||||||
|  * \name MAX_THREADS |  *  thread pool inside the SDK will create.  These threads are used | ||||||
|  * |  *  for both callbacks into applications built on top of the library and also  | ||||||
|  * The {\tt MAX_THREADS} constant defines the maximum number of threads the |  *  for making connections to other control points and devices.  It is not  | ||||||
|  * thread pool inside the SDK will create.  These threads are used |  *  recommended that this value be below 10, since the threads are  | ||||||
|  * for both callbacks into applications built on top of the library and also  |  *  necessary for correct operation.  This value can be increased for greater | ||||||
|  * for making connections to other control points and devices.  It is not  |  *  performance in operation at the expense of greater memory overhead.  The  | ||||||
|  * recommended that this value be below 10, since the threads are  |  *  default value is 12. | ||||||
|  * necessary for correct operation.  This value can be increased for greater |  | ||||||
|  * performance in operation at the expense of greater memory overhead.  The  |  | ||||||
|  * default value is 12. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MAX_THREADS 12  | #define MAX_THREADS 12  | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MAX_JOBS_TOTAL | ||||||
| /*! |  | ||||||
|  * \name THREAD_STACK_SIZE |  | ||||||
|  * |  | ||||||
|  * The {\tt THREAD_STACK_SIZE} constant defines the minimum stack size (in |  | ||||||
|  * bytes) allocated for the stack of each thread the thread pool inside the |  | ||||||
|  * SDK will create.  These threads are used for both callbacks into |  | ||||||
|  * applications built on top of the library and also for making connections |  | ||||||
|  * to other control points and devices.  This value will not be used if it |  | ||||||
|  * is lower than ITHREAD_STACK_MIN or greater than a system-imposed limit. |  | ||||||
|  * This value can be used to lower memory overhead in embedded systems. |  | ||||||
|  * The default value is 0 (so it is not used by default). |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define THREAD_STACK_SIZE 0 |  | ||||||
| /* @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! \name MAX_JOBS_TOTAL |  | ||||||
|  * |  | ||||||
|  *  The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs |  *  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 |  *  that can be queued. If this limit is reached further jobs will be thrown | ||||||
|  *  to avoid memory exhaustion. The default value 100. |  *  to avoid memory exhaustion. The default value 100. | ||||||
|  *  (Added by Axis.) |  *  (Added by Axis.) | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MAX_JOBS_TOTAL 100 | #define MAX_JOBS_TOTAL 100 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name DEFAULT_SOAP_CONTENT_LENGTH | ||||||
| /*! |  | ||||||
|  * \name DEFAULT_SOAP_CONTENT_LENGTH |  | ||||||
|  * |  | ||||||
|  * SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.   |  * SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.   | ||||||
|  * This prevents devices that have a misbehaving web server to send  |  * This prevents devices that have a misbehaving web server to send  | ||||||
|  * a large amount of data to the control point causing it to crash.   |  * a large amount of data to the control point causing it to crash.   | ||||||
|  * This can be adjusted dynamically with {\tt UpnpSetMaxContentLength}. |  * This can be adjusted dynamically with {\tt UpnpSetMaxContentLength}. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define DEFAULT_SOAP_CONTENT_LENGTH 16000 | #define DEFAULT_SOAP_CONTENT_LENGTH 16000 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name NUM_SSDP_COPY | ||||||
| /*! |  | ||||||
|  * \name NUM_SSDP_COPY |  | ||||||
|  * |  | ||||||
|  * This configuration parameter determines how many copies of each SSDP  |  * This configuration parameter determines how many copies of each SSDP  | ||||||
|  * advertisement and search packets will be sent. By default it will send two  |  * advertisement and search packets will be sent. By default it will send two  | ||||||
|  * copies of every packet.   |  * copies of every packet.   | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define NUM_SSDP_COPY  2 | #define NUM_SSDP_COPY  2 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name SSDP_PAUSE | ||||||
| /*! |  | ||||||
|  * \name SSDP_PAUSE |  | ||||||
|  * |  | ||||||
|  * This configuration parameter determines the pause between identical SSDP  |  * This configuration parameter determines the pause between identical SSDP  | ||||||
|  * advertisement and search packets. The pause is measured in milliseconds |  * advertisement and search packets. The pause is measured in milliseconds | ||||||
|  * and defaults to 100. |  * and defaults to 100. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define SSDP_PAUSE  100 | #define SSDP_PAUSE  100 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
| /*! | /** @name WEB_SERVER_BUF_SIZE  | ||||||
|  * \name WEB_SERVER_BUF_SIZE |  | ||||||
|  *  |  | ||||||
|  * This configuration parameter sets the maximum buffer size for the  |  * This configuration parameter sets the maximum buffer size for the  | ||||||
|  * webserver. The default value is 1MB. |  * webserver.  The default value is 1MB. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  | //@{ | ||||||
| #define WEB_SERVER_BUF_SIZE  (1024*1024) | #define WEB_SERVER_BUF_SIZE  (1024*1024) | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
| /*! | /** @name AUTO_RENEW_TIME | ||||||
|  * \name WEB_SERVER_CONTENT_LANGUAGE |  | ||||||
|  * |  | ||||||
|  * This configuration parameter sets the value of the Content-Language |  | ||||||
|  * header for the webserver. Thanks to this parameter, the use can advertize |  | ||||||
|  * the language used by the device in the description (friendlyName) and |  | ||||||
|  * presentation steps of UPnP. The default value is empty string so no |  | ||||||
|  * Content-Language header is added. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define WEB_SERVER_CONTENT_LANGUAGE "" |  | ||||||
| /* @} */ |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \name AUTO_RENEW_TIME |  | ||||||
|  * |  | ||||||
|  * The {\tt AUTO_RENEW_TIME} is the time, in seconds, before a subscription |  * The {\tt AUTO_RENEW_TIME} is the time, in seconds, before a subscription | ||||||
|  * expires that the SDK automatically resubscribes.  The default  |  * expires that the SDK automatically resubscribes.  The default  | ||||||
|  * value is 10 seconds.  Setting this value too low can result in the  |  * value is 10 seconds.  Setting this value too low can result in the  | ||||||
| @@ -216,104 +150,89 @@ | |||||||
|  * subscription to timeout. In order to avoid continually resubscribing |  * subscription to timeout. In order to avoid continually resubscribing | ||||||
|  * the minimum subscription time is five seconds more than the auto renew |  * the minimum subscription time is five seconds more than the auto renew | ||||||
|  * time. |  * time. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
| #define AUTO_RENEW_TIME 10 |  | ||||||
| /* @} */ |  | ||||||
|  |  | ||||||
| /*! | //@{ | ||||||
|  * \name CP_MINIMUM_SUBSCRIPTION_TIME | #define AUTO_RENEW_TIME 10 | ||||||
|  * | //@} | ||||||
|  |  | ||||||
|  | /** @name CP_MINIMUM_SUBSCRIPTION_TIME  | ||||||
|  * The {\tt CP_MINIMUM_SUBSCRIPTION_TIME} is the minimum subscription time |  * The {\tt CP_MINIMUM_SUBSCRIPTION_TIME} is the minimum subscription time | ||||||
|  * allowed for a control point using the SDK. Subscribing for less than |  * allowed for a control point using the SDK. Subscribing for less than | ||||||
|  * this time automatically results in a subscription for this amount.  The  |  * this time automatically results in a subscription for this amount.  The  | ||||||
|  * default value is 5 seconds more than the {\tt AUTO_RENEW_TIME}, or 15 |  * default value is 5 seconds more than the {\tt AUTO_RENEW_TIME}, or 15 | ||||||
|  * seconds. |  * seconds. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define CP_MINIMUM_SUBSCRIPTION_TIME (AUTO_RENEW_TIME + 5) | #define CP_MINIMUM_SUBSCRIPTION_TIME (AUTO_RENEW_TIME + 5) | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MAX_SEARCH_TIME  | ||||||
| /*! |  | ||||||
|  * \name MAX_SEARCH_TIME |  | ||||||
|  * |  | ||||||
|  * The {\tt MAX_SEARCH_TIME} is the maximum time |  * The {\tt MAX_SEARCH_TIME} is the maximum time | ||||||
|  * allowed for an SSDP search by a control point. Searching for greater than |  * allowed for an SSDP search by a control point. Searching for greater than | ||||||
|  * this time automatically results in a search for this amount.  The default  |  * this time automatically results in a search for this amount.  The default  | ||||||
|  * value is 80 seconds. |  * value is 80 seconds. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MAX_SEARCH_TIME 80 | #define MAX_SEARCH_TIME 80 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name MIN_SEARCH_TIME  | ||||||
| /*! |  | ||||||
|  * \name MIN_SEARCH_TIME |  | ||||||
|  * |  | ||||||
|  * The {\tt MIN_SEARCH_TIME} is the minimumm time |  * The {\tt MIN_SEARCH_TIME} is the minimumm time | ||||||
|  * allowed for an SSDP search by a control point. Searching for less than |  * allowed for an SSDP search by a control point. Searching for less than | ||||||
|  * this time automatically results in a search for this amount.  The default  |  * this time automatically results in a search for this amount.  The default  | ||||||
|  * value is 2 seconds. |  * value is 2 seconds. | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define MIN_SEARCH_TIME 2 | #define MIN_SEARCH_TIME 2 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /** @name AUTO_ADVERTISEMENT_TIME | ||||||
|  * \name AUTO_ADVERTISEMENT_TIME |  *  The {\tt AUTO_ADVERTISEMENT_TIME} is the time, in seconds, before an | ||||||
|  * |  *  device advertisements expires before a renewed advertisement is sent. | ||||||
|  * The {\tt AUTO_ADVERTISEMENT_TIME} is the time, in seconds, before an |  *  The default time is 30 seconds. | ||||||
|  * device advertisements expires before a renewed advertisement is sent. |  | ||||||
|  * The default time is 30 seconds. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define AUTO_ADVERTISEMENT_TIME 30 | #define AUTO_ADVERTISEMENT_TIME 30 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name SSDP_PACKET_DISTRIBUTE | ||||||
| /*! |  *  The {\tt SSDP_PACKET_DISTRIBUTE} enables the SSDP packets to be sent | ||||||
|  * \name SSDP_PACKET_DISTRIBUTE |  *  at an interval equal to half of the expiration time of SSDP packets | ||||||
|  * |  *  minus the AUTO_ADVERTISEMENT_TIME. This is used to increase | ||||||
|  * The {\tt SSDP_PACKET_DISTRIBUTE} enables the SSDP packets to be sent |  *  the probability of SSDP packets reaching to control points. | ||||||
|  * at an interval equal to half of the expiration time of SSDP packets |  *  It is recommended that this flag be turned on for embedded wireless  | ||||||
|  * minus the AUTO_ADVERTISEMENT_TIME. This is used to increase |  *  devices. | ||||||
|  * the probability of SSDP packets reaching to control points. |  | ||||||
|  * It is recommended that this flag be turned on for embedded wireless  |  | ||||||
|  * devices. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define SSDP_PACKET_DISTRIBUTE 1 | #define SSDP_PACKET_DISTRIBUTE 1 | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  | /** @name Module Exclusion | ||||||
| /*! |  *  Depending on the requirements, the user can selectively discard any of  | ||||||
|  * \name Module Exclusion |  *  the major modules like SOAP, GENA, SSDP or the Internal web server. By  | ||||||
|  |  *  default everything is included inside the SDK.  By setting any of | ||||||
|  |  *  the values below to 0, that component will not be included in the final | ||||||
|  |  *  SDK. | ||||||
|  |  *  \begin{itemize} | ||||||
|  |  *    \item {\tt EXCLUDE_SOAP[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_GENA[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_SSDP[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_DOM [0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_MINISERVER[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_WEB_SERVER[0,1]} | ||||||
|  |  *    \item {\tt EXCLUDE_JNI[0,1]} | ||||||
|  |  *  \end{itemize} | ||||||
|  * |  * | ||||||
|  * Depending on the requirements, the user can selectively discard any of  |  | ||||||
|  * the major modules like SOAP, GENA, SSDP or the Internal web server. By  |  | ||||||
|  * default everything is included inside the SDK.  By setting any of |  | ||||||
|  * the values below to 0, that component will not be included in the final |  | ||||||
|  * SDK. |  | ||||||
|  * \begin{itemize} |  | ||||||
|  *   \item {\tt EXCLUDE_SOAP[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_GENA[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_SSDP[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_DOM [0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_MINISERVER[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_WEB_SERVER[0,1]} |  | ||||||
|  *   \item {\tt EXCLUDE_JNI[0,1]} |  | ||||||
|  * \end{itemize} |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define EXCLUDE_SSDP 0 | #define EXCLUDE_SSDP 0 | ||||||
| #define EXCLUDE_SOAP 0 | #define EXCLUDE_SOAP 0 | ||||||
| #define EXCLUDE_GENA 0 | #define EXCLUDE_GENA 0 | ||||||
| @@ -325,28 +244,24 @@ | |||||||
| #else | #else | ||||||
| #	define EXCLUDE_JNI 1 | #	define EXCLUDE_JNI 1 | ||||||
| #endif | #endif | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|      |      | ||||||
| /*! | /** @name DEBUG_TARGET | ||||||
|  * \name DEBUG_TARGET |  *  The user has the option to redirect the library output debug messages  | ||||||
|  * |  *  to either the screen or to a log file.  All the output messages with  | ||||||
|  * The user has the option to redirect the library output debug messages  |  *  debug level 0 will go to {\tt upnp.err} and messages with debug level  | ||||||
|  * to either the screen or to a log file.  All the output messages with  |  *  greater than zero will be redirected to {\tt upnp.out}. | ||||||
|  * debug level 0 will go to {\tt upnp.err} and messages with debug level  |  | ||||||
|  * greater than zero will be redirected to {\tt upnp.out}. |  | ||||||
|  * |  | ||||||
|  * @{ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
| #define DEBUG_TARGET		1    | #define DEBUG_TARGET		1    | ||||||
| /* @} */ | //@} | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /** @name Other debugging features | ||||||
|  * \name Other debugging features |           The UPnP SDK contains other features to aid in debugging: | ||||||
|  * | 	  see <upnp/upnpdebug.h> | ||||||
|  * The UPnP SDK contains other features to aid in debugging: |  | ||||||
|  * see <upnp/inc/upnpdebug.h> |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #define DEBUG_ALL		1    | #define DEBUG_ALL		1    | ||||||
| @@ -359,44 +274,36 @@ | |||||||
| #define DEBUG_HTTP		0 | #define DEBUG_HTTP		0 | ||||||
| #define DEBUG_API		0     | #define DEBUG_API		0     | ||||||
|  |  | ||||||
|  | //@} // Compile time configuration options | ||||||
| /* |  | ||||||
|  * @} Compile time configuration options |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*************************************************************************** | /*************************************************************************** | ||||||
|  * Do not change, Internal purpose only!!!  |  * Do not change, Internal purpose only!!!  | ||||||
|  ***************************************************************************/  |  ***************************************************************************/  | ||||||
|  |  | ||||||
| /*! | //@{ | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Set additional defines based on requested configuration  |  * Set additional defines based on requested configuration  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | // configure --enable-client | ||||||
| /* configure --enable-client */ |  | ||||||
| #if UPNP_HAVE_CLIENT | #if UPNP_HAVE_CLIENT | ||||||
| #	define INCLUDE_CLIENT_APIS	1 | #	define INCLUDE_CLIENT_APIS	1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // configure --enable-device | ||||||
| /* configure --enable-device */ |  | ||||||
| #if UPNP_HAVE_DEVICE | #if UPNP_HAVE_DEVICE | ||||||
| #	define INCLUDE_DEVICE_APIS	1 | #	define INCLUDE_DEVICE_APIS	1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // configure --enable-webserver --enable-device | ||||||
| /* configure --enable-webserver --enable-device */ |  | ||||||
| #if UPNP_HAVE_WEBSERVER | #if UPNP_HAVE_WEBSERVER | ||||||
| #	define INTERNAL_WEB_SERVER	1 | #	define INTERNAL_WEB_SERVER	1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #undef  EXCLUDE_WEB_SERVER  | #undef  EXCLUDE_WEB_SERVER  | ||||||
| #undef  EXCLUDE_MINISERVER  | #undef  EXCLUDE_MINISERVER  | ||||||
| #ifdef  INTERNAL_WEB_SERVER | #ifdef  INTERNAL_WEB_SERVER | ||||||
| @@ -407,7 +314,6 @@ | |||||||
| #	define EXCLUDE_MINISERVER 1 | #	define EXCLUDE_MINISERVER 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #if EXCLUDE_GENA == 1 && EXCLUDE_SOAP == 1 && EXCLUDE_WEB_SERVER == 1 | #if EXCLUDE_GENA == 1 && EXCLUDE_SOAP == 1 && EXCLUDE_WEB_SERVER == 1 | ||||||
| #	undef  EXCLUDE_MINISERVER  | #	undef  EXCLUDE_MINISERVER  | ||||||
| #	define EXCLUDE_MINISERVER 1 | #	define EXCLUDE_MINISERVER 1 | ||||||
| @@ -416,7 +322,6 @@ | |||||||
| #	endif | #	endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #if EXCLUDE_GENA == 0 || EXCLUDE_SOAP == 0 || EXCLUDE_WEB_SERVER == 0 | #if EXCLUDE_GENA == 0 || EXCLUDE_SOAP == 0 || EXCLUDE_WEB_SERVER == 0 | ||||||
| #	undef  EXCLUDE_MINISERVER  | #	undef  EXCLUDE_MINISERVER  | ||||||
| #	define EXCLUDE_MINISERVER 0 | #	define EXCLUDE_MINISERVER 0 | ||||||
| @@ -426,9 +331,13 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * @} |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #endif /* INTERNAL_CONFIG_H */ | #ifdef INCLUDE_CLIENT_APIS | ||||||
|  | #	define CLIENTONLY(x) x | ||||||
|  | #else  | ||||||
|  | #	define CLIENTONLY(x) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | //@} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,83 +1,65 @@ | |||||||
| /******************************************************************************* | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ******************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef GENA_H |  | ||||||
| #define GENA_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \file |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef _GENA_ | ||||||
|  | #define _GENA_ | ||||||
| #include "config.h" | #include "config.h" | ||||||
|  | #include "service_table.h" | ||||||
|  | #include "miniserver.h" | ||||||
|  | #include "uri.h" | ||||||
|  | #include "upnp.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <string.h> |  | ||||||
| #include <time.h> | #include <time.h> | ||||||
|  | #include "ThreadPool.h" | ||||||
|  | #include <string.h> | ||||||
| #include "client_table.h" | #include "client_table.h" | ||||||
| #include "httpparser.h" | #include "httpparser.h" | ||||||
| #include "miniserver.h" |  | ||||||
| #include "service_table.h" |  | ||||||
| #include "sock.h" | #include "sock.h" | ||||||
| #include "ThreadPool.h" |  | ||||||
| #include "upnp.h" |  | ||||||
| #include "UpnpString.h" |  | ||||||
| #include "uri.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| 	#define EXTERN_C extern "C" | #define EXTERN_C extern "C" | ||||||
| #else /* __cplusplus */ | #else  | ||||||
| 	#ifndef EXTERN_C | #ifndef EXTERN_C | ||||||
| 		#define EXTERN_C  |  #define EXTERN_C  | ||||||
| 	#endif /* EXTERN_C */ | #endif | ||||||
| #endif /* __cplusplus */ | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief XML version comment. Not used because it is not interopeable with |  | ||||||
|  * other UPnP vendors. |  | ||||||
|  */ |  | ||||||
| #define XML_VERSION "<?xml version='1.0' encoding='ISO-8859-1' ?>\n" | #define XML_VERSION "<?xml version='1.0' encoding='ISO-8859-1' ?>\n" | ||||||
| #define XML_PROPERTYSET_HEADER \ | #define XML_PROPERTYSET_HEADER \ | ||||||
| 	"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">\n" | 		"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">\n" | ||||||
|  |  | ||||||
|  |  | ||||||
| #define UNABLE_MEMORY "HTTP/1.1 500 Internal Server Error\r\n\r\n" | #define UNABLE_MEMORY "HTTP/1.1 500 Internal Server Error\r\n\r\n" | ||||||
| #define UNABLE_SERVICE_UNKNOWN "HTTP/1.1 404 Not Found\r\n\r\n" | #define UNABLE_SERVICE_UNKNOWN "HTTP/1.1 404 Not Found\r\n\r\n" | ||||||
| #define UNABLE_SERVICE_NOT_ACCEPT "HTTP/1.1 503 Service Not Available\r\n\r\n" | #define UNABLE_SERVICE_NOT_ACCEPT \ | ||||||
|  | 			"HTTP/1.1 503 Service Not Available\r\n\r\n" | ||||||
|  |  | ||||||
|  |  | ||||||
| #define NOT_IMPLEMENTED "HTTP/1.1 501 Not Implemented\r\n\r\n" | #define NOT_IMPLEMENTED "HTTP/1.1 501 Not Implemented\r\n\r\n" | ||||||
| @@ -92,8 +74,6 @@ | |||||||
| #define MAX_SECONDS 10 | #define MAX_SECONDS 10 | ||||||
| #define MAX_EVENTS 20 | #define MAX_EVENTS 20 | ||||||
| #define MAX_PORT_SIZE 10 | #define MAX_PORT_SIZE 10 | ||||||
|  |  | ||||||
|  |  | ||||||
| #define GENA_E_BAD_RESPONSE UPNP_E_BAD_RESPONSE | #define GENA_E_BAD_RESPONSE UPNP_E_BAD_RESPONSE | ||||||
| #define GENA_E_BAD_SERVICE UPNP_E_INVALID_SERVICE | #define GENA_E_BAD_SERVICE UPNP_E_INVALID_SERVICE | ||||||
| #define GENA_E_SUBSCRIPTION_UNACCEPTED UPNP_E_SUBSCRIBE_UNACCEPTED | #define GENA_E_SUBSCRIPTION_UNACCEPTED UPNP_E_SUBSCRIBE_UNACCEPTED | ||||||
| @@ -102,23 +82,16 @@ | |||||||
| #define GENA_E_NOTIFY_UNACCEPTED UPNP_E_NOTIFY_UNACCEPTED | #define GENA_E_NOTIFY_UNACCEPTED UPNP_E_NOTIFY_UNACCEPTED | ||||||
| #define GENA_E_NOTIFY_UNACCEPTED_REMOVE_SUB -9 | #define GENA_E_NOTIFY_UNACCEPTED_REMOVE_SUB -9 | ||||||
| #define GENA_E_BAD_HANDLE UPNP_E_INVALID_HANDLE | #define GENA_E_BAD_HANDLE UPNP_E_INVALID_HANDLE | ||||||
|  |  | ||||||
|  |  | ||||||
| #define XML_ERROR -5 | #define XML_ERROR -5 | ||||||
| #define XML_SUCCESS UPNP_E_SUCCESS | #define XML_SUCCESS UPNP_E_SUCCESS | ||||||
| #define GENA_SUCCESS UPNP_E_SUCCESS | #define GENA_SUCCESS UPNP_E_SUCCESS | ||||||
|  |  | ||||||
|  |  | ||||||
| #define CALLBACK_SUCCESS 0 | #define CALLBACK_SUCCESS 0 | ||||||
| #define DEFAULT_TIMEOUT 1801 | #define DEFAULT_TIMEOUT 1801 | ||||||
|  |  | ||||||
|  |  | ||||||
| extern ithread_mutex_t GlobalClientSubscribeMutex; | extern ithread_mutex_t GlobalClientSubscribeMutex; | ||||||
|  |  | ||||||
|  | // Lock the subscription | ||||||
| /*! |  | ||||||
|  * \brief Locks the subscription. |  | ||||||
|  */ |  | ||||||
| #define SubscribeLock() \ | #define SubscribeLock() \ | ||||||
| 	UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ | 	UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ | ||||||
| 		"Trying Subscribe Lock");  \ | 		"Trying Subscribe Lock");  \ | ||||||
| @@ -126,10 +99,7 @@ extern ithread_mutex_t GlobalClientSubscribeMutex; | |||||||
| 	UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ | 	UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ | ||||||
| 		"Subscribe Lock"); | 		"Subscribe Lock"); | ||||||
|  |  | ||||||
|  | // Unlock the subscription | ||||||
| /*! |  | ||||||
|  * \brief Unlocks the subscription. |  | ||||||
|  */ |  | ||||||
| #define SubscribeUnlock() \ | #define SubscribeUnlock() \ | ||||||
| 	UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ | 	UpnpPrintf(UPNP_INFO, GENA, __FILE__, __LINE__, \ | ||||||
| 		"Trying Subscribe UnLock"); \ | 		"Trying Subscribe UnLock"); \ | ||||||
| @@ -138,248 +108,295 @@ extern ithread_mutex_t GlobalClientSubscribeMutex; | |||||||
| 		"Subscribe UnLock"); | 		"Subscribe UnLock"); | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | // Structure to send NOTIFY message to all subscribed control points | ||||||
|  * Structure to send NOTIFY message to all subscribed control points |  | ||||||
|  */ |  | ||||||
| typedef struct NOTIFY_THREAD_STRUCT { | typedef struct NOTIFY_THREAD_STRUCT { | ||||||
| 	char *headers; |   char * headers; | ||||||
| 	DOMString propertySet; |   DOMString propertySet; | ||||||
| 	char *servId; |   char * servId; | ||||||
| 	char *UDN; |   char * UDN; | ||||||
| 	Upnp_SID sid; |   Upnp_SID sid; | ||||||
| 	int eventKey; |   int eventKey; | ||||||
| 	int *reference_count; |   int *reference_count; | ||||||
| 	UpnpDevice_Handle device_handle; |   UpnpDevice_Handle device_handle; | ||||||
| } notify_thread_struct; | } notify_thread_struct; | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /************************************************************************ | ||||||
|  * \brief This is the callback function called by the miniserver to handle | * Function : genaCallback									 | ||||||
|  *	incoming GENA requests. | *																	 | ||||||
|  * | * Parameters:														 | ||||||
|  * \return UPNP_E_SUCCESS if successful, otherwise appropriate error code. | *	IN http_parser_t *parser: represents the parse state of the request | ||||||
|  */ | *	IN http_message_t* request: HTTP message containing GENA request | ||||||
| EXTERN_C void genaCallback( | *	INOUT SOCKINFO *info: Structure containing information about the socket | ||||||
| 	/*! [in] represents the parse state of the request */ | * | ||||||
| 	http_parser_t *parser,  | * Description:														 | ||||||
| 	/*! [in] HTTP message containing GENA request */ | *	This is the callback function called by the miniserver to handle  | ||||||
| 	http_message_t* request, | *	incoming GENA requests.  | ||||||
| 	/*! [in,out] Structure containing information about the socket */ | * | ||||||
| 	SOCKINFO *info); | * Returns: int | ||||||
|  | *	UPNP_E_SUCCESS if successful else appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
|  | EXTERN_C void genaCallback (IN http_parser_t *parser,  | ||||||
|  | 							IN http_message_t* request,  | ||||||
|  | 							IN SOCKINFO *info); | ||||||
|  |  | ||||||
|   | /************************************************************************ | ||||||
| /*! | * Function : genaSubscribe | ||||||
|  * \brief This function subscribes to a PublisherURL (also mentioned as EventURL | *																	 | ||||||
|  * in some places). | * Parameters:														 | ||||||
|  * | *	IN UpnpClient_Handle client_handle:  | ||||||
|  * It sends SUBSCRIBE http request to service processes request. Finally adds a | *	IN char * PublisherURL: NULL Terminated, of the form :  | ||||||
|  * Subscription to the clients subscription list, if service responds with OK. | *						"http://134.134.156.80:4000/RedBulb/Event" | ||||||
|  * | *	INOUT int * TimeOut: requested Duration, if -1, then "infinite". | ||||||
|  * \return UPNP_E_SUCCESS if service response is OK, otherwise returns the  | *						in the OUT case: actual Duration granted  | ||||||
|  *	appropriate error code | *						by Service, -1 for infinite | ||||||
|  */ | *	OUT Upnp_SID out_sid:sid of subscription, memory passed in by caller | ||||||
|  | * | ||||||
|  | * Description:														 | ||||||
|  | *	This function subscribes to a PublisherURL ( also mentioned as EventURL | ||||||
|  | *	some places). It sends SUBSCRIBE http request to service processes  | ||||||
|  | *	request. Finally adds a Subscription to  | ||||||
|  | *	the clients subscription list, if service responds with OK | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	return UPNP_E_SUCCESS if service response is OK else  | ||||||
|  | *	returns appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
| #ifdef INCLUDE_CLIENT_APIS | #ifdef INCLUDE_CLIENT_APIS | ||||||
| EXTERN_C int genaSubscribe( | EXTERN_C int genaSubscribe( | ||||||
| 	/*! [in] The client handle. */ |  | ||||||
| 	UpnpClient_Handle client_handle, | 	UpnpClient_Handle client_handle, | ||||||
| 	/*! [in] Of the form: "http://134.134.156.80:4000/RedBulb/Event */ | 	char * PublisherURL, | ||||||
| 	const UpnpString *PublisherURL, | 	int * TimeOut,  | ||||||
| 	/*! [in,out] requested Duration: | 	Upnp_SID  out_sid ); | ||||||
| 	 * \li if -1, then "infinite". | #endif | ||||||
| 	 * \li in the OUT case: actual Duration granted by Service, |  | ||||||
| 	 * 	-1 for infinite. */ |  | ||||||
| 	int *TimeOut, |  | ||||||
| 	/*! [out] sid of subscription, memory passed in by caller. */ |  | ||||||
| 	UpnpString *out_sid); |  | ||||||
| #endif /* INCLUDE_CLIENT_APIS */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /************************************************************************ | ||||||
|  * \brief Unsubscribes a SID. | * Function : genaUnSubscribe | ||||||
|  * | *																	 | ||||||
|  * It first validates the SID and client_handle,copies the subscription, sends | * Parameters:														 | ||||||
|  * UNSUBSCRIBE http request to service processes request and finally removes | *	IN UpnpClient_Handle client_handle: UPnP client handle | ||||||
|  * the subscription. | *	IN SID in_sid: The subscription ID | ||||||
|  * | * | ||||||
|  * \return UPNP_E_SUCCESS if service response is OK, otherwise returns the | * Description:														 | ||||||
|  * 	appropriate error code. | *	This function unsubscribes a SID. It first validates the SID and  | ||||||
|  */ | *	client_handle,copies the subscription, sends UNSUBSCRIBE http request  | ||||||
|  | *	to service processes request and finally removes the subscription | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	return UPNP_E_SUCCESS if service response is OK else  | ||||||
|  | *	returns appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
| #ifdef INCLUDE_CLIENT_APIS | #ifdef INCLUDE_CLIENT_APIS | ||||||
| EXTERN_C int genaUnSubscribe( | EXTERN_C int genaUnSubscribe( | ||||||
| 	/*! [in] UPnP client handle. */ |  | ||||||
| 	UpnpClient_Handle client_handle, | 	UpnpClient_Handle client_handle, | ||||||
| 	/*! [in] The subscription ID. */ | 	const Upnp_SID in_sid); | ||||||
| 	const UpnpString *in_sid); | #endif | ||||||
| #endif /* INCLUDE_CLIENT_APIS */ |  | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| /*! | * Function : genaUnregisterClient									 | ||||||
|  * \brief Unsubcribes all the outstanding subscriptions and cleans the | *																	 | ||||||
|  * 	subscription list. | * Parameters:														 | ||||||
|  * | *	IN UpnpClient_Handle client_handle: Handle containing all the control | ||||||
|  * This function is called when control point unregisters. | *			point related information | ||||||
|  * | * | ||||||
|  * \returns UPNP_E_SUCCESS if successful, otherwise returns the appropriate | * Description:														 | ||||||
|  * 	error code. | *	This function unsubcribes all the outstanding subscriptions and cleans | ||||||
|  */ | *	the subscription list. This function is called when control point  | ||||||
|  | *	unregisters. | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	return UPNP_E_SUCCESS if successful else returns appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
| #ifdef INCLUDE_CLIENT_APIS | #ifdef INCLUDE_CLIENT_APIS | ||||||
| EXTERN_C int genaUnregisterClient( | EXTERN_C int genaUnregisterClient(UpnpClient_Handle client_handle); | ||||||
| 	/*! [in] Handle containing all the control point related information. */ | #endif | ||||||
| 	UpnpClient_Handle client_handle); |  | ||||||
| #endif /* INCLUDE_CLIENT_APIS */ |  | ||||||
|  |  | ||||||
|  | //server | ||||||
| /* | /************************************************************************ | ||||||
|  * DEVICE | * Function : genaUnregisterDevice | ||||||
|  */ | *																	 | ||||||
|  | * Parameters:														 | ||||||
|  | *	IN UpnpDevice_Handle device_handle: Handle of the root device | ||||||
| /*! | * | ||||||
|  * \brief Cleans the service table of the device. | * Description:														 | ||||||
|  * | *	This function cleans the service table of the device.  | ||||||
|  * \return UPNP_E_SUCCESS if successful, otherwise returns GENA_E_BAD_HANDLE | * | ||||||
|  */ | * Returns: int | ||||||
|  | *	returns UPNP_E_SUCCESS if successful else returns GENA_E_BAD_HANDLE | ||||||
|  | ****************************************************************************/ | ||||||
| #ifdef INCLUDE_DEVICE_APIS | #ifdef INCLUDE_DEVICE_APIS | ||||||
| EXTERN_C int genaUnregisterDevice( | EXTERN_C int genaUnregisterDevice(UpnpDevice_Handle device_handle); | ||||||
|  	/*! [in] Handle of the root device */ | #endif | ||||||
| 	UpnpDevice_Handle device_handle); |  | ||||||
| #endif /* INCLUDE_CLIENT_APIS */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /************************************************************************ | ||||||
|  * \brief Renews a SID. | * Function : genaRenewSubscription | ||||||
|  * | *																	 | ||||||
|  * It first validates the SID and client_handle and copies the subscription. | * Parameters:														 | ||||||
|  * It sends RENEW (modified SUBSCRIBE) http request to service and processes | *	IN UpnpClient_Handle client_handle: Client handle | ||||||
|  * the response. | *	IN const Upnp_SID in_sid: subscription ID | ||||||
|  * | *	INOUT int * TimeOut: requested Duration, if -1, then "infinite". | ||||||
|  * \return UPNP_E_SUCCESS if service response is OK, otherwise the | *						in the OUT case: actual Duration granted  | ||||||
|  * 	appropriate error code. | *						by Service, -1 for infinite | ||||||
|  */ | * | ||||||
|  | * Description:														 | ||||||
|  | *	This function renews a SID. It first validates the SID and  | ||||||
|  | *	client_handle and copies the subscription. It sends RENEW  | ||||||
|  | *	(modified SUBSCRIBE) http request to service and processes | ||||||
|  | *	the response. | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	return UPNP_E_SUCCESS if service response is OK else  | ||||||
|  | *	returns appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
| #ifdef INCLUDE_CLIENT_APIS | #ifdef INCLUDE_CLIENT_APIS | ||||||
| EXTERN_C int genaRenewSubscription( | EXTERN_C int genaRenewSubscription( | ||||||
| 	/*! [in] Client handle. */ | 	IN UpnpClient_Handle client_handle, | ||||||
| 	UpnpClient_Handle client_handle, | 	IN const Upnp_SID in_sid, | ||||||
| 	/*! [in] Subscription ID. */ | 	OUT int * TimeOut); | ||||||
| 	const UpnpString *in_sid, | #endif | ||||||
| 	/*! [in,out] requested Duration, if -1, then "infinite". In the OUT case: | /**************************************************************************** | ||||||
| 	 * actual Duration granted by Service, -1 for infinite. */ | *	Function :	genaNotifyAll | ||||||
| 	int *TimeOut); | * | ||||||
| #endif /* INCLUDE_CLIENT_APIS */ | *	Parameters : | ||||||
|  | *		IN UpnpDevice_Handle device_handle : Device handle | ||||||
|  | *		IN char *UDN :	Device udn | ||||||
| /*! | *		IN char *servId :	Service ID | ||||||
|  * \brief Sends a notification to all the subscribed control points. | *	    IN char **VarNames : array of varible names | ||||||
|  * | *	    IN char **VarValues :	array of variable values | ||||||
|  * \return int | *		IN int var_count	 :	number of variables | ||||||
|  * | * | ||||||
|  * \note This function is similar to the genaNotifyAllExt. The only difference | *	Description : 	This function sends a notification to all the subscribed | ||||||
|  *	is it takes event variable array instead of xml document. | *	control points | ||||||
|  */ | * | ||||||
|  | *	Return :	int | ||||||
|  | * | ||||||
|  | *	Note : This function is similar to the genaNotifyAllExt. The only difference | ||||||
|  | *			is it takes event variable array instead of xml document. | ||||||
|  | ****************************************************************************/ | ||||||
| #ifdef INCLUDE_DEVICE_APIS | #ifdef INCLUDE_DEVICE_APIS | ||||||
| EXTERN_C int genaNotifyAll( | EXTERN_C int genaNotifyAll( | ||||||
| 	/*! [in] Device handle. */ |  | ||||||
| 	UpnpDevice_Handle device_handle, | 	UpnpDevice_Handle device_handle, | ||||||
| 	/*! [in] Device udn. */ |  | ||||||
| 	char *UDN, | 	char *UDN, | ||||||
| 	/*! [in] Service ID. */ |  | ||||||
| 	char *servId, | 	char *servId, | ||||||
| 	/*! [in] Array of varible names. */ |  | ||||||
| 	char **VarNames, | 	char **VarNames, | ||||||
| 	/*! [in] Array of variable values. */ |  | ||||||
| 	char **VarValues, | 	char **VarValues, | ||||||
| 	/*! [in] Number of variables. */ |  | ||||||
| 	int var_count); | 	int var_count); | ||||||
| #endif /* INCLUDE_DEVICE_APIS */ | #endif | ||||||
|  |  | ||||||
|  | /**************************************************************************** | ||||||
| /*! | * Function :	genaNotifyAllExt | ||||||
|  * \brief Sends a notification to all the subscribed control points. | * | ||||||
|  * | * Parameters : | ||||||
|  * \return int | *	IN UpnpDevice_Handle device_handle : Device handle | ||||||
|  * | *	IN char *UDN :			Device udn | ||||||
|  * \note This function is similar to the genaNotifyAll. the only difference | *	IN char *servId :		Service ID | ||||||
|  *	is it takes the document instead of event variable array. | *	IN IXML_Document *PropSet :	XML document Event varible property set | ||||||
|  */ | * | ||||||
|  | * Description : This function sends a notification to all the subscribed | ||||||
|  | *	control points | ||||||
|  | * | ||||||
|  | * Return : int | ||||||
|  | * | ||||||
|  | * Note : This function is similar to the genaNotifyAll. the only difference | ||||||
|  | *	is it takes the document instead of event variable array | ||||||
|  | ****************************************************************************/ | ||||||
| #ifdef INCLUDE_DEVICE_APIS | #ifdef INCLUDE_DEVICE_APIS | ||||||
| EXTERN_C int genaNotifyAllExt( | EXTERN_C int genaNotifyAllExt( | ||||||
| 	/*! [in] Device handle. */ |  | ||||||
| 	UpnpDevice_Handle device_handle,  | 	UpnpDevice_Handle device_handle,  | ||||||
| 	/*! [in] Device udn. */ |  | ||||||
| 	char *UDN, | 	char *UDN, | ||||||
| 	/*! [in] Service ID. */ |  | ||||||
| 	char *servId, | 	char *servId, | ||||||
| 	/*! [in] XML document Event varible property set. */ | 	IN IXML_Document *PropSet); | ||||||
| 	IXML_Document *PropSet); | #endif | ||||||
| #endif /* INCLUDE_DEVICE_APIS */ |  | ||||||
|  |  | ||||||
|  | /**************************************************************************** | ||||||
| /*! | *	Function :	genaInitNotify | ||||||
|  * \brief Sends the intial state table dump to newly subscribed control point. | * | ||||||
|  * | *	Parameters : | ||||||
|  * \return GENA_E_SUCCESS if successful, otherwise the appropriate error code. | *		   IN UpnpDevice_Handle device_handle :	Device handle | ||||||
|  *  | *		   IN char *UDN :	Device udn | ||||||
|  * \note  No other event will be sent to this control point before the  | *		   IN char *servId :	Service ID | ||||||
|  *	intial state table dump. | *		   IN char **VarNames :	Array of variable names | ||||||
|  */ | *		   IN char **VarValues :	Array of variable values | ||||||
|  | *		   IN int var_count :	array size | ||||||
|  | *		   IN Upnp_SID sid :	subscription ID | ||||||
|  | * | ||||||
|  | *	Description :	This function sends the intial state table dump to  | ||||||
|  | *		newly subscribed control point.  | ||||||
|  | * | ||||||
|  | *	Return :	int | ||||||
|  | *		returns GENA_E_SUCCESS if successful else returns appropriate error | ||||||
|  | *  | ||||||
|  | *	Note : No other event will be sent to this control point before the  | ||||||
|  | *			intial state table dump. | ||||||
|  | ****************************************************************************/ | ||||||
| #ifdef INCLUDE_DEVICE_APIS | #ifdef INCLUDE_DEVICE_APIS | ||||||
| EXTERN_C int genaInitNotify( | EXTERN_C int genaInitNotify(IN UpnpDevice_Handle device_handle, | ||||||
| 	/*! [in] Device handle. */ | 	IN char *UDN, | ||||||
| 	UpnpDevice_Handle device_handle, | 	IN char *servId, | ||||||
| 	/*! [in] Device udn. */ | 	IN char **VarNames, | ||||||
| 	char *UDN, | 	IN char **VarValues, | ||||||
| 	/*! [in] Service ID. */ | 	IN int var_count, | ||||||
| 	char *servId, | 	IN Upnp_SID sid); | ||||||
| 	/*! [in] Array of variable names. */ | #endif | ||||||
| 	char **VarNames, |  | ||||||
| 	/*! [in] Array of variable values. */ |  | ||||||
| 	char **VarValues, |  | ||||||
| 	/*! [in] Array size. */ |  | ||||||
| 	int var_count, |  | ||||||
| 	/*! [in] Subscription ID. */ |  | ||||||
| 	const Upnp_SID sid); |  | ||||||
| #endif /* INCLUDE_DEVICE_APIS */ |  | ||||||
|  |  | ||||||
|  | /**************************************************************************** | ||||||
| /*! | *	Function :	genaInitNotifyExt | ||||||
|  * \brief Similar to the genaInitNofity. The only difference is that it | * | ||||||
|  * takes the xml document for the state table and sends the intial state | *	Parameters : | ||||||
|  * table dump to newly subscribed control point. | *		   IN UpnpDevice_Handle device_handle :	Device handle | ||||||
|  * | *		   IN char *UDN :	Device udn | ||||||
|  * \return GENA_E_SUCCESS if successful, otherwise the appropriate error code. | *		   IN char *servId :	Service ID | ||||||
|  *  | *		   IN IXML_Document *PropSet :	Document of the state table | ||||||
|  * \note No other event will be sent to this control point before the  | *		   IN Upnp_SID sid :	subscription ID | ||||||
|  * 	intial state table dump. | * | ||||||
|  */ | *	Description :	This function is similar to the genaInitNofity. The only  | ||||||
|  | *	difference is that it takes the xml document for the state table and  | ||||||
|  | *	sends the intial state table dump to newly subscribed control point.  | ||||||
|  | * | ||||||
|  | *	Return :	int | ||||||
|  | *		returns GENA_E_SUCCESS if successful else returns appropriate error | ||||||
|  | *  | ||||||
|  | *	Note : No other event will be sent to this control point before the  | ||||||
|  | *			intial state table dump. | ||||||
|  | ****************************************************************************/ | ||||||
| #ifdef INCLUDE_DEVICE_APIS | #ifdef INCLUDE_DEVICE_APIS | ||||||
| EXTERN_C  int genaInitNotifyExt( | EXTERN_C  int genaInitNotifyExt( | ||||||
| 	/*! [in] Device handle. */ | 	IN UpnpDevice_Handle device_handle,  | ||||||
| 	UpnpDevice_Handle device_handle,  | 	IN char *UDN,  | ||||||
| 	/*! [in] Device udn. */ | 	IN char *servId, | ||||||
| 	char *UDN,  | 	IN IXML_Document *PropSet,  | ||||||
| 	/*! [in] Service ID. */ | 	IN Upnp_SID sid); | ||||||
| 	char *servId, | #endif | ||||||
| 	/*! [in] Document of the state table. */ |  | ||||||
| 	IXML_Document *PropSet,  |  | ||||||
| 	/*! [in] subscription ID. */ | /************************************************************************ | ||||||
| 	const Upnp_SID sid); | * Function : error_respond									 | ||||||
| #endif /* INCLUDE_DEVICE_APIS */ | *																	 | ||||||
|  | * Parameters:														 | ||||||
|  | *	IN SOCKINFO *info: Structure containing information about the socket | ||||||
|  | *	IN int error_code: error code that will be in the GENA response | ||||||
|  | *	IN http_message_t* hmsg: GENA request Packet  | ||||||
|  | * | ||||||
|  | * Description:														 | ||||||
|  | *	This function send an error message to the control point in the case | ||||||
|  | *	incorrect GENA requests. | ||||||
|  | * | ||||||
|  | * Returns: int | ||||||
|  | *	UPNP_E_SUCCESS if successful else appropriate error | ||||||
|  | ***************************************************************************/ | ||||||
|  | void error_respond( IN SOCKINFO *info, IN int error_code, | ||||||
|  | 				    IN http_message_t* hmsg ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif // GENA | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Sends an error message to the control point in the case of incorrect |  | ||||||
|  * 	GENA requests. |  | ||||||
|  * |  | ||||||
|  * \return UPNP_E_SUCCESS if successful, otherwise appropriate error code. |  | ||||||
|  */ |  | ||||||
| void error_respond( |  | ||||||
| 	/*! [in] Structure containing information about the socket. */ |  | ||||||
| 	SOCKINFO *info, |  | ||||||
| 	/*! [in] error code that will be in the GENA response. */ |  | ||||||
| 	int error_code, |  | ||||||
| 	/*! [in] GENA request Packet. */ |  | ||||||
| 	http_message_t* hmsg); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* GENA_H */ |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,50 +1,44 @@ | |||||||
| /************************************************************************** | /////////////////////////////////////////////////////////////////////////// | ||||||
|  * | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * - Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * - Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * - Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  **************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef GLOBAL_H |  | ||||||
| #define GLOBAL_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* GLOBAL.H - RSAREF types and constants */ | /* GLOBAL.H - RSAREF types and constants */ | ||||||
| /* PROTOTYPES should be set to one if and only if the compiler supports | /* PROTOTYPES should be set to one if and only if the compiler supports | ||||||
|   function argument prototyping. |   function argument prototyping. | ||||||
|  |  | ||||||
|   The following makes PROTOTYPES default to 1 if it has not already |   The following makes PROTOTYPES default to 0 if it has not already | ||||||
|   been defined with C compiler flags. |   been defined with C compiler flags. | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef PROTOTYPES | #ifndef PROTOTYPES | ||||||
| 	#define PROTOTYPES 1 | #define PROTOTYPES 0 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* POINTER defines a generic pointer type */ | /* POINTER defines a generic pointer type */ | ||||||
| @@ -56,17 +50,13 @@ typedef unsigned short int UINT2; | |||||||
| /* UINT4 defines a four byte word */ | /* UINT4 defines a four byte word */ | ||||||
| typedef unsigned long int UINT4; | typedef unsigned long int UINT4; | ||||||
|  |  | ||||||
| /* | /* PROTO_LIST is defined depending on how PROTOTYPES is defined above. | ||||||
|  * PROTO_LIST is defined depending on how PROTOTYPES is defined above. |    If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it | ||||||
|  * If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it |    returns an empty list. | ||||||
|  * returns an empty list. |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #if PROTOTYPES | #if PROTOTYPES | ||||||
| 	#define PROTO_LIST(list) list | #define PROTO_LIST(list) list | ||||||
| #else | #else | ||||||
| 	#define PROTO_LIST(list) () | #define PROTO_LIST(list) () | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* GLOBAL_H */ |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										314
									
								
								upnp/src/inc/http_client.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										314
									
								
								upnp/src/inc/http_client.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,314 @@ | |||||||
|  | /////////////////////////////////////////////////////////////////////////// | ||||||
|  | // | ||||||
|  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  | // All rights reserved.  | ||||||
|  | // | ||||||
|  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  | // | ||||||
|  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  | // this list of conditions and the following disclaimer.  | ||||||
|  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  | // and/or other materials provided with the distribution.  | ||||||
|  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  | // may be used to endorse or promote products derived from this software  | ||||||
|  | // without specific prior written permission. | ||||||
|  | //  | ||||||
|  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  | // | ||||||
|  | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  | #ifndef _http_client_h_ | ||||||
|  | #define _http_client_h_ | ||||||
|  | #ifdef __cplusplus | ||||||
|  | #define EXTERN_C extern "C" | ||||||
|  | #else | ||||||
|  | #define EXTERN_C | ||||||
|  | #endif | ||||||
|  | #include "genlib/closesocket/upnpclosesocket.h" | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | //#include <malloc.h> | ||||||
|  | #include <time.h> | ||||||
|  | #include <errno.h> | ||||||
|  | #include <ctype.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <sys/socket.h> | ||||||
|  | #include <netinet/in.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include <netdb.h> | ||||||
|  | #include <sys/time.h> | ||||||
|  | #include "tools/config.h" | ||||||
|  | #include "upnp.h" | ||||||
|  | //#include "upnp_debug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define HTTP_DATE_LENGTH 37 // length for HTTP DATE:  | ||||||
|  |                             //"DATE: Sun, 01 Jul 2000 08:15:23 GMT<cr><lf>" | ||||||
|  | #define SEPARATORS "()<>@,;:\\\"/[]?={} \t" | ||||||
|  | #define MARK "-_.!~*'()" | ||||||
|  | #define RESERVED ";/?:@&=+$," | ||||||
|  | #define HTTP_SUCCESS 1 | ||||||
|  | #define HTTP_E_BAD_URL UPNP_E_INVALID_URL | ||||||
|  | #define HTTP_E_READ_SOCKET  UPNP_E_SOCKET_READ | ||||||
|  | #define HTTP_E_BIND_SOCKET  UPNP_E_SOCKET_BIND | ||||||
|  | #define HTTP_E_WRITE_SOCKET  UPNP_E_SOCKET_WRITE | ||||||
|  | #define HTTP_E_CONNECT_SOCKET  UPNP_E_SOCKET_CONNECT | ||||||
|  | #define HTTP_E_SOCKET    UPNP_E_OUTOF_SOCKET | ||||||
|  | #define HTTP_E_BAD_RESPONSE UPNP_E_BAD_RESPONSE | ||||||
|  | #define HTTP_E_BAD_REQUEST UPNP_E_BAD_REQUEST | ||||||
|  | #define HTTP_E_BAD_IP_ADDRESS UPNP_E_INVALID_URL | ||||||
|  | #define FALSE 0 | ||||||
|  | #define TAB 9 | ||||||
|  | #define CR 13 | ||||||
|  | #define LF 10 | ||||||
|  | #define RESPONSE_TIMEOUT 30 | ||||||
|  | #define SOCKET_BUFFER_SIZE 5000 | ||||||
|  |  | ||||||
|  | enum hostType { HOSTNAME, IPv4address }; | ||||||
|  | enum pathType { ABS_PATH, REL_PATH, OPAQUE_PART }; | ||||||
|  | enum uriType  { ABSOLUTE, RELATIVE }; | ||||||
|  |  | ||||||
|  | //Buffer used to store data read from  | ||||||
|  | //a socket during an http transfer | ||||||
|  | //in function read_bytes. | ||||||
|  | typedef struct SOCKET_BUFFER{ | ||||||
|  |   char buff[SOCKET_BUFFER_SIZE]; | ||||||
|  |   int size; | ||||||
|  |   struct SOCKET_BUFFER *next; | ||||||
|  | } socket_buffer; | ||||||
|  |  | ||||||
|  | //Buffer used in parsing | ||||||
|  | //http messages, urls, etc. | ||||||
|  | //generally this simply | ||||||
|  | //holds a pointer into a larger array | ||||||
|  | typedef struct TOKEN { | ||||||
|  |    char * buff; | ||||||
|  |   size_t size; | ||||||
|  | } token; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //Represents a host port: | ||||||
|  | //e.g. :"127.127.0.1:80" | ||||||
|  | //text is a token pointing to  | ||||||
|  | //the full string representation | ||||||
|  | typedef struct HOSTPORT { | ||||||
|  |   token text; //full host port | ||||||
|  |   struct sockaddr_in IPv4address; //Network Byte Order   | ||||||
|  | } hostport_type; | ||||||
|  |  | ||||||
|  | //Represents a URI | ||||||
|  | //used in parse_uri and elsewhere | ||||||
|  | typedef struct URI{ | ||||||
|  |   enum uriType type; | ||||||
|  |   token scheme; | ||||||
|  |   enum pathType path_type; | ||||||
|  |   token pathquery; | ||||||
|  |   token fragment; | ||||||
|  |   hostport_type hostport; | ||||||
|  | } uri_type; | ||||||
|  |  | ||||||
|  | //Represents a list of URLs as in  | ||||||
|  | //the "callback" header of SUBSCRIBE | ||||||
|  | //message in GENA | ||||||
|  | //char * URLs holds dynamic memory | ||||||
|  | typedef struct URL_LIST { | ||||||
|  |   int size; | ||||||
|  |   char * URLs; //all the urls, delimited by <> | ||||||
|  |   uri_type *parsedURLs; | ||||||
|  | } URL_list; | ||||||
|  |  | ||||||
|  | typedef struct HTTP_HEADER { | ||||||
|  |   token header; | ||||||
|  |   token value; | ||||||
|  |   struct HTTP_HEADER * next; | ||||||
|  | } http_header; | ||||||
|  |  | ||||||
|  | typedef struct HTTP_STATUS_LINE{ | ||||||
|  |   token http_version; | ||||||
|  |   token status_code; | ||||||
|  |   token reason_phrase; | ||||||
|  | } http_status; | ||||||
|  |  | ||||||
|  | typedef struct HTTP_REQUEST_LINE { | ||||||
|  |   token http_version; | ||||||
|  |   uri_type request_uri; | ||||||
|  |   token method; | ||||||
|  | } http_request; | ||||||
|  |  | ||||||
|  | //Represents a parsed HTTP_MESSAGE | ||||||
|  | //head_list is dynamically allocated | ||||||
|  | typedef struct HTTP_MESSAGE { | ||||||
|  |   http_status status; | ||||||
|  |   http_request request; | ||||||
|  |   http_header * header_list; | ||||||
|  |   token content; | ||||||
|  | } http_message; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | EXTERN_C int transferHTTP( char * request,  char * toSend,  | ||||||
|  | 			  int toSendSize, char **out,  char * Url); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | EXTERN_C int transferHTTPRaw( char * toSend, int toSendSize,  | ||||||
|  | 			     char **out,  char *URL); | ||||||
|  |  | ||||||
|  | //helper function | ||||||
|  | EXTERN_C int transferHTTPparsedURL( char * request,  | ||||||
|  | 				    char * toSend, int toSendSize,  | ||||||
|  | 				   char **out, uri_type *URL); | ||||||
|  |  | ||||||
|  | //assumes that char * out has enough space ( 38 characters) | ||||||
|  | //outputs the current time in the following null terminated string: | ||||||
|  | // "DATE: Sun, Jul 06 2000 08:53:01 GMT\r\n" | ||||||
|  | EXTERN_C void currentTmToHttpDate(char *out); | ||||||
|  |  | ||||||
|  | //returns dynamic memory or NULL on error | ||||||
|  | EXTERN_C char * resolve_rel_url( char * base_url,  char * rel_url); | ||||||
|  |  | ||||||
|  | EXTERN_C int parse_uri(  char * in, int max, uri_type * out); | ||||||
|  |  | ||||||
|  | EXTERN_C int token_cmp( token *in1,  token *in2); | ||||||
|  |  | ||||||
|  | EXTERN_C int token_string_casecmp( token * in1,  char * in2); | ||||||
|  |  | ||||||
|  | EXTERN_C int token_string_cmp( token * in1,  char * in2); | ||||||
|  |  | ||||||
|  | EXTERN_C int parse_http_response(  char * in, http_message * out,  | ||||||
|  | 				  int max_len); | ||||||
|  |  | ||||||
|  | EXTERN_C int parse_http_request( char * in, http_message *out,  | ||||||
|  | 				int max_len); | ||||||
|  |  | ||||||
|  | EXTERN_C int search_for_header( http_message * in,  | ||||||
|  | 			        char * header, token *out_value); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | EXTERN_C int parse_hostport(  char* in, int max, hostport_type *out ); | ||||||
|  |  | ||||||
|  | EXTERN_C size_t write_bytes(int fd,   char * bytes, size_t n,  | ||||||
|  | 			    int timeout); | ||||||
|  | EXTERN_C void free_http_message(http_message * message); | ||||||
|  | EXTERN_C int copy_URL_list( URL_list *in, URL_list *out); | ||||||
|  | EXTERN_C void free_URL_list(URL_list * list); | ||||||
|  | EXTERN_C int parse_port(int max,   char * port, unsigned short int * out); | ||||||
|  |  | ||||||
|  | EXTERN_C int parse_http_line(  char * in, int max_size); | ||||||
|  | EXTERN_C int parse_not_LWS(  char *in, token *out, int max_size); | ||||||
|  | EXTERN_C int parse_LWS( char * in, int max_size); | ||||||
|  | EXTERN_C int parse_token( char * in, token * out, int max_size); | ||||||
|  | EXTERN_C ssize_t readLine(int fd, char *out, int max, int *timeout); | ||||||
|  | EXTERN_C int remove_dots(char * in, int size); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifdef DEBUG | ||||||
|  | EXTERN_C void print_http_request( | ||||||
|  | 	http_message *message, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo); | ||||||
|  | #else | ||||||
|  | static inline void print_http_request( | ||||||
|  | 	http_message *message, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo) {} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef DEBUG | ||||||
|  | EXTERN_C void print_http_response( | ||||||
|  | 	http_message *message, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo); | ||||||
|  | #else | ||||||
|  | static inline void print_http_response( | ||||||
|  | 	http_message *message, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo) {} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef DEBUG | ||||||
|  | EXTERN_C void print_token( | ||||||
|  | 	token *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo); | ||||||
|  | #else | ||||||
|  | static inline void print_token( | ||||||
|  | 	token *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo) {} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef DEBUG | ||||||
|  | EXTERN_C void print_status_line( | ||||||
|  | 	http_status *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo); | ||||||
|  | #else | ||||||
|  | static inline void print_status_line( | ||||||
|  | 	http_status *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo) {} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef DEBUG | ||||||
|  | EXTERN_C void print_request_line( | ||||||
|  | 	http_request *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo); | ||||||
|  | #else | ||||||
|  | static inline void print_request_line( | ||||||
|  | 	http_request *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo) {} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef DEBUG | ||||||
|  | EXTERN_C void print_uri( | ||||||
|  | 	uri_type *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo); | ||||||
|  | #else | ||||||
|  | static inline void print_uri( | ||||||
|  | 	uri_type *in, | ||||||
|  | 	Upnp_LogLevel DLevel, | ||||||
|  | 	Dbg_Module Module, | ||||||
|  | 	char *DbgFileName, | ||||||
|  | 	int DbgLineNo) {} | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
| @@ -193,8 +193,7 @@ typedef struct // http_message_t | |||||||
|  |  | ||||||
| 	// private fields | 	// private fields | ||||||
| 	membuffer msg;		// entire raw message | 	membuffer msg;		// entire raw message | ||||||
|         char *urlbuf;	// storage for url string | 	char *urlbuf;	// storage for url string | ||||||
|         size_t entity_offset; |  | ||||||
| } http_message_t; | } http_message_t; | ||||||
|  |  | ||||||
| typedef struct // http_parser_t | typedef struct // http_parser_t | ||||||
|   | |||||||
| @@ -50,78 +50,73 @@ int | |||||||
| http_CancelHttpGet( IN void *Handle ); | http_CancelHttpGet( IN void *Handle ); | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_FixUrl | * Function: http_FixUrl													 | ||||||
|  * | *																		 | ||||||
|  * Parameters: | * Parameters:															 | ||||||
|  *	IN uri_type* url;		URL to be validated and fixed | *	IN uri_type* url ;			URL to be validated and fixed | ||||||
|  *	OUT uri_type* fixed_url;	URL after being fixed. | *	OUT uri_type* fixed_url ;	URL after being fixed. | ||||||
|  * | *																		 | ||||||
|  * Description: | * Description: Validates URL											 | ||||||
|  *	Validates URL | *																		 | ||||||
|  * | * Returns:																 | ||||||
|  * Returns: | *	 UPNP_E_INVALID_URL													 | ||||||
|  *	 UPNP_E_INVALID_URL | * 	 UPNP_E_SUCCESS														 | ||||||
|  * 	 UPNP_E_SUCCESS | ************************************************************************/ | ||||||
|  ************************************************************************/ |  | ||||||
| int http_FixUrl( IN uri_type* url, OUT uri_type* fixed_url ); | int http_FixUrl( IN uri_type* url, OUT uri_type* fixed_url ); | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_FixStrUrl | * Function: http_FixStrUrl												 | ||||||
|  * | *																		 | ||||||
|  * Parameters: | * Parameters:															 | ||||||
|  *	IN char* urlstr ; 		Character string as a URL | *	IN char* urlstr ; 			Character string as a URL				 | ||||||
|  *	IN int urlstrlen ; 		Length of the character string | *	IN int urlstrlen ; 			Length of the character string								 | ||||||
|  *	OUT uri_type* fixed_url	;	Fixed and corrected URL | *	OUT uri_type* fixed_url	;	Fixed and corrected URL | ||||||
|  * | *																		 | ||||||
|  * Description: | * Description: Parses URL and then validates URL						 | ||||||
|  *	Parses URL and then validates URL | *																		 | ||||||
|  * | * Returns:																 | ||||||
|  * Returns: | *	 UPNP_E_INVALID_URL													 | ||||||
|  *	 UPNP_E_INVALID_URL | * 	 UPNP_E_SUCCESS														 | ||||||
|  * 	 UPNP_E_SUCCESS | ************************************************************************/ | ||||||
|  ************************************************************************/ | int http_FixStrUrl( IN char* urlstr, IN int urlstrlen, OUT uri_type* fixed_url ); | ||||||
| int http_FixStrUrl( IN const char* urlstr, IN int urlstrlen, OUT uri_type* fixed_url ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_Connect | * Function: http_Connect												 | ||||||
|  * | *																		 | ||||||
|  * Parameters: | * Parameters:															 | ||||||
|  *	IN uri_type* destination_url;	URL containing destination information | *	IN uri_type* destination_url ; URL containing destination information					 | ||||||
|  *	OUT uri_type *url;		Fixed and corrected URL | *	OUT uri_type *url ;			   Fixed and corrected URL | ||||||
|  * | *																		 | ||||||
|  * Description: | * Description: Gets destination address from URL and then connects to the  | ||||||
|  *	Gets destination address from URL and then connects to the remote end | *	remote end | ||||||
|  * | *																		 | ||||||
|  *  Returns: | * Returns:																 | ||||||
|  *	socket descriptor on sucess | *	socket descriptor on sucess											 | ||||||
|  *	UPNP_E_OUTOF_SOCKET | *	UPNP_E_OUTOF_SOCKET													 | ||||||
|  *	UPNP_E_SOCKET_CONNECT on error | *	UPNP_E_SOCKET_CONNECT on error										 | ||||||
|  ************************************************************************/ | ************************************************************************/ | ||||||
| int http_Connect( IN uri_type* destination_url, OUT uri_type *url ); | int http_Connect( IN uri_type* destination_url, OUT uri_type *url ); | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_RecvMessage | * Function: http_RecvMessage											 | ||||||
|  * | *																		 | ||||||
|  * Parameters: | * Parameters:															 | ||||||
|  *	IN SOCKINFO *info;			Socket information object | *	IN SOCKINFO *info ;					Socket information object | ||||||
|  *	OUT http_parser_t* parser;		HTTP parser object | *	OUT http_parser_t* parser,			HTTP parser object | ||||||
|  *	IN http_method_t request_method;	HTTP request method | *	IN http_method_t request_method ;	HTTP request method					 | ||||||
|  *	IN OUT int* timeout_secs;		time out | *	IN OUT int* timeout_secs ;			time out											 | ||||||
|  *	OUT int* http_error_code;		HTTP error code returned | *	OUT int* http_error_code ;			HTTP error code returned | ||||||
|  * | *																		 | ||||||
|  * Description: | * Description: Get the data on the socket and take actions based on the  | ||||||
|  *	Get the data on the socket and take actions based on the read data | *	read data to modify the parser objects buffer. If an error is reported  | ||||||
|  *	to modify the parser objects buffer. If an error is reported while | *	while parsing the data, the error code is passed in the http_errr_code  | ||||||
|  *	parsing the data, the error code is passed in the http_errr_code | *	parameter | ||||||
|  *	parameter | *																		 | ||||||
|  * | * Returns:																 | ||||||
|  * Returns: | *	 UPNP_E_BAD_HTTPMSG													 | ||||||
|  *	 UPNP_E_BAD_HTTPMSG | * 	 UPNP_E_SUCCESS														 | ||||||
|  * 	 UPNP_E_SUCCESS | ************************************************************************/ | ||||||
|  ************************************************************************/ |  | ||||||
| int http_RecvMessage( IN SOCKINFO *info, OUT http_parser_t* parser, | int http_RecvMessage( IN SOCKINFO *info, OUT http_parser_t* parser, | ||||||
| 		IN http_method_t request_method,  | 		IN http_method_t request_method,  | ||||||
| 		IN OUT int* timeout_secs, | 		IN OUT int* timeout_secs, | ||||||
| @@ -129,311 +124,302 @@ int http_RecvMessage( IN SOCKINFO *info, OUT http_parser_t* parser, | |||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_SendMessage | * Function: http_SendMessage											 | ||||||
|  * | *																		 | ||||||
|  * Parameters: | * Parameters:															 | ||||||
|  *	IN SOCKINFO *info ;		Socket information object | *	IN SOCKINFO *info ;		Socket information object | ||||||
|  *	IN OUT int * TimeOut ;		time out value | *	IN OUT int * TimeOut ; 	time out value											 | ||||||
|  *	IN const char* fmt, ...	 Pattern format to take actions upon | *	IN const char* fmt, ...	 Pattern format to take actions upon								 | ||||||
|  * | *																		 | ||||||
|  * Description: | * Description: Sends a message to the destination based on the			 | ||||||
|  *	Sends a message to the destination based on the | *	IN const char* fmt parameter										 | ||||||
|  *	IN const char* fmt parameter | *	fmt types:															 | ||||||
|  *	fmt types: | *		'f':	arg = const char * file name							 | ||||||
|  *		'f':	arg = const char * file name | *		'm':	arg1 = const char * mem_buffer; arg2= size_t buf_length	 | ||||||
|  *		'm':	arg1 = const char * mem_buffer; arg2= size_t buf_length | *	E.g.:																 | ||||||
|  *	E.g.: | *		char *buf = "POST /xyz.cgi http/1.1\r\n\r\n";					 | ||||||
|  *		char *buf = "POST /xyz.cgi http/1.1\r\n\r\n"; | *		char *filename = "foo.dat";										 | ||||||
|  *		char *filename = "foo.dat"; | *		int status = http_SendMessage( tcpsock, "mf",					 | ||||||
|  *		int status = http_SendMessage( tcpsock, "mf", | *					buf, strlen(buf),	// args for memory buffer		 | ||||||
|  *			buf, strlen(buf),	// args for memory buffer | *					filename );			// arg for file					 | ||||||
|  *			filename );		// arg for file | *																		 | ||||||
|  * | * Returns:																 | ||||||
|  * Returns: | *	UPNP_E_OUTOF_MEMORY													 | ||||||
|  *	UPNP_E_OUTOF_MEMORY | * 	UPNP_E_FILE_READ_ERROR												 | ||||||
|  * 	UPNP_E_FILE_READ_ERROR | *	UPNP_E_SUCCESS														 | ||||||
|  *	UPNP_E_SUCCESS | ************************************************************************/ | ||||||
|  ************************************************************************/ | int http_SendMessage( IN SOCKINFO *info, IN OUT int* timeout_secs,  | ||||||
| int http_SendMessage( | 					  IN const char* fmt, ... ); | ||||||
| 	IN SOCKINFO *info, |  | ||||||
| 	IN OUT int* timeout_secs,  | /************************************************************************ | ||||||
| 	IN const char* fmt, ... ); | * Function: http_RequestAndResponse										 | ||||||
|  | *																		 | ||||||
|  | * Parameters:															 | ||||||
|  | *	IN uri_type* destination ;		Destination URI object which contains  | ||||||
|  | *									remote IP address among other elements | ||||||
|  | *	IN const char* request ;		Request to be sent | ||||||
|  | *	IN size_t request_length ;		Length of the request | ||||||
|  | *	IN http_method_t req_method ;	HTTP Request method | ||||||
|  | *	IN int timeout_secs ;			time out value | ||||||
|  | *	OUT http_parser_t* response	;	Parser object to receive the repsonse | ||||||
|  | *																		 | ||||||
|  | * Description: Initiates socket, connects to the destination, sends a	 | ||||||
|  | *	request and waits for the response from the remote end				 | ||||||
|  | *																		 | ||||||
|  | * Returns:																 | ||||||
|  | *	UPNP_E_SOCKET_ERROR													 | ||||||
|  | * 	UPNP_E_SOCKET_CONNECT												 | ||||||
|  | *	Error Codes returned by http_SendMessage							 | ||||||
|  | *	Error Codes returned by http_RecvMessage							 | ||||||
|  | ************************************************************************/ | ||||||
|  | int http_RequestAndResponse( IN uri_type* destination, | ||||||
|  | 						   IN const char* request, IN size_t request_length, | ||||||
|  | 						   IN http_method_t req_method, | ||||||
|  | 						   IN int timeout_secs,  | ||||||
|  | 						   OUT http_parser_t* response ); | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *  return codes: | ||||||
|  | *		0 -- success | ||||||
|  | *		UPNP_E_OUTOF_MEMORY | ||||||
|  | *		UPNP_E_TIMEDOUT | ||||||
|  | *		UPNP_E_BAD_REQUEST | ||||||
|  | *		UPNP_E_BAD_RESPONSE | ||||||
|  | *		UPNP_E_INVALID_URL | ||||||
|  | *		UPNP_E_SOCKET_READ | ||||||
|  | *		UPNP_E_SOCKET_WRITE | ||||||
|  | ************************************************************************/ | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	http_Download | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		IN const char* url_str :	String as a URL | ||||||
|  | *		IN int timeout_secs :		time out value | ||||||
|  | *		OUT char** document :		buffer to store the document extracted | ||||||
|  | *									from the donloaded message. | ||||||
|  | *		OUT int* doc_length :		length of the extracted document | ||||||
|  | *	    OUT char* content_type :	Type of content | ||||||
|  | * | ||||||
|  | *	Description :	Download the document message and extract the document  | ||||||
|  | *		from the message. | ||||||
|  | * | ||||||
|  | *	Return : int; | ||||||
|  | *		UPNP_E_SUCCESS; | ||||||
|  | *		UPNP_E_INVALID_URL; | ||||||
|  | *			 | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | int http_Download( IN const char* url,  | ||||||
|  | 				   IN int timeout_secs, | ||||||
|  | 				   OUT char** document, OUT int* doc_length, | ||||||
|  | 				   OUT char* content_type ); | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_RequestAndResponse | *	Function :	http_WriteHttpPost | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN uri_type* destination;	Destination URI object which contains | *		IN void *Handle :		Handle to the http post object | ||||||
|  *					remote IP address among other elements | *		IN char *buf :			Buffer to send to peer, if format used | ||||||
|  *	IN const char* request;		Request to be sent | *								is not UPNP_USING_CHUNKED,  | ||||||
|  *	IN size_t request_length;	Length of the request | *		IN unsigned int *size :	Size of the data to be sent. | ||||||
|  *	IN http_method_t req_method;	HTTP Request method | *		IN int timeout :		time out value | ||||||
|  *	IN int timeout_secs;		time out value | * | ||||||
|  *	OUT http_parser_t* response;	Parser object to receive the repsonse | *	Description :	Formats data if format used is UPNP_USING_CHUNKED. | ||||||
|  * | *		Writes data on the socket connected to the peer. | ||||||
|  * Description: | * | ||||||
|  *	Initiates socket, connects to the destination, sends a | *	Return : int ; | ||||||
|  *	request and waits for the response from the remote end | *		UPNP_E_SUCCESS - On Success | ||||||
|  * | *		UPNP_E_INVALID_PARAM - Invalid Parameter | ||||||
|  * Returns: | *		-1 - On Socket Error. | ||||||
|  *	UPNP_E_SOCKET_ERROR | * | ||||||
|  * 	UPNP_E_SOCKET_CONNECT | *	Note : | ||||||
|  *	Error Codes returned by http_SendMessage | ************************************************************************/ | ||||||
|  *	Error Codes returned by http_RecvMessage |  | ||||||
|  ************************************************************************/ |  | ||||||
| int http_RequestAndResponse( |  | ||||||
| 	IN uri_type* destination, |  | ||||||
| 	IN const char* request, |  | ||||||
| 	IN size_t request_length, |  | ||||||
| 	IN http_method_t req_method, |  | ||||||
| 	IN int timeout_secs,  |  | ||||||
| 	OUT http_parser_t* response ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ |  | ||||||
|  * return codes: |  | ||||||
|  *	0 -- success |  | ||||||
|  *	UPNP_E_OUTOF_MEMORY |  | ||||||
|  *	UPNP_E_TIMEDOUT |  | ||||||
|  *	UPNP_E_BAD_REQUEST |  | ||||||
|  *	UPNP_E_BAD_RESPONSE |  | ||||||
|  *	UPNP_E_INVALID_URL |  | ||||||
|  *	UPNP_E_SOCKET_READ |  | ||||||
|  *	UPNP_E_SOCKET_WRITE |  | ||||||
|  ************************************************************************/ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ |  | ||||||
|  * Function: http_Download |  | ||||||
|  * |  | ||||||
|  * Parameters: |  | ||||||
|  *	IN const char* url_str;	String as a URL |  | ||||||
|  *	IN int timeout_secs;	time out value |  | ||||||
|  *	OUT char** document;	buffer to store the document extracted |  | ||||||
|  *				from the donloaded message. |  | ||||||
|  *	OUT int* doc_length;	length of the extracted document |  | ||||||
|  *	OUT char* content_type;	Type of content |  | ||||||
|  * |  | ||||||
|  * Description: |  | ||||||
|  *	Download the document message and extract the document  |  | ||||||
|  *	from the message. |  | ||||||
|  * |  | ||||||
|  * Return: int |  | ||||||
|  *	UPNP_E_SUCCESS |  | ||||||
|  *	UPNP_E_INVALID_URL |  | ||||||
|  ************************************************************************/ |  | ||||||
| int http_Download( |  | ||||||
| 	IN const char* url,  |  | ||||||
| 	IN int timeout_secs, |  | ||||||
| 	OUT char** document, |  | ||||||
| 	OUT int* doc_length, |  | ||||||
| 	OUT char* content_type ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ |  | ||||||
|  * Function: http_WriteHttpPost |  | ||||||
|  * |  | ||||||
|  * Parameters: |  | ||||||
|  *	IN void *Handle:	Handle to the http post object |  | ||||||
|  *	IN char *buf:		Buffer to send to peer, if format used |  | ||||||
|  *				is not UPNP_USING_CHUNKED,  |  | ||||||
|  *	IN unsigned int *size:	Size of the data to be sent. |  | ||||||
|  *	IN int timeout:		time out value |  | ||||||
|  * |  | ||||||
|  * Description: |  | ||||||
|  *	Formats data if format used is UPNP_USING_CHUNKED. |  | ||||||
|  *	Writes data on the socket connected to the peer. |  | ||||||
|  * |  | ||||||
|  * Return: int |  | ||||||
|  *	UPNP_E_SUCCESS - On Success |  | ||||||
|  *	UPNP_E_INVALID_PARAM - Invalid Parameter |  | ||||||
|  *	-1 - On Socket Error. |  | ||||||
|  ************************************************************************/ |  | ||||||
| int http_WriteHttpPost(IN void *Handle, | int http_WriteHttpPost(IN void *Handle, | ||||||
| 		       IN char *buf, | 		       IN char *buf, | ||||||
| 		       IN unsigned int *size, | 		       IN unsigned int *size, | ||||||
| 		       IN int timeout); | 		       IN int timeout); | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_CloseHttpPost | *	Function :	http_CloseHttpPost | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN void *Handle;	Handle to the http post object | *		IN void *Handle :			Handle to the http post object | ||||||
|  *	IN OUT int *httpStatus;	HTTP status returned on receiving a | *		IN OUT int *httpStatus :	HTTP status returned on receiving a | ||||||
|  *				response message | *									response message | ||||||
|  *	IN int timeout;		time out value | *		IN int timeout :			time out value | ||||||
|  * | * | ||||||
|  * Description: | *	Description :	Sends remaining data if using  UPNP_USING_CHUNKED  | ||||||
|  *	Sends remaining data if using  UPNP_USING_CHUNKED  | *		format. Receives any more messages. Destroys socket and any socket | ||||||
|  *	format. Receives any more messages. Destroys socket and any socket | *		associated memory. Frees handle associated with the HTTP POST msg. | ||||||
|  *	associated memory. Frees handle associated with the HTTP POST msg. | * | ||||||
|  * | *	Return : int ; | ||||||
|  * Return: int | *		UPNP_E_SUCCESS - On Sucess ; | ||||||
|  *	UPNP_E_SUCCESS		- On Sucess | *		UPNP_E_INVALID_PARAM  - Invalid Parameter; | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Parameter | * | ||||||
|  ************************************************************************/ | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| int http_CloseHttpPost(IN void *Handle,  | int http_CloseHttpPost(IN void *Handle,  | ||||||
| 		       IN OUT int *httpStatus, | 		       IN OUT int *httpStatus, | ||||||
| 		       IN int timeout); | 		       IN int timeout); | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_OpenHttpPost | *	Function :	http_OpenHttpPost | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN const char *url_str;		String as a URL	 | *		IN const char *url_str :		String as a URL	 | ||||||
|  *	IN OUT void **Handle;		Pointer to buffer to store HTTP | *		IN OUT void **Handle :			Pointer to buffer to store HTTP | ||||||
|  *					post handle | *										post handle | ||||||
|  *	IN const char *contentType;	Type of content | *		IN const char *contentType :	Type of content | ||||||
|  *	IN int contentLength;		length of content | *		IN int contentLength :			length of content | ||||||
|  *	IN int timeout;			time out value | *		IN int timeout :				time out value | ||||||
|  * | * | ||||||
|  * Description: | *	Description :	Makes the HTTP POST message, connects to the peer,  | ||||||
|  *	Makes the HTTP POST message, connects to the peer,  | *		sends the HTTP POST request. Adds the post handle to buffer of  | ||||||
|  *	sends the HTTP POST request. Adds the post handle to buffer of  | *		such handles | ||||||
|  *	such handles | * | ||||||
|  * | *	Return : int; | ||||||
|  * Return : int; | *		UPNP_E_SUCCESS - On Sucess ; | ||||||
|  *	UPNP_E_SUCCESS		- On Sucess | *		UPNP_E_INVALID_PARAM - Invalid Paramter ; | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Parameter | *		UPNP_E_OUTOF_MEMORY ; | ||||||
|  *	UPNP_E_OUTOF_MEMORY | *		UPNP_E_SOCKET_ERROR ; | ||||||
|  *	UPNP_E_SOCKET_ERROR | *		UPNP_E_SOCKET_CONNECT ; | ||||||
|  *	UPNP_E_SOCKET_CONNECT | * | ||||||
|  ************************************************************************/ | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| int http_OpenHttpPost(IN const char *url_str, | int http_OpenHttpPost(IN const char *url_str, | ||||||
| 		      IN OUT void **Handle, | 		      IN OUT void **Handle, | ||||||
| 		      IN const char *contentType, | 		      IN const char *contentType, | ||||||
| 		      IN int contentLength, | 		      IN int contentLength, | ||||||
| 		      IN int timeout); | 		      IN int timeout); | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	http_ReadHttpGet | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		IN void *Handle :			Handle to the HTTP get object | ||||||
|  | *		IN OUT char *buf :			Buffer to get the read and parsed data | ||||||
|  | *		IN OUT unsigned int *size :	Size of tge buffer passed | ||||||
|  | *		IN int timeout :			time out value | ||||||
|  | * | ||||||
|  | *	Description :	Parses already existing data, then gets new data. | ||||||
|  | *		Parses and extracts information from the new data. | ||||||
|  | * | ||||||
|  | *	Return : int ; | ||||||
|  | *		UPNP_E_SUCCESS - On Sucess ; | ||||||
|  | *		UPNP_E_INVALID_PARAM  - Invalid Parameter; | ||||||
|  | *		UPNP_E_BAD_RESPONSE ; | ||||||
|  | *		UPNP_E_BAD_HTTPMSG ; | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | int http_ReadHttpGet(IN void *Handle, | ||||||
|  | 					IN OUT char *buf, | ||||||
|  | 					IN OUT unsigned int *size, | ||||||
|  | 					IN int timeout); | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_ReadHttpGet | *   Function :  http_HttpGetProgress | ||||||
|  * | * | ||||||
|  * Parameters: | *   Parameters : | ||||||
|  *	IN void *Handle;		Handle to the HTTP get object | *       IN void *Handle :           Handle to the HTTP get object | ||||||
|  *	IN OUT char *buf;		Buffer to get the read and parsed data | *       OUT unsigned int *length :  Buffer to get the read and parsed data | ||||||
|  *	IN OUT unsigned int *size;	Size of the buffer passed | *       OUT unsigned int *total :   Size of tge buffer passed | ||||||
|  *	IN int timeout;			time out value | * | ||||||
|  * | *   Description :   Extracts information from the Handle to the HTTP get | ||||||
|  * Description: | *                   object. | ||||||
|  *	Parses already existing data, then gets new data. | * | ||||||
|  *	Parses and extracts information from the new data. | *   Return : int ; | ||||||
|  * | *       UPNP_E_SUCCESS - On Sucess ; | ||||||
|  * Return: int | *       UPNP_E_INVALID_PARAM  - Invalid Parameter; | ||||||
|  *	UPNP_E_SUCCESS		- On Sucess | * | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Parameter | *   Note : | ||||||
|  *	UPNP_E_BAD_RESPONSE | ************************************************************************/ | ||||||
|  *	UPNP_E_BAD_HTTPMSG | int http_HttpGetProgress(IN void *Handle, | ||||||
|  *	UPNP_E_CANCELED | 						OUT unsigned int *length, | ||||||
|  ************************************************************************/ | 						OUT unsigned int *total ); | ||||||
| int http_ReadHttpGet( |  | ||||||
| 	IN void *Handle, |  | ||||||
| 	IN OUT char *buf, |  | ||||||
| 	IN OUT unsigned int *size, |  | ||||||
| 	IN int timeout); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_HttpGetProgress | *	Function :	http_CloseHttpGet | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN void *Handle;		Handle to the HTTP get object | *		IN void *Handle ;	Handle to HTTP get object | ||||||
|  *	OUT unsigned int *length;	Buffer to get the read and parsed data | * | ||||||
|  *	OUT unsigned int *total;	Size of tge buffer passed | *	Description :	Clears the handle allocated for the HTTP GET operation | ||||||
|  * | *		Clears socket states and memory allocated for socket operations.  | ||||||
|  * Description: | * | ||||||
|  *	Extracts information from the Handle to the HTTP get object. | *	Return : int ; | ||||||
|  * | *		UPNP_E_SUCCESS - On Success | ||||||
|  * Return: int | *		UPNP_E_INVALID_PARAM - Invalid Parameter | ||||||
|  *	UPNP_E_SUCCESS		- On Sucess | * | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Parameter | *	Note : | ||||||
|  ************************************************************************/ | ************************************************************************/ | ||||||
| int http_HttpGetProgress( |  | ||||||
| 	IN void *Handle, |  | ||||||
| 	OUT unsigned int *length, |  | ||||||
| 	OUT unsigned int *total ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ |  | ||||||
|  * Function: http_CloseHttpGet |  | ||||||
|  * |  | ||||||
|  * Parameters: |  | ||||||
|  *	IN void *Handle;	Handle to HTTP get object |  | ||||||
|  * |  | ||||||
|  * Description: |  | ||||||
|  *	Clears the handle allocated for the HTTP GET operation |  | ||||||
|  *	Clears socket states and memory allocated for socket operations.  |  | ||||||
|  * |  | ||||||
|  * Return: int |  | ||||||
|  *	UPNP_E_SUCCESS		- On Success |  | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Parameter |  | ||||||
|  ************************************************************************/ |  | ||||||
| int http_CloseHttpGet(IN void *Handle); | int http_CloseHttpGet(IN void *Handle); | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	http_OpenHttpGet | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		IN const char *url_str :	String as a URL | ||||||
|  | *		IN OUT void **Handle :		Pointer to buffer to store HTTP | ||||||
|  | *									post handle | ||||||
|  | *		IN OUT char **contentType :	Type of content | ||||||
|  | *		OUT int *contentLength :	length of content | ||||||
|  | *		OUT int *httpStatus :		HTTP status returned on receiving a | ||||||
|  | *									response message | ||||||
|  | *		IN int timeout :			time out value | ||||||
|  | * | ||||||
|  | *	Description :	Makes the HTTP GET message, connects to the peer,  | ||||||
|  | *		sends the HTTP GET request, gets the response and parses the  | ||||||
|  | *		response. | ||||||
|  | * | ||||||
|  | *	Return : int; | ||||||
|  | *		UPNP_E_SUCCESS - On Success ; | ||||||
|  | *		UPNP_E_INVALID_PARAM - Invalid Paramters ; | ||||||
|  | *		UPNP_E_OUTOF_MEMORY ; | ||||||
|  | *		UPNP_E_SOCKET_ERROR ; | ||||||
|  | *		UPNP_E_BAD_RESPONSE ; | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | * | ||||||
|  | ************************************************************************/ | ||||||
|  | int http_OpenHttpGet(IN const char *url_str, | ||||||
|  | 					IN OUT void **Handle, | ||||||
|  | 					IN OUT char **contentType, | ||||||
|  | 					OUT int *contentLength, | ||||||
|  | 					OUT int *httpStatus, | ||||||
|  | 					IN int timeout); | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_OpenHttpGet | *	Function :	http_OpenHttpGetProxy | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN const char *url_str:		String as a URL | *		IN const char *url_str :	String as a URL | ||||||
|  *	IN OUT void **Handle:		Pointer to buffer to store HTTP | *		IN const char *proxy_str :	String as a URL to the proxy | ||||||
|  *					post handle | *		IN OUT void **Handle :		Pointer to buffer to store HTTP | ||||||
|  *	IN OUT char **contentType:	Type of content | *									post handle | ||||||
|  *	OUT int *contentLength:		length of content | *		IN OUT char **contentType :	Type of content | ||||||
|  *	OUT int *httpStatus:		HTTP status returned on receiving a | *		OUT int *contentLength :	length of content | ||||||
|  *					response message | *		OUT int *httpStatus :		HTTP status returned on receiving a | ||||||
|  *	IN int timeout:			time out value | *									response message | ||||||
|  * | *		IN int timeout :			time out value | ||||||
|  * Description: | * | ||||||
|  *	Makes the HTTP GET message, connects to the peer,  | *	Description :	Makes the HTTP GET message, connects to the peer,  | ||||||
|  *	sends the HTTP GET request, gets the response and parses the  | *		sends the HTTP GET request, gets the response and parses the  | ||||||
|  *	response. | *		response. | ||||||
|  * | * | ||||||
|  * Return: int | *	Return : int; | ||||||
|  *	UPNP_E_SUCCESS		- On Success | *		UPNP_E_SUCCESS - On Success ; | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Paramters | *		UPNP_E_INVALID_PARAM - Invalid Paramters ; | ||||||
|  *	UPNP_E_OUTOF_MEMORY | *		UPNP_E_OUTOF_MEMORY ; | ||||||
|  *	UPNP_E_SOCKET_ERROR | *		UPNP_E_SOCKET_ERROR ; | ||||||
|  *	UPNP_E_BAD_RESPONSE | *		UPNP_E_BAD_RESPONSE ; | ||||||
|  ************************************************************************/ | * | ||||||
| int http_OpenHttpGet( | *	Note : | ||||||
| 	IN const char *url_str, | * | ||||||
| 	IN OUT void **Handle, | ************************************************************************/ | ||||||
| 	IN OUT char **contentType, |  | ||||||
| 	OUT int *contentLength, |  | ||||||
| 	OUT int *httpStatus, |  | ||||||
| 	IN int timeout); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ |  | ||||||
|  * Function: http_OpenHttpGetProxy |  | ||||||
|  * |  | ||||||
|  * Parameters: |  | ||||||
|  *	IN const char *url_str;		String as a URL |  | ||||||
|  *	IN const char *proxy_str;	String as a URL |  | ||||||
|  *	IN OUT void **Handle;		Pointer to buffer to store HTTP |  | ||||||
|  *					post handle |  | ||||||
|  *	IN OUT char **contentType;	Type of content |  | ||||||
|  *	OUT int *contentLength;		length of content |  | ||||||
|  *	OUT int *httpStatus;		HTTP status returned on receiving a |  | ||||||
|  *					response message |  | ||||||
|  *	IN int timeout:			time out value |  | ||||||
|  * |  | ||||||
|  * Description: |  | ||||||
|  *	Makes the HTTP GET message, connects to the peer,  |  | ||||||
|  *	sends the HTTP GET request, gets the response and parses the response. |  | ||||||
|  *	If a proxy URL is defined then the connection is made there. |  | ||||||
|  * |  | ||||||
|  * Return: int |  | ||||||
|  *	UPNP_E_SUCCESS		- On Success |  | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Paramters |  | ||||||
|  *	UPNP_E_OUTOF_MEMORY |  | ||||||
|  *	UPNP_E_SOCKET_ERROR |  | ||||||
|  *	UPNP_E_BAD_RESPONSE |  | ||||||
|  ************************************************************************/ |  | ||||||
| int http_OpenHttpGetProxy(IN const char *url_str, | int http_OpenHttpGetProxy(IN const char *url_str, | ||||||
| 					IN const char *proxy_str, | 					IN const char *proxy_str, | ||||||
| 					IN OUT void **Handle, | 					IN OUT void **Handle, | ||||||
| @@ -444,134 +430,126 @@ int http_OpenHttpGetProxy(IN const char *url_str, | |||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_SendStatusResponse | *	Function :	http_SendStatusResponse | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN SOCKINFO *info;		Socket information object | *		IN SOCKINFO *info :				Socket information object | ||||||
|  *	IN int http_status_code;	error code returned while making  | *		IN int http_status_code :		error code returned while making  | ||||||
|  *					or sending the response message | *										or sending the response message | ||||||
|  *	IN int request_major_version;	request major version | *		IN int request_major_version :	request major version | ||||||
|  *	IN int request_minor_version;	request minor version | *		IN int request_minor_version :	request minor version | ||||||
|  * | * | ||||||
|  * Description: | *	Description :	Generate a response message for the status query and | ||||||
|  *	Generate a response message for the status query and send the | *		send the status response. | ||||||
|  *	status response. | * | ||||||
|  * | *	Return : int; | ||||||
|  * Return: int | *		0 -- success | ||||||
|  *	0 -- success | *		UPNP_E_OUTOF_MEMORY | ||||||
|  *	UPNP_E_OUTOF_MEMORY | *		UPNP_E_SOCKET_WRITE | ||||||
|  *	UPNP_E_SOCKET_WRITE | *		UPNP_E_TIMEDOUT | ||||||
|  *	UPNP_E_TIMEDOUT | * | ||||||
|  ************************************************************************/ | *	Note : | ||||||
| int http_SendStatusResponse( | ************************************************************************/ | ||||||
| 	IN SOCKINFO *info, | int http_SendStatusResponse( IN SOCKINFO *info, IN int http_status_code, | ||||||
| 	IN int http_status_code, | 						  IN int request_major_version, | ||||||
| 	IN int request_major_version, | 						  IN int request_minor_version ); | ||||||
| 	IN int request_minor_version ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_MakeMessage | *	Function :	http_MakeMessage | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	INOUT membuffer* buf;		buffer with the contents of the  | *		INOUT membuffer* buf :		buffer with the contents of the  | ||||||
|  *					message | *									message | ||||||
|  *	IN int http_major_version;	HTTP major version | *		IN int http_major_version :	HTTP major version | ||||||
|  *	IN int http_minor_version;	HTTP minor version | *		IN int http_minor_version :	HTTP minor version | ||||||
|  *	IN const char* fmt;		Pattern format  | *		IN const char* fmt :		Pattern format  | ||||||
|  *	...;	 | *		... :	 | ||||||
|  * | * | ||||||
|  * Description: | *	Description :	Generate an HTTP message based on the format that is  | ||||||
|  *	Generate an HTTP message based on the format that is specified | *		specified in the input parameters. | ||||||
|  *	in the input parameters. | * | ||||||
|  * | *		fmt types: | ||||||
|  * fmt types: | *		's':	arg = const char* C_string | ||||||
|  *	'B':	arg = int status_code  | *		'b':	arg1 = const char* buf; arg2 = size_t buf_length  | ||||||
|  *		appends content-length, content-type and HTML body | *				memory ptr | ||||||
|  *		for given code | *		'c':	(no args) appends CRLF "\r\n" | ||||||
|  *	'b':	arg1 = const char* buf; | *		'd':	arg = int number		// appends decimal number | ||||||
|  *		arg2 = size_t buf_length memory ptr | *		'h':	arg = off_t number		// appends off_t number | ||||||
|  *	'C':	(no args) appends a HTTP CONNECTION: close header  | *		't':	arg = time_t * gmt_time	// appends time in RFC 1123 fmt | ||||||
|  *			depending on major,minor version | *		'D':	(no args) appends HTTP DATE: header | ||||||
|  *	'c':	(no args) appends CRLF "\r\n" | *		'S':	(no args) appends HTTP SERVER: header | ||||||
|  *	'D':	(no args) appends HTTP DATE: header | *		'U':	(no args) appends HTTP USER-AGENT: header | ||||||
|  *	'd':	arg = int number            // appends decimal number | *		'C':	(no args) appends a HTTP CONNECTION: close header  | ||||||
|  *	'G':	arg = range information     // add range header | *				depending on major,minor version | ||||||
|  *	'h':	arg = off_t number          // appends off_t number | *		'N':	arg1 = int content_length	// content-length header | ||||||
|  *	'K':	(no args)                   // add chunky header | *		'Q':	arg1 = http_method_t; arg2 = char* url;  | ||||||
|  *	'N':	arg1 = off_t content_length // content-length header | *				arg3 = int url_length // start line of request | ||||||
|  *	'q':    arg1 = http_method_t        // request start line and HOST header | *		'R':	arg = int status_code // adds a response start line | ||||||
|  *		arg2 = (uri_type *) | *		'B':	arg = int status_code  | ||||||
|  *	'Q':	arg1 = http_method_t;       // start line of request | *				appends content-length, content-type and HTML body for given code | ||||||
|  *		arg2 = char* url;  | *		'T':	arg = char * content_type; format e.g: "text/html";	 | ||||||
|  *		arg3 = size_t url_length  | *				 content-type header | ||||||
|  *	'R':	arg = int status_code       // adds a response start line | * | ||||||
|  *	'S':	(no args) appends HTTP SERVER: header | *	Return : int; | ||||||
|  *	's':	arg = const char* C_string | *		0 - On Success | ||||||
|  *	'T':	arg = char * content_type; format | *		UPNP_E_OUTOF_MEMORY | ||||||
|  *		e.g: "text/html"; content-type header | *		UPNP_E_INVALID_URL; | ||||||
|  *	't':	arg = time_t * gmt_time     // appends time in RFC 1123 fmt | * | ||||||
|  *	'U':	(no args) appends HTTP USER-AGENT: header | *	Note : | ||||||
|  *      'X':    arg = const char useragent; "redsonic" HTTP X-User-Agent: useragent | ************************************************************************/ | ||||||
|  * | int http_MakeMessage( INOUT membuffer* buf,  | ||||||
|  * Return: int | 			IN int http_major_version, | ||||||
|  *	0 - On Success | 			IN int http_minor_version, | ||||||
|  *	UPNP_E_OUTOF_MEMORY | 			IN const char* fmt, ... ); | ||||||
|  *	UPNP_E_INVALID_URL |  | ||||||
|  ************************************************************************/ |  | ||||||
| int http_MakeMessage( |  | ||||||
| 	INOUT membuffer* buf,  |  | ||||||
| 	IN int http_major_version, |  | ||||||
| 	IN int http_minor_version, |  | ||||||
| 	IN const char* fmt, ... ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_CalcResponseVersion | *	Function :	http_CalcResponseVersion | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN int request_major_vers;	Request major version | *		IN int request_major_vers :		Request major version | ||||||
|  *	IN int request_minor_vers;	Request minor version | *		IN int request_minor_vers :		Request minor version | ||||||
|  *	OUT int* response_major_vers;	Response mojor version | *		OUT int* response_major_vers :	Response mojor version | ||||||
|  *	OUT int* response_minor_vers;	Response minor version | *		OUT int* response_minor_vers :	Response minor version | ||||||
|  * | * | ||||||
|  * Description: | *	Description :	Calculate HTTP response versions based on the request | ||||||
|  *	Calculate HTTP response versions based on the request versions. | *		versions. | ||||||
|  * | * | ||||||
|  * Return: void | *	Return :	void | ||||||
|  ************************************************************************/ | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| void http_CalcResponseVersion(  | void http_CalcResponseVersion(  | ||||||
| 	IN int request_major_vers, | 		IN int request_major_vers, IN int request_minor_vers, | ||||||
| 	IN int request_minor_vers, | 		OUT int* response_major_vers, OUT int* response_minor_vers ); | ||||||
| 	OUT int* response_major_vers, |  | ||||||
| 	OUT int* response_minor_vers ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: http_OpenHttpGetEx | *	Function :	http_OpenHttpGetEx | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	IN const char *url_str;		String as a URL | *		IN const char *url_str :	String as a URL | ||||||
|  *	IN OUT void **Handle;		Pointer to buffer to store HTTP | *		IN OUT void **Handle :		Pointer to buffer to store HTTP | ||||||
|  *					post handle | *									post handle | ||||||
|  *	IN OUT char **contentType;	Type of content | *		IN OUT char **contentType :	Type of content | ||||||
|  *	OUT int *contentLength;		length of content | *		OUT int *contentLength :	length of content | ||||||
|  *	OUT int *httpStatus;		HTTP status returned on receiving a | *		OUT int *httpStatus :		HTTP status returned on receiving a | ||||||
|  *					response message | *									response message | ||||||
|  *	IN int timeout;			time out value | *		IN int timeout :			time out value | ||||||
|  * | * | ||||||
|  * Description: | *	Description :	Makes the HTTP GET message, connects to the peer,  | ||||||
|  *	Makes the HTTP GET message, connects to the peer,  | *		sends the HTTP GET request, gets the response and parses the  | ||||||
|  *	sends the HTTP GET request, gets the response and parses the  | *		response. | ||||||
|  *	response. | * | ||||||
|  * | *	Return : int; | ||||||
|  * Return: int | *		UPNP_E_SUCCESS - On Success ; | ||||||
|  *	UPNP_E_SUCCESS		- On Success | *		UPNP_E_INVALID_PARAM - Invalid Paramters ; | ||||||
|  *	UPNP_E_INVALID_PARAM	- Invalid Paramters | *		UPNP_E_OUTOF_MEMORY ; | ||||||
|  *	UPNP_E_OUTOF_MEMORY | *		UPNP_E_SOCKET_ERROR ; | ||||||
|  *	UPNP_E_SOCKET_ERROR | *		UPNP_E_BAD_RESPONSE ; | ||||||
|  *	UPNP_E_BAD_RESPONSE | * | ||||||
|  ************************************************************************/ | *	Note : | ||||||
|  | * | ||||||
|  | ************************************************************************/ | ||||||
| int http_OpenHttpGetEx(IN const char *url_str, | int http_OpenHttpGetEx(IN const char *url_str, | ||||||
| 		     IN OUT void **Handle, | 		     IN OUT void **Handle, | ||||||
| 		     IN OUT char **contentType, | 		     IN OUT char **contentType, | ||||||
| @@ -581,19 +559,19 @@ int http_OpenHttpGetEx(IN const char *url_str, | |||||||
| 			 IN int highRange, | 			 IN int highRange, | ||||||
| 		     IN int timeout); | 		     IN int timeout); | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
|  * Function: get_sdk_info | *	Function :	get_sdk_info | ||||||
|  * | * | ||||||
|  * Parameters: | *	Parameters : | ||||||
|  *	OUT char *info;	buffer to store the operating system information | *		OUT char *info ;	 | ||||||
|  * | * | ||||||
|  * Description: | *	Description :	Returns the server information for the operating  | ||||||
|  *	Returns the server information for the operating system | *		system | ||||||
|  * | * | ||||||
|  * Return: | *	Return : void ; | ||||||
|  *	UPNP_INLINE void | * | ||||||
|  ************************************************************************/ | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| void get_sdk_info( OUT char *info ); | void get_sdk_info( OUT char *info ); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| @@ -602,4 +580,3 @@ void get_sdk_info( OUT char *info ); | |||||||
|  |  | ||||||
|  |  | ||||||
| #endif // GENLIB_NET_HTTP_HTTPREADWRITE_H | #endif // GENLIB_NET_HTTP_HTTPREADWRITE_H | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,103 +1,103 @@ | |||||||
|  | #ifdef WIN32 | ||||||
|  |  | ||||||
| #ifndef INET_PTON | #ifndef INET_PTON | ||||||
| #define INET_PTON | #define INET_PTON | ||||||
|  |  | ||||||
|  | #include <winsock2.h> | ||||||
| #ifdef WIN32 |  | ||||||
|  |  | ||||||
| #ifdef IPV6_ |  | ||||||
| #define INET_IPV6 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include "unixutil.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  | typedef int socklen_t; | ||||||
|  | #define EAFNOSUPPORT 97 | ||||||
|  |  | ||||||
|  | /* | ||||||
| /*! |  * WARNING: Don't even consider trying to compile this on a system where | ||||||
|  * \file |  | ||||||
|  * |  | ||||||
|  * \author: Paul Vixie, 1996. |  | ||||||
|  * |  | ||||||
|  * \brief Network support routines missing in WIN32. |  | ||||||
|  * |  | ||||||
|  * \warning Don't even consider trying to compile this on a system where |  | ||||||
|  * sizeof(int) < 4.  sizeof(int) 4 is fine; all the world's not a VAX. |  * sizeof(int) < 4.  sizeof(int) 4 is fine; all the world's not a VAX. | ||||||
|  * |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /*! | /* const char * | ||||||
|  * \brief format an IPv4 address |  * inet_ntop4(src, dst, size) | ||||||
|  * |  *	format an IPv4 address | ||||||
|  * \return `dst' (as a const) |  * return: | ||||||
|  * |  *	`dst' (as a const) | ||||||
|  * \note |  * notes: | ||||||
|  *	\li (1) uses no statics |  *	(1) uses no statics | ||||||
|  *	\li (2) takes a u_char* not an in_addr as input |  *	(2) takes a u_char* not an in_addr as input | ||||||
|  * |  * author: | ||||||
|  |  *	Paul Vixie, 1996. | ||||||
|  */ |  */ | ||||||
| extern const char *inet_ntop4(const u_char src, char *dst, socklen_t size); | extern const char * inet_ntop4(const u_char src, char *dst, socklen_t size); | ||||||
|  |  | ||||||
|  | /* const char * | ||||||
| /*! |  * inet_ntop6(src, dst, size) | ||||||
|  * \brief convert IPv6 binary address into presentation (printable) format |  *	convert IPv6 binary address into presentation (printable) format | ||||||
|  |  * author: | ||||||
|  |  *	Paul Vixie, 1996. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #ifdef INET_IPV6 | #ifdef INET_IPV6 | ||||||
| extern const char *inet_ntop6(const u_char *src, char *dst, socklen_t size); |  | ||||||
|  | extern const char * inet_ntop6(src, dst, size); | ||||||
|  |  | ||||||
| #endif /* INET_IPV6 */ | #endif /* INET_IPV6 */ | ||||||
|  |  | ||||||
|  | /* int | ||||||
| /*! |  * inet_pton4(src, dst) | ||||||
|  * \brief like inet_aton() but without all the hexadecimal and shorthand. |  *	like inet_aton() but without all the hexadecimal and shorthand. | ||||||
|  * |  * return: | ||||||
|  * \return 1 if `src' is a valid dotted quad, else 0. |  *	1 if `src' is a valid dotted quad, else 0. | ||||||
|  * |  * notice: | ||||||
|  * \note does not touch `dst' unless it's returning 1. |  *	does not touch `dst' unless it's returning 1. | ||||||
|  |  * author: | ||||||
|  |  *	Paul Vixie, 1996. | ||||||
|  */ |  */ | ||||||
| extern inet_pton4(const char *src,u_char *dst); | extern inet_pton4(const char *src,u_char *dst); | ||||||
|  |  | ||||||
|  | /* int | ||||||
| /*! |  * inet_pton6(src, dst) | ||||||
|  * \brief convert presentation level address to network order binary form. |  *	convert presentation level address to network order binary form. | ||||||
|  * |  * return: | ||||||
|  * \return 1 if `src' is a valid [RFC1884 2.2] address, else 0. |  *	1 if `src' is a valid [RFC1884 2.2] address, else 0. | ||||||
|  * |  * notice: | ||||||
|  * \note |  *	(1) does not touch `dst' unless it's returning 1. | ||||||
|  *	\li (1) does not touch `dst' unless it's returning 1. |  *	(2) :: in a full address is silently ignored. | ||||||
|  *	\li (2) :: in a full address is silently ignored. |  * credit: | ||||||
|  |  *	inspired by Mark Andrews. | ||||||
|  |  * author: | ||||||
|  |  *	Paul Vixie, 1996. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #ifdef INET_IPV6 | #ifdef INET_IPV6 | ||||||
| extern int inet_pton6(const char *src, u_char *dst); |  | ||||||
|  | extern int inet_pton6(src, dst); | ||||||
|  |  | ||||||
| #endif /* INET_IPV6 */ | #endif /* INET_IPV6 */ | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief convert a network format address to presentation format. | /* char * | ||||||
|  * |  * inet_ntop(af, src, dst, size) | ||||||
|  * \return |  *	convert a network format address to presentation format. | ||||||
|  |  * return: | ||||||
|  *	pointer to presentation format address (`dst'), or NULL (see errno). |  *	pointer to presentation format address (`dst'), or NULL (see errno). | ||||||
|  |  * author: | ||||||
|  |  *	Paul Vixie, 1996. | ||||||
|  */ |  */ | ||||||
| extern const char *inet_ntop(int af,const void *src,char *dst,socklen_t size); | extern const char *inet_ntop(int af,const void *src,char *dst,socklen_t size); | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! | /* int | ||||||
|  * \brief convert from presentation format (which usually means ASCII printable) |  * inet_pton(af, src, dst) | ||||||
|  * to network format (which is usually some kind of binary format). |  *	convert from presentation format (which usually means ASCII printable) | ||||||
|  * |  *	to network format (which is usually some kind of binary format). | ||||||
|  * \return |  * return: | ||||||
|  *	\li 1 if the address was valid for the specified address family |  *	1 if the address was valid for the specified address family | ||||||
|  *	\li 0 if the address wasn't valid (`dst' is untouched in this case) |  *	0 if the address wasn't valid (`dst' is untouched in this case) | ||||||
|  *	\li -1 if some other error occurred (`dst' is untouched in this case, too) |  *	-1 if some other error occurred (`dst' is untouched in this case, too) | ||||||
|  |  * author: | ||||||
|  |  *	Paul Vixie, 1996. | ||||||
|  */ |  */ | ||||||
| extern int inet_pton(int af,const char *src,void *dst); | extern int inet_pton(int af,const char *src,void *dst); | ||||||
|  |  | ||||||
|  | #endif | ||||||
| #endif /* WIN32 */ | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* INET_PTON */ |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,141 +1,154 @@ | |||||||
| /************************************************************************ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  *  | // | ||||||
|  * Copyright (c) 2000-2003 Intel Corporation  | // Copyright (c) 2000-2003 Intel Corporation  | ||||||
|  * All rights reserved.  | // All rights reserved.  | ||||||
|  * | // | ||||||
|  * Redistribution and use in source and binary forms, with or without  | // Redistribution and use in source and binary forms, with or without  | ||||||
|  * modification, are permitted provided that the following conditions are met:  | // modification, are permitted provided that the following conditions are met:  | ||||||
|  * | // | ||||||
|  * * Redistributions of source code must retain the above copyright notice,  | // * Redistributions of source code must retain the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer.  | // this list of conditions and the following disclaimer.  | ||||||
|  * * Redistributions in binary form must reproduce the above copyright notice,  | // * Redistributions in binary form must reproduce the above copyright notice,  | ||||||
|  * this list of conditions and the following disclaimer in the documentation  | // this list of conditions and the following disclaimer in the documentation  | ||||||
|  * and/or other materials provided with the distribution.  | // and/or other materials provided with the distribution.  | ||||||
|  * Neither name of Intel Corporation nor the names of its contributors  | // * Neither name of Intel Corporation nor the names of its contributors  | ||||||
|  * may be used to endorse or promote products derived from this software  | // may be used to endorse or promote products derived from this software  | ||||||
|  * without specific prior written permission. | // without specific prior written permission. | ||||||
|  *  | //  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  | ||||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  | ||||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  | ||||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR  | ||||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | ||||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | ||||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  | ||||||
|  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  | ||||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  | ||||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * | // | ||||||
|  ************************************************************************/ | /////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #ifndef MINISERVER_H | #ifndef MINISERVER_H | ||||||
| #define MINISERVER_H | #define MINISERVER_H | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "sock.h" | #include "sock.h" | ||||||
| #include "httpparser.h" | #include "httpparser.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| extern SOCKET gMiniServerStopSock; | extern SOCKET gMiniServerStopSock; | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct MServerSockArray { | typedef struct MServerSockArray { | ||||||
| 	/* socket for listening for miniserver requests */ |   int miniServerSock;     //socket for listening for miniserver | ||||||
| 	SOCKET miniServerSock4; |                           //requests | ||||||
| 	SOCKET miniServerSock6; |   int miniServerStopSock; //socket for stopping miniserver  | ||||||
| 	/* socket for stopping miniserver */ |   int ssdpSock; //socket for incoming advertisments and search requests | ||||||
| 	SOCKET miniServerStopSock; |  | ||||||
| 	/* socket for incoming advertisments and search requests */ |  | ||||||
| 	SOCKET ssdpSock4; |  | ||||||
| 	SOCKET ssdpSock6; |  | ||||||
| 	SOCKET ssdpSock6UlaGua; |  | ||||||
|  |  | ||||||
| 	SOCKET stopPort; |   int stopPort; | ||||||
| 	SOCKET miniServerPort4; |   int miniServerPort; | ||||||
| 	SOCKET miniServerPort6; |  | ||||||
|  |   CLIENTONLY(int ssdpReqSock;) //socket for sending search  | ||||||
|  |        //requests and receiving | ||||||
|  |        // search replies | ||||||
|        |        | ||||||
| #ifdef INCLUDE_CLIENT_APIS |  | ||||||
| 	/* socket for sending search requests and receiving search replies */ |  | ||||||
| 	SOCKET ssdpReqSock4; |  | ||||||
| 	SOCKET ssdpReqSock6; |  | ||||||
| #endif /* INCLUDE_CLIENT_APIS */ |  | ||||||
| } MiniServerSockArray; | } MiniServerSockArray; | ||||||
|  |  | ||||||
|  | //typedef void (*MiniServerCallback) ( const char* document, int sockfd ); | ||||||
|  |  | ||||||
| typedef void (*MiniServerCallback)( | typedef void (*MiniServerCallback) ( IN http_parser_t *parser, | ||||||
| 	IN http_parser_t *parser, | 									 IN http_message_t* request,  | ||||||
| 	IN http_message_t* request,  | 									 IN SOCKINFO *info ); | ||||||
| 	IN SOCKINFO *info ); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	SetHTTPGetCallback | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		MiniServerCallback callback ; - HTTP Callback to be invoked  | ||||||
|  | * | ||||||
|  | *	Description :	Set HTTP Get Callback | ||||||
|  | * | ||||||
|  | *	Return :	void | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | void SetHTTPGetCallback( MiniServerCallback callback ); | ||||||
|  |  | ||||||
| /*! | /************************************************************************ | ||||||
|  * \brief Set HTTP Get Callback. | *	Function :	SetSoapCallback | ||||||
|  */ | * | ||||||
| void SetHTTPGetCallback( | *	Parameters : | ||||||
| 	/*! [in] HTTP Callback to be invoked . */ | *		MiniServerCallback callback ; - SOAP Callback to be invoked  | ||||||
| 	MiniServerCallback callback); | * | ||||||
|  | *	Description :	Set SOAP Callback | ||||||
|  | * | ||||||
| /*! | *	Return :	void | ||||||
|  * \brief Set SOAP Callback. | * | ||||||
|  */ | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
| #ifdef INCLUDE_DEVICE_APIS | #ifdef INCLUDE_DEVICE_APIS | ||||||
| void SetSoapCallback( | void SetSoapCallback( MiniServerCallback callback ); | ||||||
| 	/*! [in] SOAP Callback to be invoked . */ | #else  | ||||||
| 	MiniServerCallback callback); | static inline void SetSoapCallback( MiniServerCallback callback ) {} | ||||||
| #else  /* INCLUDE_DEVICE_APIS */ | #endif | ||||||
| static inline void SetSoapCallback(MiniServerCallback callback) {} |  | ||||||
| #endif /* INCLUDE_DEVICE_APIS */ |  | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  | *	Function :	SetGenaCallback | ||||||
|  | * | ||||||
|  | *	Parameters : | ||||||
|  | *		MiniServerCallback callback ; - GENA Callback to be invoked | ||||||
|  | * | ||||||
|  | *	Description :	Set GENA Callback | ||||||
|  | * | ||||||
|  | *	Return :	void | ||||||
|  | * | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | void SetGenaCallback( MiniServerCallback callback ); | ||||||
|  |  | ||||||
| /*! | /************************************************************************ | ||||||
|  * \brief Set GENA Callback. | *	Function :	StartMiniServer | ||||||
|  */ | * | ||||||
| void SetGenaCallback( | *	Parameters : | ||||||
| 	/*! [in] GENA Callback to be invoked. */ | *		unsigned short listen_port ; Port on which the server listens for  | ||||||
| 	MiniServerCallback callback); | *									incoming connections | ||||||
|  | * | ||||||
|  | *	Description :	Initialize the sockets functionality for the  | ||||||
|  | *		Miniserver. Initialize a thread pool job to run the MiniServer | ||||||
|  | *		and the job to the thread pool. If listen port is 0, port is  | ||||||
|  | *		dynamically picked | ||||||
|  | * | ||||||
|  | *		Use timer mechanism to start the MiniServer, failure to meet the  | ||||||
|  | *		allowed delay aborts the attempt to launch the MiniServer. | ||||||
|  | * | ||||||
|  | *	Return : int ; | ||||||
|  | *		Actual port socket is bound to - On Success:  | ||||||
|  | *		A negative number UPNP_E_XXX - On Error   			 | ||||||
|  | *	Note : | ||||||
|  | ************************************************************************/ | ||||||
|  | int StartMiniServer( unsigned short listen_port ); | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
| /*! | *	Function :	StopMiniServer | ||||||
|  * \brief Initialize the sockets functionality for the Miniserver. | * | ||||||
|  * | *	Parameters : | ||||||
|  * Initialize a thread pool job to run the MiniServer and the job to the | *		void ;	 | ||||||
|  * thread pool. | * | ||||||
|  * | *	Description :	Stop and Shutdown the MiniServer and free socket  | ||||||
|  * If listen port is 0, port is dynamically picked. | *		resources. | ||||||
|  * | * | ||||||
|  * Use timer mechanism to start the MiniServer, failure to meet the  | *	Return : int ; | ||||||
|  * allowed delay aborts the attempt to launch the MiniServer. | *		Always returns 0  | ||||||
|  * | * | ||||||
|  * \return | *	Note : | ||||||
|  *	\li On success: UPNP_E_SUCCESS. | ************************************************************************/ | ||||||
|  *	\li On error: UPNP_E_XXX. | int StopMiniServer( void ); | ||||||
|  */ |  | ||||||
| int StartMiniServer( |  | ||||||
| 	/*! [in,out] Port on which the server listens for incoming IPv4 connections. */ |  | ||||||
| 	unsigned short *listen_port4,  |  | ||||||
| 	/*! [in,out] Port on which the server listens for incoming IPv6 connections. */ |  | ||||||
| 	unsigned short *listen_port6); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \brief Stop and Shutdown the MiniServer and free socket resources. |  | ||||||
|  * |  | ||||||
|  * \return Always returns 0. |  | ||||||
|  */ |  | ||||||
| int StopMiniServer(); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| }   /* extern C */ | }   /* extern C */ | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif /* MINISERVER_H */ | #endif /* MINISERVER_H */ | ||||||
|  |  | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user