Compare commits
	
		
			17 Commits
		
	
	
		
			release-1.
			...
			release-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 18ff422de9 | ||
|   | aec58e6c9e | ||
|   | 4bcb9dd5e1 | ||
|   | 8cfa0e488c | ||
|   | 9e775e662e | ||
|   | 03400550cd | ||
|   | 62a5d7c5ef | ||
|   | df80fbae36 | ||
|   | 9c6ea48583 | ||
|   | 8da593fae3 | ||
|   | b4816a33a9 | ||
|   | 1b029e80af | ||
|   | 907b103439 | ||
|   | ecd755d3f8 | ||
|   | b8cac59dd9 | ||
|   | 591e0d3e25 | ||
|   | bd3bf7ad0a | 
							
								
								
									
										197
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										197
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,69 +1,180 @@ | |||||||
| 2006-07-07 Oxy <virtual_worlds@gmx.de> | ************************************************************************* | ||||||
|  | Version 1.4.2 | ||||||
|  | ************************************************************************* | ||||||
|  |  | ||||||
|  | 2007-02-09 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
|  | 	* 32/64 bits portability issues on *printf. | ||||||
|  | 	Use %zd for size_t, and cast to (long long) for off_t. | ||||||
|  |  | ||||||
|  | 2007-02-02 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
|  | 	* Bumped the program version to 1.4.2 in config.ac. | ||||||
|  |  | ||||||
|  | 	* Now requires autoconf 2.60. | ||||||
|  |  | ||||||
|  | 	* Fixed docdir use. | ||||||
|  |  | ||||||
|  | 	* Does not install the documentation by default. | ||||||
|  |  | ||||||
|  | 	* Use dist-bzip2 to create a .bz2 distribution file. | ||||||
|  |  | ||||||
|  | 2007-01-23 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
|  | 	* SF Tracker [ 1634922 ] Support for large files (>= 2 GiB), part 2 | ||||||
|  | 	Submitted By: Jonathan - no_dice | ||||||
|  | 	Summary: This patch hopefully fixes the remaining types and related | ||||||
|  | 	code to enable files >= 2 GiB to be streamed. Jonathan claims to have | ||||||
|  | 	tested this with a patched version of ushare-0.9.8 and a D-Link DSM-520. | ||||||
|  |  | ||||||
|  | 2007-01-09 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
|  | 	* SF Tracker [ 1628629 ] Multicast interface patch | ||||||
|  | 	Submitted By: Fredrik Svensson - svefredrik | ||||||
|  | 	This patch fixes two problems: | ||||||
|  | 	1) Specify the IP address for the interface when we do | ||||||
|  | 	setsockopt IP_ADD_MEMBERSHIP. This makes it possible to run | ||||||
|  | 	when no default router has been configured. | ||||||
|  | 	2) Explicitly set the multicast interface through setsockopt | ||||||
|  | 	IP_MULTICAST_IF. Avoids socket error -207 in some cases. | ||||||
|  | 	 | ||||||
|  | 	* SF Tracker [ 1628590 ] XML parsing segfault patch | ||||||
|  | 	Submitted By: Fredrik Svensson - svefredrik | ||||||
|  | 	This patch fixes a segmentation fault problem that occurrs | ||||||
|  | 	when parsing XML code than some routers produce. | ||||||
|  |  | ||||||
|  | 2007-01-06 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
|  | 	* SF Tracker [ 1628552 ] XML white space patch | ||||||
|  | 	Submitted By: Fredrik Svensson - svefredrik | ||||||
|  | 	 | ||||||
|  | 	* SF Tracker [ 1628562 ] Maximum total jobs patch | ||||||
|  | 	Submitted By: Fredrik Svensson - svefredrik | ||||||
|  | 	Also, I incremented the libray versions and included some | ||||||
|  | 	comments in the file configure.ac so that we do not bump | ||||||
|  | 	the library version excessively, only the necessary numbers | ||||||
|  | 	on the next release. | ||||||
|  | 	 | ||||||
|  | 	* SF Tracker [ 1628575 ] Linksys WRT54G patch | ||||||
|  | 	Submitted By: Fredrik Svensson - svefredrik | ||||||
|  | 	 | ||||||
|  | 	* SF Tracker [ 1628636 ] SSDP packet copy patch | ||||||
|  | 	Submitted By: Fredrik Svensson - svefredrik | ||||||
|  | 	Changed NUM_COPY to 1 since, according to section 9.2 of the | ||||||
|  | 	HTTPU/MU spec, we should never send more than one copy of a | ||||||
|  | 	reply to an SSDP request. Ref. section 9.2 of | ||||||
|  | 	http://www.upnp.org/download/draft-goland-http-udp-04.txt | ||||||
|  |  | ||||||
|  | 2006-12-23 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
|  | 	* Thorough revision of every call of http_MakeMessage() due to a | ||||||
|  | 	bug introduced in rev.79 "largefile patch added". | ||||||
|  | 	http_MakeMessage() has a worst than brain damaged "printf" like | ||||||
|  | 	interface. In rev.79, the "N" format parameter must be an off_t. | ||||||
|  | 	Every call of this function with an "N" format parameter and an | ||||||
|  | 	int passed on the stack would fail terribly. | ||||||
|  | 	 | ||||||
|  | 	* SF Bug tracker [ 1590469 ] | ||||||
|  | 	Typo in ixmlparser.c | ||||||
|  | 	Submitted By: Erik Johansson - erijo | ||||||
|  | 	 | ||||||
|  | 	* SF Bug Tracker [ 1590466 ] Invalid xml output | ||||||
|  | 	Submitted By: Erik Johansson - erijo | ||||||
|  | 	 | ||||||
|  | 	* SF Patch tracker [ 1581161 ] VStudio2005 patch | ||||||
|  | 	Submitted By: David Maass - darkservant | ||||||
|  | 	 | ||||||
|  | 	* SF Patch tracker [ 1587272 ] const-ified ixml | ||||||
|  | 	Submitted By: Erik Johansson | ||||||
|  | 	 | ||||||
|  | 	* Finished const-ifications as suggested by Erik Johansson in | ||||||
|  | 	SF Patch tracker [ 1587272 ]. | ||||||
|  |  | ||||||
|  | 2006-07-05 Nektarios K. Papadopoulos <npapadop(at)inaccessnetworks.com> | ||||||
|  | 	* [bug-id] 1580440 | ||||||
|  | 	[submitted-by] Erik Johansson - erijo | ||||||
|  | 	[patched-by] Erik Johansson - erijo | ||||||
|  | 	The SOAP HTTP message that's generated on upnp errors | ||||||
|  | 	is missing a \r\n\ between header and body. | ||||||
|  |  | ||||||
|  | 2006-07-07 Oxy <virtual_worlds(at)gmx.de> | ||||||
|  |  | ||||||
|  | 	* support for large files (>2 GBytes) added | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ************************************************************************* | ||||||
|  | Version 1.4.1 | ||||||
|  | ************************************************************************* | ||||||
|  |  | ||||||
|  | 2006-07-07 Oxy <virtual_worlds(at)gmx.de> | ||||||
|  |  | ||||||
| 	* full support for Windows added, static library and DLL are fully | 	* full support for Windows added, static library and DLL are fully | ||||||
|         working, code compiles with Borland Builder C++ and MS Visual | 	working, code compiles with Borland Builder C++ and MS Visual | ||||||
|         C/C++ | 	C/C++ | ||||||
|  |  | ||||||
| 2006-07-05 Nektarios K. Papadopoulos <npapadop@inaccessnetworks.com> | 2006-07-05 Nektarios K. Papadopoulos <npapadop(at)inaccessnetworks.com> | ||||||
|  |  | ||||||
| 	* Include prebuilt documentation (html,pdf), dropping doc++  | 	* Include prebuilt documentation (html,pdf), dropping doc++  | ||||||
| 	dependancy. | 	dependancy. | ||||||
|  |  | ||||||
| 2006-07-03 Marcelo Jimenez <mroberto@users.sourceforge.net> | 2006-07-03 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* Patch for FreeBSD, thanks to Markus Strobl. | 	* Patch for FreeBSD, thanks to Markus Strobl. | ||||||
|  |  | ||||||
| 2006-06-26 Marcelo Jimenez <mroberto@users.sourceforge.net> | 2006-06-26 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* Fix for missing "else" in httpreadwrite.c. Thanks to npapadop | 	* Fix for missing "else" in httpreadwrite.c. Thanks to npapadop | ||||||
| 	for the patch. | 	for the patch. | ||||||
|  |  | ||||||
| 2006-06-26 Marcelo Jimenez <mroberto@users.sourceforge.net> | 2006-06-26 Marcelo Jimenez <mroberto(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* Fix for va_list initialization in x86_64 architectures. | 	* Fix for va_list initialization in x86_64 architectures. | ||||||
|  |  | ||||||
| 2006-06-08 Oxy <virtual_worlds@gmx.de> | 2006-06-08 Oxy <virtual_worlds(at)gmx.de> | ||||||
|  |  | ||||||
| 	* Patch to fix memory leaks and reasons for crashes added (thanks | 	* Patch to fix memory leaks and reasons for crashes added (thanks | ||||||
| 	to loigu) | 	to loigu) | ||||||
|  |  | ||||||
| ************************************************************************* | ************************************************************************* | ||||||
| Release of version 1.4.0 | Version 1.4.0 | ||||||
| ************************************************************************* | ************************************************************************* | ||||||
|  |  | ||||||
| 2006-05-26 Oxy <virtual_worlds@gmx.de> | 2006-05-26 Oxy <virtual_worlds(at)gmx.de> | ||||||
|  |  | ||||||
| 	* defines in iasnprintf.h changed to work with GCC-version < 3 | 	* defines in iasnprintf.h changed to work with GCC-version < 3 | ||||||
|  |  | ||||||
| 2006-05-22 Oxy <virtual_worlds@gmx.de> | 2006-05-22 Oxy <virtual_worlds(at)gmx.de> | ||||||
|  |  | ||||||
| 	* BSD-patch added (not tested yet on an BSD system) | 	* BSD-patch added (not tested yet on an BSD system) | ||||||
|  |  | ||||||
| 2006-05-19 Oxy <virtual_worlds@gmx.de> | 2006-05-19 Oxy <virtual_worlds(at)gmx.de> | ||||||
|  |  | ||||||
| 	* Patch added for bug: ixml parser colapsed on empty args (arg="") | 	* Patch added for bug: ixml parser colapsed on empty args (arg="") | ||||||
|  |  | ||||||
| 2006-05-18 Oxy <virtual_worlds@gmx.de> | 2006-05-18 Oxy <virtual_worlds(at)gmx.de> | ||||||
|  |  | ||||||
| 	* DSM-320 patch added (fetched from project MediaTomb) | 	* DSM-320 patch added (fetched from project MediaTomb) | ||||||
|  | 	 | ||||||
| 	* httpGet additons atch added, Added proxy support by introducing | 	* httpGet additons atch added, Added proxy support by introducing | ||||||
| 	  UpnpOpenHttpGetProxy. UpnpOpenHttpGet now just calls | 	  UpnpOpenHttpGetProxy. UpnpOpenHttpGet now just calls | ||||||
| 	  UpnpOpenHttpGetProxy with the proxy url set to NULL. | 	  UpnpOpenHttpGetProxy with the proxy url set to NULL. | ||||||
|  | 	   | ||||||
| 	* Bugfix for typo ("\0" / "0") in ixmlparser.c | 	* Bugfix for typo ("\0" / "0") in ixmlparser.c | ||||||
|  | 	 | ||||||
| 	* Bugfix for M-Search packet | 	* Bugfix for M-Search packet | ||||||
|  |  | ||||||
| ************************************************************************* | ************************************************************************* | ||||||
| FORK FROM DEAD libupnp | FORK FROM DEAD libupnp | ||||||
| ************************************************************************* | ************************************************************************* | ||||||
|  |  | ||||||
| 2006-04-29  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-04-29  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* THANKS: new file with list of contributors | 	* THANKS: new file with list of contributors | ||||||
|  |  | ||||||
| 	* upnp/src/gena/gena_device.c (respond_ok): add 'Content-Length: 0' | 	* upnp/src/gena/gena_device.c (respond_ok): add 'Content-Length: 0' | ||||||
| 	  in subscription response. Patch by Chaos (Bug # 1455367). | 	  in subscription response. Patch by Chaos (Bug # 1455367). | ||||||
|  |  | ||||||
| 2006-04-08  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-04-08  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/doc/UPnP_Programming_Guide.pdf: replace this document with  | 	* upnp/doc/UPnP_Programming_Guide.pdf: replace this document with  | ||||||
| 	  the one in libupnp-doc-1.2.1 because current CVS version  | 	  the one in libupnp-doc-1.2.1 because current CVS version  | ||||||
| @@ -74,20 +185,20 @@ FORK FROM DEAD libupnp | |||||||
| 	* changes applied to several files to work under Sparc Solaris, temporarily | 	* changes applied to several files to work under Sparc Solaris, temporarily | ||||||
| 	  requiring a define SPARC_SOLARIS | 	  requiring a define SPARC_SOLARIS | ||||||
|  |  | ||||||
| 2006-04-03  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-04-03  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/Makefile.am: install upnp samples in $(docdir)/examples | 	* upnp/Makefile.am: install upnp samples in $(docdir)/examples | ||||||
|  |  | ||||||
| 2006-03-28  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-28  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* configure.ac: add --with-docdir option to choose where documentation | 	* configure.ac: add --with-docdir option to choose where documentation | ||||||
| 	  is installed (or -without-docdir to not install the documentation) | 	  is installed (or -without-docdir to not install the documentation) | ||||||
|  |  | ||||||
| 2006-03-27  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-27  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* ixml/test: add simple test suite for xml parser | 	* ixml/test: add simple test suite for xml parser | ||||||
|  |  | ||||||
| 2006-03-26  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-26  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* ixml/src/ixmlparser.c (Parser_processCDSect): fix bug which prevents | 	* ixml/src/ixmlparser.c (Parser_processCDSect): fix bug which prevents | ||||||
| 	  CDATA sections which contain a 0 (zero) to be parsed (instead the | 	  CDATA sections which contain a 0 (zero) to be parsed (instead the | ||||||
| @@ -98,18 +209,18 @@ FORK FROM DEAD libupnp | |||||||
| 	  option, and move samples compilation from check_PROGRAMS to | 	  option, and move samples compilation from check_PROGRAMS to | ||||||
| 	  noinst_PROGRAMS | 	  noinst_PROGRAMS | ||||||
|  |  | ||||||
| 2006-03-25  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-25  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/src/genlib/miniserver/miniserver.c (get_miniserver_sockets):  | 	* upnp/src/genlib/miniserver/miniserver.c (get_miniserver_sockets):  | ||||||
| 	  fix bug if new socket created has fd 0 (can only occur when stdin | 	  fix bug if new socket created has fd 0 (can only occur when stdin | ||||||
| 	  has been closed). Patch by Oskar Liljeblad 2004-07-02 : | 	  has been closed). Patch by Oskar Liljeblad 2004-07-02 : | ||||||
| 	  http://sourceforge.net/mailarchive/message.php?msg_id=8870528 | 	  http://sourceforge.net/mailarchive/message.php?msg_id=8870528 | ||||||
| 	 | 	 | ||||||
| 2006-03-21  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-21  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/test/test_init.c: add some version checks and exit if failure | 	* upnp/test/test_init.c: add some version checks and exit if failure | ||||||
|  |  | ||||||
| 2006-03-05  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-05  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* libupnp version 1.3.1 | 	* libupnp version 1.3.1 | ||||||
|  |  | ||||||
| @@ -124,11 +235,11 @@ FORK FROM DEAD libupnp | |||||||
| 	  dependencies between upnp and ixml / threadutil, so that programs  | 	  dependencies between upnp and ixml / threadutil, so that programs  | ||||||
| 	  linking against upnp only still work. | 	  linking against upnp only still work. | ||||||
|  |  | ||||||
| 2006-03-04  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-04  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* libupnp version 1.3.0 | 	* libupnp version 1.3.0 | ||||||
|  |  | ||||||
| 2006-03-03  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-03-03  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/src/genlib/net/http/httpreadwrite.c (get_sdk_info): use | 	* upnp/src/genlib/net/http/httpreadwrite.c (get_sdk_info): use | ||||||
| 	  package version string from configure to set sdk info | 	  package version string from configure to set sdk info | ||||||
| @@ -136,7 +247,7 @@ FORK FROM DEAD libupnp | |||||||
| 	* upnp/Makefile.am: add sample/tvdevice/web/ files in EXTRA_DIST | 	* upnp/Makefile.am: add sample/tvdevice/web/ files in EXTRA_DIST | ||||||
| 	  + do not distribute generated upnpconfig.h file. | 	  + do not distribute generated upnpconfig.h file. | ||||||
|  |  | ||||||
| 2006-02-28  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-02-28  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/src/inc/config.h, configure.ac: use only new defines | 	* upnp/src/inc/config.h, configure.ac: use only new defines | ||||||
| 	  UPNP_HAVE_xx instead of INCLUDE_yyy_APIS and INTERNAL_WEB_SERVER | 	  UPNP_HAVE_xx instead of INCLUDE_yyy_APIS and INTERNAL_WEB_SERVER | ||||||
| @@ -145,7 +256,7 @@ FORK FROM DEAD libupnp | |||||||
| 	  the librarie LDFLAGS in order to export only the symbols defined  | 	  the librarie LDFLAGS in order to export only the symbols defined  | ||||||
| 	  in the API | 	  in the API | ||||||
|  |  | ||||||
| 2006-02-27  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-02-27  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* configure.ac: add libtool versions for the 3 libraries | 	* configure.ac: add libtool versions for the 3 libraries | ||||||
|  |  | ||||||
| @@ -153,7 +264,7 @@ FORK FROM DEAD libupnp | |||||||
|  |  | ||||||
| 	* threadutil/src/ThreadPool.c (SetSeed): add missing 'static'  | 	* threadutil/src/ThreadPool.c (SetSeed): add missing 'static'  | ||||||
|  |  | ||||||
| 2006-02-26  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-02-26  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* threadutil/inc/iasnprintf.h: add gcc __printf__ format attribute | 	* threadutil/inc/iasnprintf.h: add gcc __printf__ format attribute | ||||||
| 	  to "iasnprintf" | 	  to "iasnprintf" | ||||||
| @@ -174,11 +285,11 @@ FORK FROM DEAD libupnp | |||||||
| 	  the configuration of the installed libraries (generates installed | 	  the configuration of the installed libraries (generates installed | ||||||
| 	  file <upnp/upnpconfig.h>) | 	  file <upnp/upnpconfig.h>) | ||||||
|  |  | ||||||
| 2006-02-22  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-02-22  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/ : add missing include of config.h in some .c files | 	* upnp/ : add missing include of config.h in some .c files | ||||||
|  |  | ||||||
| 2006-02-21  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-02-21  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/inc/upnp.h: move some definitions which should not be | 	* upnp/inc/upnp.h: move some definitions which should not be | ||||||
| 	  exported into "upnp/src/inc/util.h" | 	  exported into "upnp/src/inc/util.h" | ||||||
| @@ -186,12 +297,12 @@ FORK FROM DEAD libupnp | |||||||
| 	* import all modifications below from libupnp in djmount 0.51 | 	* import all modifications below from libupnp in djmount 0.51 | ||||||
| 	  into official libupnp | 	  into official libupnp | ||||||
| 	 | 	 | ||||||
| 2006-01-17  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-01-17  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* threadutil/Makefile.am (libthreadutil_la_SOURCES): remove extraneous | 	* threadutil/Makefile.am (libthreadutil_la_SOURCES): remove extraneous | ||||||
| 	  file | 	  file | ||||||
|  |  | ||||||
| 2006-01-15  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-01-15  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* configure.ac: add checks for large-file support | 	* configure.ac: add checks for large-file support | ||||||
|  |  | ||||||
| @@ -211,53 +322,53 @@ FORK FROM DEAD libupnp | |||||||
| 	* ixml/src/node.c (ixmlNode_getNodeType): fix compilation warning | 	* ixml/src/node.c (ixmlNode_getNodeType): fix compilation warning | ||||||
| 	  on const return type | 	  on const return type | ||||||
|  |  | ||||||
| 2006-01-12  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-01-12  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/src/inc/readwrite.h : suppress unused C++ header file | 	* upnp/src/inc/readwrite.h : suppress unused C++ header file | ||||||
|  |  | ||||||
| 2006-01-11  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2006-01-11  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/inc/config.h, upnp/src/inc/upnpapi.h,  | 	* upnp/inc/config.h, upnp/src/inc/upnpapi.h,  | ||||||
| 	  upnp/src/inc/httpreadwrite.h: remove internal configuration variable  | 	  upnp/src/inc/httpreadwrite.h: remove internal configuration variable  | ||||||
| 	  MINIMUM_DELAY (no clear purpose) | 	  MINIMUM_DELAY (no clear purpose) | ||||||
|  |  | ||||||
| 2005-12-05  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-12-05  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/inc/upnp.h: re-declare obsolete method UpnpSetContentLength, | 	* upnp/inc/upnp.h: re-declare obsolete method UpnpSetContentLength, | ||||||
| 	  for binary compatibility with previous libupnp version. | 	  for binary compatibility with previous libupnp version. | ||||||
|  |  | ||||||
| 	* upnp/src/api/upnpapi.c: correct type of g_maxContentLength to size_t | 	* upnp/src/api/upnpapi.c: correct type of g_maxContentLength to size_t | ||||||
|  |  | ||||||
| 2005-11-01  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-11-01  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* autoconfiscate library : replace all makefiles by Makefile.am | 	* autoconfiscate library : replace all makefiles by Makefile.am | ||||||
| 	  for automake support, + preliminary autoconf support | 	  for automake support, + preliminary autoconf support | ||||||
| 	  (generated config.h not yet used in source files) | 	  (generated config.h not yet used in source files) | ||||||
|  |  | ||||||
| 2005-10-18  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-10-18  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/src/makefile: fix location of DEBUG STATIC libupnp library | 	* upnp/src/makefile: fix location of DEBUG STATIC libupnp library | ||||||
| 	 | 	 | ||||||
| 	* upnp/sample/tvctrlpt/linux/Makefile,  | 	* upnp/sample/tvctrlpt/linux/Makefile,  | ||||||
| 	  upnp/sample/tvdevice/linux/Makefile: fix STATIC library support | 	  upnp/sample/tvdevice/linux/Makefile: fix STATIC library support | ||||||
|  |  | ||||||
| 2005-10-16  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-10-16  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* threadutil/src/Makefile (clean): remove built library | 	* threadutil/src/Makefile (clean): remove built library | ||||||
|  |  | ||||||
| 2005-08-28  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-08-28  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* ixml/src/ixml.h, ixml/src/ixml.c (ixmlRelaxParser) : new function | 	* ixml/src/ixml.h, ixml/src/ixml.c (ixmlRelaxParser) : new function | ||||||
|  |  | ||||||
| 	* ixml/src/ixmlparser.h, ixml/src/ixmlparser.c (Parser_setErrorChar) : | 	* ixml/src/ixmlparser.h, ixml/src/ixmlparser.c (Parser_setErrorChar) : | ||||||
| 	  new function | 	  new function | ||||||
|  |  | ||||||
| 2005-08-02  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-08-02  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* ixml/src/Makefile: correct bug for static library being incorrectly  | 	* ixml/src/Makefile: correct bug for static library being incorrectly  | ||||||
| 	  stripped when building non-debug | 	  stripped when building non-debug | ||||||
|  |  | ||||||
| 2005-06-09  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-06-09  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* ixml/src/element.c (ixmlElement_removeAttributeNode):  | 	* ixml/src/element.c (ixmlElement_removeAttributeNode):  | ||||||
| 	  remove some compilation warning | 	  remove some compilation warning | ||||||
| @@ -268,7 +379,7 @@ FORK FROM DEAD libupnp | |||||||
| 	* upnp/inc/upnptools.h, upnp/src/api/upnptools.c :  | 	* upnp/inc/upnptools.h, upnp/src/api/upnptools.c :  | ||||||
| 	  add missing const's in public API | 	  add missing const's in public API | ||||||
|  |  | ||||||
| 2005-05-28  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-05-28  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/inc/config.h: suppress HTTP_READ_BYTES (unused) | 	* upnp/inc/config.h: suppress HTTP_READ_BYTES (unused) | ||||||
| 	  and replace by DEFAULT_SOAP_CONTENT_LENGTH (previously in upnpapi.h) | 	  and replace by DEFAULT_SOAP_CONTENT_LENGTH (previously in upnpapi.h) | ||||||
| @@ -289,7 +400,7 @@ FORK FROM DEAD libupnp | |||||||
| 	* upnp/src/genlib/net/http/httpreadwrite.c : corrected an incorrect | 	* upnp/src/genlib/net/http/httpreadwrite.c : corrected an incorrect | ||||||
| 	  sprintf format | 	  sprintf format | ||||||
| 	 | 	 | ||||||
| 2005-05-27  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-05-27  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/makefile, upnp/src/makefile,  | 	* upnp/makefile, upnp/src/makefile,  | ||||||
| 	  ixml/Makefile, ixml/src/Makefile,  | 	  ixml/Makefile, ixml/src/Makefile,  | ||||||
| @@ -297,7 +408,7 @@ FORK FROM DEAD libupnp | |||||||
| 	  implement STATIC library support (from patch at  | 	  implement STATIC library support (from patch at  | ||||||
| 	  http://sourceforge.net/tracker/?group_id=7189&atid=307189 ) | 	  http://sourceforge.net/tracker/?group_id=7189&atid=307189 ) | ||||||
|  |  | ||||||
| 2005-05-26  R<>mi Turboult  <r3mi@users.sourceforge.net> | 2005-05-26  R<>mi Turboult  <r3mi(at)users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* upnp/src/api/upnpapi.c, upnp/src/soap/soap_device.c, | 	* upnp/src/api/upnpapi.c, upnp/src/soap/soap_device.c, | ||||||
| 	  upnp/src/soap/makefile :  | 	  upnp/src/soap/makefile :  | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								Makefile.am
									
									
									
									
									
								
							| @@ -5,33 +5,39 @@ | |||||||
| # Copyright (C) 2005 R<>mi Turboult <r3mi@users.sourceforge.net> | # Copyright (C) 2005 R<>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| # | # | ||||||
|  |  | ||||||
| ACLOCAL_AMFLAGS 	= -I m4 | ACLOCAL_AMFLAGS = -I m4 | ||||||
|  |  | ||||||
| DISTCHECK_CONFIGURE_FLAGS = --enable-debug --enable-samples | DISTCHECK_CONFIGURE_FLAGS = --enable-debug --enable-samples | ||||||
|  |  | ||||||
| SUBDIRS 		= ixml threadutil upnp docs/dist | SUBDIRS = ixml threadutil upnp docs/dist | ||||||
|  |  | ||||||
|  |  | ||||||
| EXTRA_DIST		= libupnp.pc.in LICENSE THANKS libupnp.spec | EXTRA_DIST = \ | ||||||
|  | 	libupnp.pc.in \ | ||||||
|  | 	LICENSE \ | ||||||
|  | 	THANKS \ | ||||||
|  | 	libupnp.spec \ | ||||||
|  | 	build/libupnp.bpf \ | ||||||
|  | 	build/libupnp.bpr \ | ||||||
|  | 	build/libupnp.dsp \ | ||||||
|  | 	build/libupnp.dsw \ | ||||||
|  | 	build/inc/autoconfig.h \ | ||||||
|  | 	build/inc/config.h \ | ||||||
|  | 	build/inc/upnpconfig.h | ||||||
|  |  | ||||||
|  |  | ||||||
| # 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  | ||||||
| # by 'install-exec' target (instead of default 'install-data') | # by 'install-exec' target (instead of default 'install-data') | ||||||
| pkgconfigexecdir 	= $(libdir)/pkgconfig | pkgconfigexecdir = $(libdir)/pkgconfig | ||||||
| pkgconfigexec_DATA 	= libupnp.pc | pkgconfigexec_DATA = libupnp.pc | ||||||
|  |  | ||||||
| $(pkgconfigexec_DATA): config.status | $(pkgconfigexec_DATA): config.status | ||||||
|  |  | ||||||
|  |  | ||||||
| if WITH_DOCDIR | if WITH_DOCUMENTATION | ||||||
|     docdir		= @DOCDIR@ |     doc_DATA = LICENSE README NEWS TODO THANKS | ||||||
|     doc_DATA 		= LICENSE README NEWS TODO THANKS |  | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  |  | ||||||
| CLEANFILES		= IUpnpErrFile.txt IUpnpInfoFile.txt | CLEANFILES = IUpnpErrFile.txt IUpnpInfoFile.txt | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										71
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								README
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| Linux* 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<>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| @@ -22,8 +22,8 @@ sections: | |||||||
| 1) Release Contents | 1) Release Contents | ||||||
| ------------------------------------------- | ------------------------------------------- | ||||||
|  |  | ||||||
| The Linux SDK for UPnP Devices is an SDK for development of UPnP device  | The Portable SDK for UPnP Devices is an SDK for development of UPnP device  | ||||||
| and control point applications for Linux.  It consists of the core UPnP  | and control point applications.  It consists of the core UPnP  | ||||||
| protocols along with a UPnP-specific eXtensible Markup Language (XML) parser  | protocols along with a UPnP-specific eXtensible Markup Language (XML) parser  | ||||||
| supporting the Document Object Model (DOM) Level 2 API and an optional,  | supporting the Document Object Model (DOM) Level 2 API and an optional,  | ||||||
| integrated mini web server for serving UPnP related documents. | integrated mini web server for serving UPnP related documents. | ||||||
| @@ -32,7 +32,7 @@ integrated mini web server for serving UPnP related documents. | |||||||
| 2) Package Contents | 2) Package Contents | ||||||
| ------------------------------------------- | ------------------------------------------- | ||||||
|  |  | ||||||
| The Linux SDK for UPnP Devices contains the following:  | The SDK for UPnP Devices contains the following:  | ||||||
|  |  | ||||||
| README    	This file.  Contains the installation and build instructions. | README    	This file.  Contains the installation and build instructions. | ||||||
| LICENSE   	The licensing terms the SDK is distributed under. | LICENSE   	The licensing terms the SDK is distributed under. | ||||||
| @@ -55,11 +55,10 @@ upnp\sample	A sample device and control point application, illustrating the | |||||||
| 3) System Requirements | 3) System Requirements | ||||||
| ------------------------------------------- | ------------------------------------------- | ||||||
|  |  | ||||||
| The SDK for UPnP Devices is designed to compile and run under the  | The SDK for UPnP Devices is designed to compile and run under several | ||||||
| Linux operating system.  It does, however, have dependencies on some | operating systems.  It does, however, have dependencies on some | ||||||
| packages that may not be installed by default.  All packages that it | packages that may not be installed by default.  All packages that it | ||||||
| requires are listed below.  The name of the package and where it can be  | requires are listed below. | ||||||
| found is dependent on the distribution of Linux being used. |  | ||||||
|  |  | ||||||
| libpthread  The header and library are installed as part of the glibc-devel | libpthread  The header and library are installed as part of the glibc-devel | ||||||
|             package (or equivalent). |             package (or equivalent). | ||||||
| @@ -83,7 +82,7 @@ ps2pdf      The final step to making the PDF is converting the PostStript | |||||||
|             into Portable Document Format.  The ghostscript package provides |             into Portable Document Format.  The ghostscript package provides | ||||||
|             this tool. |             this tool. | ||||||
|  |  | ||||||
| For the UPnP library to function correctly, Linux networking must be configured | For the UPnP library to function correctly, networking must be configured | ||||||
| properly for multicasting.  To do this: | properly for multicasting.  To do this: | ||||||
|  |  | ||||||
| route add -net 239.0.0.0 netmask 255.0.0.0 eth0 | route add -net 239.0.0.0 netmask 255.0.0.0 eth0 | ||||||
| @@ -93,14 +92,6 @@ this addition, device advertisements and control point searches will not | |||||||
| function. | function. | ||||||
|  |  | ||||||
|  |  | ||||||
| libupnp has been built and tested on the following configurations: |  | ||||||
|  |  | ||||||
| * MandrakeLinux 10.1 (kernel 2.6.8.1-12mdk, gcc 3.4.1, glibc-2.3.3) |  | ||||||
|  |  | ||||||
| * Ubuntu 5.10 "Breezy Badger" (Linux kernel 2.6.12-9-386, gcc 4.0.2 20050808 |  | ||||||
|   prerelease, libc6 2.3.5-1ubuntu12) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 4) Build Instructions | 4) Build Instructions | ||||||
| ------------------------------------------- | ------------------------------------------- | ||||||
| @@ -169,7 +160,7 @@ To build without: | |||||||
| % make  | % make  | ||||||
|  |  | ||||||
|  |  | ||||||
| The SDK for Linux also contains some additional helper APIs, declared in | The SDK also contains some additional helper APIs, declared in | ||||||
| inc/tools/upnptools.h.  If these additional tools are not required, they can | inc/tools/upnptools.h.  If these additional tools are not required, they can | ||||||
| be compiled out: | be compiled out: | ||||||
|  |  | ||||||
| @@ -249,6 +240,45 @@ sub-directory. Example : | |||||||
| % ../../upnp_tv_device | % ../../upnp_tv_device | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | SOLARIS BUILD | ||||||
|  |  | ||||||
|  | The building process for the Solaris operating system is similar to the one | ||||||
|  | described above. Only the call to ./configure has to be done using an | ||||||
|  | additional parameter: | ||||||
|  |  | ||||||
|  | ./configure CFLAGS="-mcpu=<cputype> -mtune=<cputype> -DSPARC_SOLARIS" | ||||||
|  |  | ||||||
|  | where <cputype> has to be replaced by the appropriate CPU tuning flag (e.g. | ||||||
|  | "supersparc"). Afterwards | ||||||
|  |  | ||||||
|  | make | ||||||
|  | make install | ||||||
|  |  | ||||||
|  | can be called as described above. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | WINDOWS BUILD | ||||||
|  |  | ||||||
|  | In order to build libupnp under Windows the pthreads-w32 package is required. | ||||||
|  | You can download a self-extracting ZIP file from the following location: | ||||||
|  |  | ||||||
|  | ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe | ||||||
|  |  | ||||||
|  | Execute the self-extracting archive and copy the Pre-build.2 folder to the | ||||||
|  | top level source folder. | ||||||
|  | Rename Pre-build.2 to pthreads.  | ||||||
|  | Open the provided workspace build\libupnp.dsw with Visual C++ 6.0 and select | ||||||
|  | Build->Build libupnp.dll (F7) | ||||||
|  |  | ||||||
|  | For building a static library instead of a DLL and for using the static | ||||||
|  | pthreads-w32 library following switches need to be defined additionally: | ||||||
|  |  | ||||||
|  | UPNP_STATIC_LIB - for creating a statically linkable UPnP-library | ||||||
|  | PTW32_STATIC_LIB - for using the static pthreads32 library | ||||||
|  |  | ||||||
|  |  | ||||||
| 5) Install/Uninstall Instructions | 5) Install/Uninstall Instructions | ||||||
| ------------------------------------------- | ------------------------------------------- | ||||||
|  |  | ||||||
| @@ -290,9 +320,8 @@ See NEWS file. | |||||||
| 8) Support and Contact Information | 8) Support and Contact Information | ||||||
| ------------------------------------------- | ------------------------------------------- | ||||||
|  |  | ||||||
| Intel is not providing support for the Linux SDK for UPnP Devices.  Two  | Intel is not providing support for the SDK for UPnP Devices. Mailing lists | ||||||
| mailing lists for the SDK are available on http://upnp.sourceforge.net/.   | and discussion boards can be found at http://www.libupnp.org/. | ||||||
| Questions and problems should be addressed on the appropriate mailing list. |  | ||||||
|  |  | ||||||
| If you find this SDK useful, please send an email to upnp@intel.com and let | If you find this SDK useful, please send an email to upnp@intel.com and let | ||||||
| us know. | us know. | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								THANKS
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								THANKS
									
									
									
									
									
								
							| @@ -7,15 +7,22 @@ Here is a list of these people. Help us keep it complete and | |||||||
| exempt of errors. | exempt of errors. | ||||||
|  |  | ||||||
| - Arno Willig | - Arno Willig | ||||||
| - Eric Tanguy |  | ||||||
| - Oskar Liljeblad |  | ||||||
| - Chaos | - Chaos | ||||||
| - John Dennis | - David Maass | ||||||
|  | - Erik Johansson | ||||||
|  | - Eric Tanguy | ||||||
|  | - Erwan Velu | ||||||
|  | - Fredrik Svensson | ||||||
| - Jiri Zouhar | - Jiri Zouhar | ||||||
|  | - John Dennis | ||||||
|  | - Jonathan (no_dice) | ||||||
|  | - Leuk_He | ||||||
| - Loigu | - Loigu | ||||||
| - Marcelo Jimenez | - Marcelo Roberto Jimenez | ||||||
| - Markus Strobl | - Markus Strobl | ||||||
| - Nektarios K. Papadopoulos | - Nektarios K. Papadopoulos | ||||||
| - Oxy | - Oskar Liljeblad | ||||||
|  | - Michael (Oxy) | ||||||
|  | - Paul Vixie | ||||||
| - Siva Chandran | - Siva Chandran | ||||||
|  |  | ||||||
|   | |||||||
| @@ -34,6 +34,7 @@ | |||||||
|  |  | ||||||
| #include "autoconfig.h" | #include "autoconfig.h" | ||||||
|  |  | ||||||
|  | #define MAX_JOBS_TOTAL 10 | ||||||
|  |  | ||||||
| /** @name Compile time configuration options | /** @name Compile time configuration options | ||||||
|  *  The Linux SDK for UPnP Devices contains some compile-time parameters  |  *  The Linux SDK for UPnP Devices contains some compile-time parameters  | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ | |||||||
|     <RESFILES value=""/> |     <RESFILES value=""/> | ||||||
|     <DEFFILE value=""/> |     <DEFFILE value=""/> | ||||||
|     <RESDEPEN value="$(RESFILES)"/> |     <RESDEPEN value="$(RESFILES)"/> | ||||||
|     <LIBFILES value="..\..\..\pthreads-w32-1-10-0-release\pthreadBC1.lib"/> |     <LIBFILES value="D:\pthreads-w32-1-10-0-release\pthreadBC1.lib"/> | ||||||
|     <LIBRARIES value=""/> |     <LIBRARIES value=""/> | ||||||
|     <SPARELIBS value=""/> |     <SPARELIBS value=""/> | ||||||
|     <PACKAGES value=""/> |     <PACKAGES value=""/> | ||||||
| @@ -48,8 +48,8 @@ | |||||||
|     <USERDEFINES value="WIN32;LIBUPNP_EXPORTS"/> |     <USERDEFINES value="WIN32;LIBUPNP_EXPORTS"/> | ||||||
|     <SYSDEFINES value="NO_STRICT;_NO_VCL"/> |     <SYSDEFINES value="NO_STRICT;_NO_VCL"/> | ||||||
|     <MAINSOURCE value="libupnp.bpf"/> |     <MAINSOURCE value="libupnp.bpf"/> | ||||||
|     <INCLUDEPATH value="..\upnp\src\genlib\util;..\upnp\src;..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\threadutil\src;..\ixml\src;$(BCB)\include;$(BCB)\include\vcl;..\ixml\inc;..\threadutil\inc;..\upnp\inc;inc;..\ixml\src\inc;..\upnp\src\inc"/> |     <INCLUDEPATH value="..\upnp\src\genlib\util;..\upnp\src;..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\threadutil\src;..\ixml\src;$(BCB)\include;$(BCB)\include\vcl;..\ixml\inc;..\threadutil\inc;..\upnp\inc;inc;..\ixml\src\inc;..\upnp\src\inc;..\..\pthreads-w32-1-10-0-release"/> | ||||||
|     <LIBPATH value="..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\util;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\net;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\upnp\src;..\threadutil\src;..\ixml\src;$(BCB)\lib\obj;$(BCB)\lib"/> |     <LIBPATH value="..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\util;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\net;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\upnp\src;..\threadutil\src;..\ixml\src;$(BCB)\lib\obj;$(BCB)\lib;..\..\pthreads-w32-1-10-0-release"/> | ||||||
|     <WARNINGS value="-w-par"/> |     <WARNINGS value="-w-par"/> | ||||||
|   </MACROS> |   </MACROS> | ||||||
|   <OPTIONS> |   <OPTIONS> | ||||||
| @@ -94,12 +94,15 @@ ProductVersion=1.0.0.0 | |||||||
| Comments= | Comments= | ||||||
|  |  | ||||||
| [HistoryLists\hlIncludePath] | [HistoryLists\hlIncludePath] | ||||||
| Count=1 | Count=3 | ||||||
| Item0=..\upnp\src\genlib\util;..\upnp\src;..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\threadutil\src;..\ixml\src;$(BCB)\include;$(BCB)\include\vcl;..\ixml\inc;..\threadutil\inc;..\upnp\inc;inc;..\ixml\src\inc;..\upnp\src\inc | Item0=..\upnp\src\genlib\util;..\upnp\src;..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\threadutil\src;..\ixml\src;$(BCB)\include;$(BCB)\include\vcl;..\ixml\inc;..\threadutil\inc;..\upnp\inc;inc;..\ixml\src\inc;..\upnp\src\inc;..\..\pthreads-w32-1-10-0-release | ||||||
|  | Item1=..\upnp\src\genlib\util;..\upnp\src;..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\threadutil\src;..\ixml\src;$(BCB)\include;$(BCB)\include\vcl;..\ixml\inc;..\threadutil\inc;..\upnp\inc;inc;..\ixml\src\inc;..\upnp\src\inc;D:\DEVELOP\pthreads-w32-1-10-0-release | ||||||
|  | Item2=..\upnp\src\genlib\util;..\upnp\src;..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\threadutil\src;..\ixml\src;$(BCB)\include;$(BCB)\include\vcl;..\ixml\inc;..\threadutil\inc;..\upnp\inc;inc;..\ixml\src\inc;..\upnp\src\inc | ||||||
|  |  | ||||||
| [HistoryLists\hlLibraryPath] | [HistoryLists\hlLibraryPath] | ||||||
| Count=1 | Count=2 | ||||||
| Item0=..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\util;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\net;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\upnp\src;..\threadutil\src;..\ixml\src;$(BCB)\lib\obj;$(BCB)\lib | Item0=..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\util;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\net;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\upnp\src;..\threadutil\src;..\ixml\src;$(BCB)\lib\obj;$(BCB)\lib;D:\DEVELOP\pthreads-w32-1-10-0-release | ||||||
|  | Item1=..\upnp\src\uuid;..\upnp\src\urlconfig;..\upnp\src\ssdp;..\upnp\src\soap;..\upnp\src\genlib\util;..\upnp\src\genlib\service_table;..\upnp\src\genlib\net\uri;..\upnp\src\genlib\net\http;..\upnp\src\genlib\net;..\upnp\src\genlib\miniserver;..\upnp\src\genlib\client_table;..\upnp\src\gena;..\upnp\src\api;..\upnp\src;..\threadutil\src;..\ixml\src;$(BCB)\lib\obj;$(BCB)\lib | ||||||
|  |  | ||||||
| [HistoryLists\hlDebugSourcePath] | [HistoryLists\hlDebugSourcePath] | ||||||
| Count=1 | Count=1 | ||||||
|   | |||||||
| @@ -43,7 +43,7 @@ RSC=rc.exe | |||||||
| # PROP Ignore_Export_Lib 0 | # PROP Ignore_Export_Lib 0 | ||||||
| # PROP Target_Dir "" | # PROP Target_Dir "" | ||||||
| # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /YX /FD /c | # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /YX /FD /c | ||||||
| # ADD CPP /nologo /MT /W3 /GX /O2 /I "E:\svnupnp\trunk\ixml\src\inc" /I "E:\svnupnp\trunk\ixml\inc" /I "E:\svnupnp\trunk\threadutil\inc" /I "E:\svnupnp\trunk\upnp\inc" /I "E:\svnupnp\trunk\upnp\src\inc" /I "E:\svnupnp\trunk\build\inc" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /FR /YX /FD /c | # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\pthreads\include" /I "..\ixml\src\inc" /I "..\ixml\inc" /I "..\threadutil\inc" /I "..\upnp\inc" /I "..\upnp\src\inc" /I ".\inc" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /D "PTW32_STATIC_LIB" /D "UPNP_STATIC_LIB" /FR /YX /FD /c | ||||||
| # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||||
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||||
| # ADD BASE RSC /l 0x407 /d "NDEBUG" | # ADD BASE RSC /l 0x407 /d "NDEBUG" | ||||||
| @@ -53,7 +53,8 @@ BSC32=bscmake.exe | |||||||
| # ADD BSC32 /nologo | # ADD BSC32 /nologo | ||||||
| LINK32=link.exe | LINK32=link.exe | ||||||
| # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 | # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 | ||||||
| # ADD LINK32 kernel32.lib user32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib E:\svnupnp\trunk\libupnp\build\bin\pthreadvc2.lib ws2_32.lib /nologo /dll /machine:I386 | # ADD LINK32 kernel32.lib user32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pthreads\lib\pthreadvc2.lib ws2_32.lib /nologo /dll /machine:I386 | ||||||
|  | # SUBTRACT LINK32 /pdb:none | ||||||
|  |  | ||||||
| !ELSEIF  "$(CFG)" == "libupnp - Win32 Debug" | !ELSEIF  "$(CFG)" == "libupnp - Win32 Debug" | ||||||
|  |  | ||||||
| @@ -69,7 +70,7 @@ LINK32=link.exe | |||||||
| # PROP Ignore_Export_Lib 0 | # PROP Ignore_Export_Lib 0 | ||||||
| # PROP Target_Dir "" | # PROP Target_Dir "" | ||||||
| # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /YX /FD /GZ /c | # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /YX /FD /GZ /c | ||||||
| # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "E:\svnupnp\trunk\ixml\src\inc" /I "E:\svnupnp\trunk\ixml\inc" /I "E:\svnupnp\trunk\threadutil\inc" /I "E:\svnupnp\trunk\upnp\inc" /I "E:\svnupnp\trunk\upnp\src\inc" /I "E:\svnupnp\trunk\build\inc" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /FR /YX /FD /GZ /c | # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\pthreads\include" /I "..\ixml\src\inc" /I "..\ixml\inc" /I "..\threadutil\inc" /I "..\upnp\inc" /I "..\upnp\src\inc" /I "..\build\inc" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBUPNP_EXPORTS" /FR /YX /FD /GZ /c | ||||||
| # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 | # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 | ||||||
| # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 | # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 | ||||||
| # ADD BASE RSC /l 0x407 /d "_DEBUG" | # ADD BASE RSC /l 0x407 /d "_DEBUG" | ||||||
| @@ -79,7 +80,7 @@ BSC32=bscmake.exe | |||||||
| # ADD BSC32 /nologo | # ADD BSC32 /nologo | ||||||
| LINK32=link.exe | LINK32=link.exe | ||||||
| # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept | # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept | ||||||
| # ADD LINK32 kernel32.lib user32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib E:\svnupnp\trunk\libupnp\build\bin\pthreadvc2.lib ws2_32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept | # ADD LINK32 kernel32.lib user32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\pthreads\lib\pthreadvc2.lib ws2_32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept | ||||||
|  |  | ||||||
| !ENDIF  | !ENDIF  | ||||||
|  |  | ||||||
| @@ -274,6 +275,146 @@ SOURCE=..\upnp\src\win_dll.c | |||||||
| # Begin Group "Header-Dateien" | # Begin Group "Header-Dateien" | ||||||
|  |  | ||||||
| # PROP Default_Filter "h;hpp;hxx;hm;inl" | # PROP Default_Filter "h;hpp;hxx;hm;inl" | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\client_table.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\config.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\gena.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\gena_ctrlpt.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\gena_device.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\global.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\gmtdate.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\http_client.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\httpparser.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\httpreadwrite.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\inet_pton.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\md5.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\membuffer.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\miniserver.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\netall.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\parsetools.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\server.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\service_table.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\soaplib.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\sock.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\ssdplib.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\statcodes.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\statuscodes.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\strintmap.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\sysdep.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\unixutil.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\upnp_timeout.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\upnpapi.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\upnpclosesocket.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\uri.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\urlconfig.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\util.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\utilall.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\uuid.h | ||||||
|  | # End Source File | ||||||
|  | # Begin Source File | ||||||
|  |  | ||||||
|  | SOURCE=..\upnp\src\inc\webserver.h | ||||||
|  | # End Source File | ||||||
| # End Group | # End Group | ||||||
| # Begin Group "Ressourcendateien" | # Begin Group "Ressourcendateien" | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										73
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -8,9 +8,9 @@ | |||||||
| # (C) Copyright 2005-2006 R<>mi Turboult <r3mi@users.sourceforge.net> | # (C) Copyright 2005-2006 R<>mi Turboult <r3mi@users.sourceforge.net> | ||||||
| # | # | ||||||
|  |  | ||||||
| AC_PREREQ(2.59) | AC_PREREQ(2.60) | ||||||
|  |  | ||||||
| AC_INIT([libupnp], [1.4.1], [virtual_worlds@gmx.de]) | AC_INIT([libupnp], [1.4.2], [mroberto@users.sourceforge.net]) | ||||||
| # *Independently* of the above libupnp package version, the libtool version | # *Independently* of the above libupnp package version, the libtool version | ||||||
| # of the 3 libraries need to be updated whenever there is a change released : | # 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: | # "current:revision:age" (this is NOT the same as the package version), where: | ||||||
| @@ -19,16 +19,34 @@ AC_INIT([libupnp], [1.4.1], [virtual_worlds@gmx.de]) | |||||||
| # 	- interfaces added: 			age++ | # 	- interfaces added: 			age++ | ||||||
| # 	- interfaces removed:			age=0 | # 	- interfaces removed:			age=0 | ||||||
| # *please update only once, before a formal release, not for each change* | # *please update only once, before a formal release, not for each change* | ||||||
| AC_SUBST([LT_VERSION_IXML],       [2:2:0]) | # | ||||||
| AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0]) | # For release 1.4.1, we had: | ||||||
| AC_SUBST([LT_VERSION_UPNP],       [2:2:0]) | #AC_SUBST([LT_VERSION_IXML],       [2:2:0]) | ||||||
|  | #AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0]) | ||||||
|  | #AC_SUBST([LT_VERSION_UPNP],       [2:2:0]) | ||||||
|  | # | ||||||
|  | # "current:revision:age" | ||||||
|  | # | ||||||
|  | # - Code has changed in ixml | ||||||
|  | #	revision: 2 -> 3 | ||||||
|  | # - Code has changed in threadutil | ||||||
|  | #	revision: 2 -> 3 | ||||||
|  | # - Interface added in threadutil | ||||||
|  | #	current: 2 -> 3 | ||||||
|  | #	revisiion: 3 -> 0 | ||||||
|  | #	age: 0 -> 1 | ||||||
|  | # - Code has changed in upnp (revision 2 -> 3) | ||||||
|  | #	revision: 2 -> 3 | ||||||
|  | AC_SUBST([LT_VERSION_IXML],       [2:3:0]) | ||||||
|  | AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1]) | ||||||
|  | AC_SUBST([LT_VERSION_UPNP],       [2:3:0]) | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_CONFIG_AUX_DIR(config.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]) | AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects dist-bzip2]) | ||||||
|  |  | ||||||
| # | # | ||||||
| # There are 3 configuration files : | # There are 3 configuration files : | ||||||
| @@ -42,6 +60,7 @@ AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects]) | |||||||
| #    installed libraries. | #    installed libraries. | ||||||
| # | # | ||||||
| AC_CONFIG_HEADERS([autoconfig.h upnp/inc/upnpconfig.h]) | AC_CONFIG_HEADERS([autoconfig.h upnp/inc/upnpconfig.h]) | ||||||
|  | #AC_SYS_LARGEFILE_SENSITIVE | ||||||
|  |  | ||||||
| AC_REVISION([$Revision: 1.11 $]) | AC_REVISION([$Revision: 1.11 $]) | ||||||
|  |  | ||||||
| @@ -106,19 +125,28 @@ RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code]) | |||||||
|  |  | ||||||
|  |  | ||||||
| # doc installation | # doc installation | ||||||
| AC_MSG_CHECKING([documentation installation]) | # autoconf >= 2.60 already defines ${docdir}, but we will not use its  | ||||||
| AC_ARG_WITH([docdir],  | # default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}. | ||||||
| AC_HELP_STRING([--with-docdir=DIR], | # That would give us ${datarootdir}/doc/libupnp, and we want the package | ||||||
|        	       [where documentation is installed  | # version on that. | ||||||
| 	        @<:@[DATADIR/doc/]AC_PACKAGE_NAME[-]AC_PACKAGE_VERSION@:>@]) | docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}" | ||||||
| AC_HELP_STRING([--without-docdir], | AC_MSG_CHECKING([for documentation directory]) | ||||||
|        	       [do not install the documentation]), | AC_ARG_WITH([documentation],  | ||||||
| 	[DOCDIR="$with_docdir"], | 	AS_HELP_STRING([--with-documentation=directory_name], | ||||||
| 	[DOCDIR="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"]) | 		[where documentation is installed  | ||||||
|  | 		 @<:@[DATADIR/doc/]AC_PACKAGE_NAME[-]AC_PACKAGE_VERSION@:>@]) | ||||||
|  | AS_HELP_STRING([--without-documentation], | ||||||
|  | 		[do not install the documentation]), | ||||||
|  | 	[], | ||||||
|  | 	[with_documentation=no]) | ||||||
|  |  | ||||||
| AM_CONDITIONAL(WITH_DOCDIR, test x"$with_docdir" != xno) | # If something has been entered after an equal sign, assume it is the directory | ||||||
| AC_SUBST(DOCDIR) | if test x"$with_documentation" != xyes -a x"$with_documentation" != xno; then | ||||||
| AC_MSG_RESULT($DOCDIR) | 	docdir="$with_documentation" | ||||||
|  | fi | ||||||
|  | AM_CONDITIONAL(WITH_DOCUMENTATION, test x"$with_documentation" != xno) | ||||||
|  | AC_SUBST(docdir) | ||||||
|  | AC_MSG_RESULT($docdir) | ||||||
|  |  | ||||||
|  |  | ||||||
| # | # | ||||||
| @@ -144,9 +172,12 @@ else | |||||||
| fi | fi | ||||||
| AX_CFLAGS_WARN_ALL | AX_CFLAGS_WARN_ALL | ||||||
|  |  | ||||||
| # Arrange for large-file support (can be disabled with --disable-largefile). | # | ||||||
| # Define _FILE_OFFSET_BITS and _LARGE_FILES if necessary | # Lot's of stuff to ensure large file support | ||||||
| AC_SYS_LARGEFILE | # | ||||||
|  | AC_TYPE_OFF_T | ||||||
|  | AC_DEFINE(_LARGE_FILE_SOURCE, [], [Large files support]) | ||||||
|  | AC_DEFINE(_FILE_OFFSET_BITS, [64], [File Offset size]) | ||||||
|  |  | ||||||
|  |  | ||||||
| # | # | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								docs/dist/Makefile.am
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								docs/dist/Makefile.am
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,7 @@ | |||||||
| EXTRA_DIST = ./UPnP_Programming_Guide.pdf \ |  | ||||||
|  |  | ||||||
|  | EXTRA_DIST = \ | ||||||
|  |     ./UPnP_Programming_Guide.pdf \ | ||||||
|     ./IXML_Programming_Guide.pdf \ |     ./IXML_Programming_Guide.pdf \ | ||||||
|     ./html/upnp/icon1.gif \ |     ./html/upnp/icon1.gif \ | ||||||
|     ./html/upnp/icon2.gif \ |     ./html/upnp/icon2.gif \ | ||||||
| @@ -251,9 +254,10 @@ EXTRA_DIST = ./UPnP_Programming_Guide.pdf \ | |||||||
|     ./html/ixml/ixmlCloneDOMString.html \ |     ./html/ixml/ixmlCloneDOMString.html \ | ||||||
|     ./html/ixml/ixmlFreeDOMString.html |     ./html/ixml/ixmlFreeDOMString.html | ||||||
|      |      | ||||||
| if WITH_DOCDIR | if WITH_DOCUMENTATION | ||||||
|     docsdir        = @DOCDIR@ |     docsdir = @docdir@ | ||||||
|     nobase_docs_DATA = ./UPnP_Programming_Guide.pdf \ |     nobase_docs_DATA = \ | ||||||
|  |         ./UPnP_Programming_Guide.pdf \ | ||||||
|         ./IXML_Programming_Guide.pdf \ |         ./IXML_Programming_Guide.pdf \ | ||||||
|         ./html/upnp/icon1.gif \ |         ./html/upnp/icon1.gif \ | ||||||
|         ./html/upnp/icon2.gif \ |         ./html/upnp/icon2.gif \ | ||||||
| @@ -506,3 +510,4 @@ if WITH_DOCDIR | |||||||
|         ./html/ixml/ixmlCloneDOMString.html \ |         ./html/ixml/ixmlCloneDOMString.html \ | ||||||
|         ./html/ixml/ixmlFreeDOMString.html |         ./html/ixml/ixmlFreeDOMString.html | ||||||
| endif | endif | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										114
									
								
								ixml/inc/ixml.h
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								ixml/inc/ixml.h
									
									
									
									
									
								
							| @@ -38,11 +38,15 @@ | |||||||
| #include <assert.h> | #include <assert.h> | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef WIN32 | ||||||
|  #ifdef LIBUPNP_EXPORTS |  #ifndef UPNP_STATIC_LIB | ||||||
|  // set up declspec for dll export to make functions visible to library users |   #ifdef LIBUPNP_EXPORTS | ||||||
|   #define EXPORT_SPEC __declspec(dllexport) |   // 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 |  #else | ||||||
|   #define EXPORT_SPEC __declspec(dllimport) |   #define EXPORT_SPEC | ||||||
|  #endif |  #endif | ||||||
| #else | #else | ||||||
|  #define EXPORT_SPEC |  #define EXPORT_SPEC | ||||||
| @@ -256,7 +260,7 @@ ixmlNode_getNodeName(IXML_Node *nodeptr | |||||||
|    *  @return [DOMString] A {\bf DOMString} of the {\bf Node} value. |    *  @return [DOMString] A {\bf DOMString} of the {\bf Node} value. | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
| EXPORT_SPEC DOMString                | EXPORT_SPEC const DOMString                | ||||||
| ixmlNode_getNodeValue(IXML_Node *nodeptr   | ixmlNode_getNodeValue(IXML_Node *nodeptr   | ||||||
| 		        /** Pointer to the {\bf Node} to retrieve the value. */ | 		        /** Pointer to the {\bf Node} to retrieve the value. */ | ||||||
|                      ); |                      ); | ||||||
| @@ -278,7 +282,7 @@ ixmlNode_getNodeValue(IXML_Node *nodeptr | |||||||
| EXPORT_SPEC int                      | EXPORT_SPEC int                      | ||||||
| ixmlNode_setNodeValue(IXML_Node *nodeptr,  | ixmlNode_setNodeValue(IXML_Node *nodeptr,  | ||||||
| 		        /** The {\bf Node} to which to assign a new value. */ | 		        /** The {\bf Node} to which to assign a new value. */ | ||||||
|                       char *newNodeValue   |                       const char *newNodeValue   | ||||||
| 		        /** The new value of the {\bf Node}. */ | 		        /** The new value of the {\bf Node}. */ | ||||||
|                   ); |                   ); | ||||||
|  |  | ||||||
| @@ -435,7 +439,7 @@ ixmlNode_getNamespaceURI(IXML_Node *nodeptr | |||||||
|    *                      or {\tt NULL}. |    *                      or {\tt NULL}. | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
| EXPORT_SPEC DOMString                | EXPORT_SPEC const DOMString                | ||||||
| ixmlNode_getPrefix(IXML_Node *nodeptr   | ixmlNode_getPrefix(IXML_Node *nodeptr   | ||||||
| 		     /** The {\bf Node} from which to retrieve the prefix. */ | 		     /** The {\bf Node} from which to retrieve the prefix. */ | ||||||
|                ); |                ); | ||||||
| @@ -863,7 +867,7 @@ EXPORT_SPEC int | |||||||
| ixmlDocument_createCDATASectionEx(IXML_Document *doc,   | ixmlDocument_createCDATASectionEx(IXML_Document *doc,   | ||||||
| 		                    /** The owner {\bf Document} of the new  | 		                    /** The owner {\bf Document} of the new  | ||||||
| 				        node. */ | 				        node. */ | ||||||
|                                   DOMString data,       |                                   const DOMString data,       | ||||||
| 				    /** The data to associate with the new  | 				    /** The data to associate with the new  | ||||||
| 				        {\bf CDATASection} node. */ | 				        {\bf CDATASection} node. */ | ||||||
|                                   IXML_CDATASection** cdNode    |                                   IXML_CDATASection** cdNode    | ||||||
| @@ -882,7 +886,7 @@ EXPORT_SPEC IXML_CDATASection* | |||||||
| ixmlDocument_createCDATASection(IXML_Document *doc,   | ixmlDocument_createCDATASection(IXML_Document *doc,   | ||||||
| 				  /** The owner {\bf Document} of the new  | 				  /** The owner {\bf Document} of the new  | ||||||
| 				      node. */ | 				      node. */ | ||||||
|                                 DOMString data   |                                 const DOMString data   | ||||||
| 				  /** The data to associate with the new {\bf  | 				  /** The data to associate with the new {\bf  | ||||||
| 				      CDATASection} node. */ | 				      CDATASection} node. */ | ||||||
|                                ); |                                ); | ||||||
| @@ -895,7 +899,7 @@ ixmlDocument_createCDATASection(IXML_Document *doc, | |||||||
| EXPORT_SPEC IXML_Attr* | EXPORT_SPEC IXML_Attr* | ||||||
| ixmlDocument_createAttribute(IXML_Document *doc,   | ixmlDocument_createAttribute(IXML_Document *doc,   | ||||||
| 		               /** The owner {\bf Document} of the new node. */ | 		               /** The owner {\bf Document} of the new node. */ | ||||||
|                              char *name       |                              const char *name       | ||||||
| 			       /** The name of the new attribute. */ | 			       /** The name of the new attribute. */ | ||||||
|                             ); |                             ); | ||||||
|  |  | ||||||
| @@ -920,7 +924,7 @@ EXPORT_SPEC int | |||||||
| ixmlDocument_createAttributeEx(IXML_Document *doc,   | ixmlDocument_createAttributeEx(IXML_Document *doc,   | ||||||
| 		                 /** The owner {\bf Document} of the new  | 		                 /** The owner {\bf Document} of the new  | ||||||
| 				     node. */ | 				     node. */ | ||||||
|                                char *name,       |                                const char *name,       | ||||||
| 			         /** The name of the new attribute. */ | 			         /** The name of the new attribute. */ | ||||||
|                                IXML_Attr** attrNode |                                IXML_Attr** attrNode | ||||||
| 			         /** A pointer to a {\bf Attr} where the new  | 			         /** A pointer to a {\bf Attr} where the new  | ||||||
| @@ -939,7 +943,7 @@ ixmlDocument_createAttributeEx(IXML_Document *doc, | |||||||
| EXPORT_SPEC IXML_NodeList* | EXPORT_SPEC IXML_NodeList* | ||||||
| ixmlDocument_getElementsByTagName(IXML_Document *doc,      | ixmlDocument_getElementsByTagName(IXML_Document *doc,      | ||||||
| 		                    /** The {\bf Document} to search. */ | 		                    /** The {\bf Document} to search. */ | ||||||
|                                   DOMString tagName   |                                   const DOMString tagName   | ||||||
| 				    /** The tag name to find. */ | 				    /** The tag name to find. */ | ||||||
|                                  ); |                                  ); | ||||||
|  |  | ||||||
| @@ -966,10 +970,10 @@ EXPORT_SPEC int | |||||||
| ixmlDocument_createElementNSEx(IXML_Document *doc,            | ixmlDocument_createElementNSEx(IXML_Document *doc,            | ||||||
| 		                 /** The owner {\bf Document} of the new  | 		                 /** The owner {\bf Document} of the new  | ||||||
| 				     node. */ | 				     node. */ | ||||||
|                                DOMString namespaceURI,   |                                const DOMString namespaceURI,   | ||||||
| 			         /** The namespace URI for the new {\bf  | 			         /** The namespace URI for the new {\bf  | ||||||
| 				     Element}. */ | 				     Element}. */ | ||||||
|                                DOMString qualifiedName,   |                                const DOMString qualifiedName,   | ||||||
| 			         /** The qualified name of the new {\bf  | 			         /** The qualified name of the new {\bf  | ||||||
| 				     Element}. */ | 				     Element}. */ | ||||||
|                                IXML_Element** rtElement |                                IXML_Element** rtElement | ||||||
| @@ -988,10 +992,10 @@ ixmlDocument_createElementNSEx(IXML_Document *doc, | |||||||
| EXPORT_SPEC IXML_Element* | EXPORT_SPEC IXML_Element* | ||||||
| ixmlDocument_createElementNS(IXML_Document *doc,            | ixmlDocument_createElementNS(IXML_Document *doc,            | ||||||
| 		               /** The owner {\bf Document} of the new node. */ | 		               /** The owner {\bf Document} of the new node. */ | ||||||
|                              DOMString namespaceURI,   |                              const DOMString namespaceURI,   | ||||||
| 			       /** The namespace URI for the new {\bf  | 			       /** The namespace URI for the new {\bf  | ||||||
| 				   Element}. */ | 				   Element}. */ | ||||||
|                              DOMString qualifiedName   |                              const DOMString qualifiedName   | ||||||
| 			       /** The qualified name of the new {\bf  | 			       /** The qualified name of the new {\bf  | ||||||
| 				   Element}. */ | 				   Element}. */ | ||||||
|                              ); |                              ); | ||||||
| @@ -1017,9 +1021,9 @@ EXPORT_SPEC int | |||||||
| ixmlDocument_createAttributeNSEx(IXML_Document *doc, | ixmlDocument_createAttributeNSEx(IXML_Document *doc, | ||||||
| 		                   /** The owner {\bf Document} of the new  | 		                   /** The owner {\bf Document} of the new  | ||||||
| 				       {\bf Attr}. */ | 				       {\bf Attr}. */ | ||||||
|                                  DOMString namespaceURI,  |                                  const DOMString namespaceURI,  | ||||||
| 				   /** The namespace URI for the attribute. */ | 				   /** The namespace URI for the attribute. */ | ||||||
|                                  DOMString qualifiedName,  |                                  const DOMString qualifiedName,  | ||||||
| 				   /** The qualified name of the attribute. */ | 				   /** The qualified name of the attribute. */ | ||||||
|                                  IXML_Attr** attrNode |                                  IXML_Attr** attrNode | ||||||
| 				   /** A pointer to an {\bf Attr} where the  | 				   /** A pointer to an {\bf Attr} where the  | ||||||
| @@ -1036,9 +1040,9 @@ EXPORT_SPEC IXML_Attr* | |||||||
| ixmlDocument_createAttributeNS(IXML_Document *doc,  | ixmlDocument_createAttributeNS(IXML_Document *doc,  | ||||||
| 		                 /** The owner {\bf Document} of the new  | 		                 /** The owner {\bf Document} of the new  | ||||||
| 				     {\bf Attr}. */ | 				     {\bf Attr}. */ | ||||||
|                                DOMString namespaceURI,  |                                const DOMString namespaceURI,  | ||||||
| 			         /** The namespace URI for the attribute. */ | 			         /** The namespace URI for the attribute. */ | ||||||
|                                DOMString qualifiedName  |                                const DOMString qualifiedName  | ||||||
| 			         /** The qualified name of the attribute. */ | 			         /** The qualified name of the attribute. */ | ||||||
|                               );    |                               );    | ||||||
|  |  | ||||||
| @@ -1055,11 +1059,11 @@ ixmlDocument_createAttributeNS(IXML_Document *doc, | |||||||
| EXPORT_SPEC IXML_NodeList*    | EXPORT_SPEC IXML_NodeList*    | ||||||
| ixmlDocument_getElementsByTagNameNS(IXML_Document* doc,           | ixmlDocument_getElementsByTagNameNS(IXML_Document* doc,           | ||||||
| 		                      /** The {\bf Document} to search. */ | 		                      /** The {\bf Document} to search. */ | ||||||
|                                     DOMString namespaceURI,  |                                     const DOMString namespaceURI,  | ||||||
| 				      /** The namespace of the elements to  | 				      /** The namespace of the elements to  | ||||||
|                                           find or {\tt "*"} to match any  |                                           find or {\tt "*"} to match any  | ||||||
|                                           namespace. */ |                                           namespace. */ | ||||||
|                                     DOMString localName      |                                     const DOMString localName      | ||||||
| 				      /** The local name of the elements to  | 				      /** The local name of the elements to  | ||||||
|                                           find or {\tt "*"} to match any local  |                                           find or {\tt "*"} to match any local  | ||||||
|                                           name.  */ |                                           name.  */ | ||||||
| @@ -1075,7 +1079,7 @@ EXPORT_SPEC IXML_Element* | |||||||
| ixmlDocument_getElementById(IXML_Document* doc,          | ixmlDocument_getElementById(IXML_Document* doc,          | ||||||
| 		              /** The owner {\bf Document} of the {\bf  | 		              /** The owner {\bf Document} of the {\bf  | ||||||
| 			          Element}. */ | 			          Element}. */ | ||||||
|                             DOMString tagName   |                             const DOMString tagName   | ||||||
| 			      /** The name of the {\bf Element}.*/ | 			      /** The name of the {\bf Element}.*/ | ||||||
|                             ); |                             ); | ||||||
|  |  | ||||||
| @@ -1170,11 +1174,11 @@ ixmlElement_getTagName(IXML_Element* element | |||||||
|    *                      attribute. |    *                      attribute. | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
| EXPORT_SPEC DOMString    | EXPORT_SPEC const DOMString    | ||||||
| ixmlElement_getAttribute(IXML_Element* element,   | ixmlElement_getAttribute(IXML_Element* element,   | ||||||
| 		           /** The {\bf Element} from which to retrieve the  | 		           /** The {\bf Element} from which to retrieve the  | ||||||
| 			       attribute. */ | 			       attribute. */ | ||||||
|                          DOMString name      |                          const DOMString name      | ||||||
| 			   /** The name of the attribute to retrieve. */ | 			   /** The name of the attribute to retrieve. */ | ||||||
|                         ); |                         ); | ||||||
|  |  | ||||||
| @@ -1198,9 +1202,9 @@ EXPORT_SPEC int | |||||||
| ixmlElement_setAttribute(IXML_Element* element,   | ixmlElement_setAttribute(IXML_Element* element,   | ||||||
| 		           /** The {\bf Element} on which to set the  | 		           /** The {\bf Element} on which to set the  | ||||||
| 			       attribute. */ | 			       attribute. */ | ||||||
|                          DOMString name,     |                          const DOMString name,     | ||||||
| 			   /** The name of the attribute. */ | 			   /** The name of the attribute. */ | ||||||
|                          DOMString value     |                          const DOMString value | ||||||
| 			   /** The value of the attribute.  Note that this is  | 			   /** The value of the attribute.  Note that this is  | ||||||
| 			       a non-parsed string and any markup must be  | 			       a non-parsed string and any markup must be  | ||||||
| 			       escaped. */ | 			       escaped. */ | ||||||
| @@ -1220,7 +1224,7 @@ EXPORT_SPEC int | |||||||
| ixmlElement_removeAttribute(IXML_Element* element,   | ixmlElement_removeAttribute(IXML_Element* element,   | ||||||
| 		              /** The {\bf Element} from which to remove the  | 		              /** The {\bf Element} from which to remove the  | ||||||
| 			          attribute. */ | 			          attribute. */ | ||||||
|                             DOMString name      |                             const DOMString name      | ||||||
| 			      /** The name of the attribute to remove.  */ | 			      /** The name of the attribute to remove.  */ | ||||||
|                            );               |                            );               | ||||||
|  |  | ||||||
| @@ -1236,7 +1240,7 @@ EXPORT_SPEC IXML_Attr* | |||||||
| ixmlElement_getAttributeNode(IXML_Element* element,   | ixmlElement_getAttributeNode(IXML_Element* element,   | ||||||
| 		               /** The {\bf Element} from which to get the  | 		               /** The {\bf Element} from which to get the  | ||||||
| 				   attribute node.  */ | 				   attribute node.  */ | ||||||
|                              DOMString name      |                              const DOMString name      | ||||||
| 			       /** The name of the attribute node to find. */ | 			       /** The name of the attribute node to find. */ | ||||||
|                             ); |                             ); | ||||||
|  |  | ||||||
| @@ -1305,7 +1309,7 @@ EXPORT_SPEC IXML_NodeList* | |||||||
| ixmlElement_getElementsByTagName(IXML_Element* element,   | ixmlElement_getElementsByTagName(IXML_Element* element,   | ||||||
| 		                   /** The {\bf Element} from which to start  | 		                   /** The {\bf Element} from which to start  | ||||||
| 				       the search. */ | 				       the search. */ | ||||||
|                                  DOMString tagName   |                                  const DOMString tagName | ||||||
| 				   /** The name of the tag for which to  | 				   /** The name of the tag for which to  | ||||||
| 				       search. */ | 				       search. */ | ||||||
|                                 ); |                                 ); | ||||||
| @@ -1318,13 +1322,13 @@ ixmlElement_getElementsByTagName(IXML_Element* element, | |||||||
|    *                      matching attribute. |    *                      matching attribute. | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
| EXPORT_SPEC DOMString    | EXPORT_SPEC const DOMString | ||||||
| ixmlElement_getAttributeNS(IXML_Element* element,        | ixmlElement_getAttributeNS(IXML_Element* element,        | ||||||
| 		             /** The {\bf Element} from which to get the  | 		             /** The {\bf Element} from which to get the  | ||||||
| 			         attribute value. */ | 			         attribute value. */ | ||||||
|                            DOMString namespaceURI,  |                            const DOMString namespaceURI,  | ||||||
| 			     /** The namespace URI of the attribute. */ | 			     /** The namespace URI of the attribute. */ | ||||||
|                            DOMString localname      |                            const DOMString localname      | ||||||
| 			     /** The local name of the attribute. */ | 			     /** The local name of the attribute. */ | ||||||
|                           ); |                           ); | ||||||
|  |  | ||||||
| @@ -1354,11 +1358,11 @@ EXPORT_SPEC int | |||||||
| ixmlElement_setAttributeNS(IXML_Element* element,          | ixmlElement_setAttributeNS(IXML_Element* element,          | ||||||
| 		             /** The {\bf Element} on which to set the  | 		             /** The {\bf Element} on which to set the  | ||||||
| 			         attribute. */ | 			         attribute. */ | ||||||
|                            DOMString namespaceURI,    |                            const DOMString namespaceURI,    | ||||||
| 		             /** The namespace URI of the new attribute. */ | 		             /** The namespace URI of the new attribute. */ | ||||||
|                            DOMString qualifiedName,   |                            const DOMString qualifiedName,   | ||||||
| 			     /** The qualified name of the attribute. */ | 			     /** The qualified name of the attribute. */ | ||||||
|                            DOMString value  |                            const DOMString value  | ||||||
| 			     /** The new value for the attribute. */ | 			     /** The new value for the attribute. */ | ||||||
|                           ); |                           ); | ||||||
|  |  | ||||||
| @@ -1376,9 +1380,9 @@ EXPORT_SPEC int | |||||||
| ixmlElement_removeAttributeNS(IXML_Element* element,         | ixmlElement_removeAttributeNS(IXML_Element* element,         | ||||||
| 		                /** The {\bf Element} from which to remove the  | 		                /** The {\bf Element} from which to remove the  | ||||||
| 				    the attribute. */ | 				    the attribute. */ | ||||||
|                               DOMString namespaceURI,   |                               const DOMString namespaceURI,   | ||||||
| 			        /** The namespace URI of the attribute. */ | 			        /** The namespace URI of the attribute. */ | ||||||
|                               DOMString localName       |                               const DOMString localName       | ||||||
| 			        /** The local name of the attribute.*/ | 			        /** The local name of the attribute.*/ | ||||||
|                              ); |                              ); | ||||||
|  |  | ||||||
| @@ -1391,9 +1395,9 @@ EXPORT_SPEC IXML_Attr* | |||||||
| ixmlElement_getAttributeNodeNS(IXML_Element* element,         | ixmlElement_getAttributeNodeNS(IXML_Element* element,         | ||||||
| 		                 /** The {\bf Element} from which to get the  | 		                 /** The {\bf Element} from which to get the  | ||||||
| 				     attribute. */ | 				     attribute. */ | ||||||
|                                DOMString namespaceURI,   |                                const DOMString namespaceURI,   | ||||||
| 			         /** The namespace URI of the attribute. */ | 			         /** The namespace URI of the attribute. */ | ||||||
|                                DOMString localName       |                                const DOMString localName       | ||||||
| 			         /** The local name of the attribute. */ | 			         /** The local name of the attribute. */ | ||||||
|                               ); |                               ); | ||||||
|  |  | ||||||
| @@ -1437,10 +1441,10 @@ EXPORT_SPEC IXML_NodeList* | |||||||
| ixmlElement_getElementsByTagNameNS(IXML_Element* element,         | ixmlElement_getElementsByTagNameNS(IXML_Element* element,         | ||||||
| 		                     /** The {\bf Element} from which to start  | 		                     /** The {\bf Element} from which to start  | ||||||
| 				         the search. */ | 				         the search. */ | ||||||
|                                    DOMString namespaceURI,   |                                    const DOMString namespaceURI, | ||||||
| 				     /** The namespace URI of the {\bf  | 				     /** The namespace URI of the {\bf  | ||||||
| 				         Element}s to find. */ | 				         Element}s to find. */ | ||||||
|                                    DOMString localName       |                                    const DOMString localName       | ||||||
| 				     /** The local name of the {\bf Element}s  | 				     /** The local name of the {\bf Element}s  | ||||||
| 				         to find. */ | 				         to find. */ | ||||||
|                                   ); |                                   ); | ||||||
| @@ -1457,7 +1461,7 @@ EXPORT_SPEC BOOL | |||||||
| ixmlElement_hasAttribute(IXML_Element* element,  | ixmlElement_hasAttribute(IXML_Element* element,  | ||||||
| 		           /** The {\bf Element} on which to check for an  | 		           /** The {\bf Element} on which to check for an  | ||||||
| 			       attribute. */ | 			       attribute. */ | ||||||
|                          DOMString name     |                          const DOMString name     | ||||||
| 			   /** The name of the attribute for which to check. */ | 			   /** The name of the attribute for which to check. */ | ||||||
|                         ); |                         ); | ||||||
|  |  | ||||||
| @@ -1473,9 +1477,9 @@ EXPORT_SPEC BOOL | |||||||
| ixmlElement_hasAttributeNS(IXML_Element* element,        | ixmlElement_hasAttributeNS(IXML_Element* element,        | ||||||
| 		             /** The {\bf Element} on which to check for the  | 		             /** The {\bf Element} on which to check for the  | ||||||
| 			         attribute. */ | 			         attribute. */ | ||||||
|                            DOMString namespaceURI,  |                            const DOMString namespaceURI,  | ||||||
| 			     /** The namespace URI of the attribute. */ | 			     /** The namespace URI of the attribute. */ | ||||||
|                            DOMString localName      |                            const DOMString localName      | ||||||
| 			     /** The local name of the attribute. */ | 			     /** The local name of the attribute. */ | ||||||
|                           ); |                           ); | ||||||
|  |  | ||||||
| @@ -1525,7 +1529,7 @@ ixmlNamedNodeMap_getLength(IXML_NamedNodeMap *nnMap | |||||||
| EXPORT_SPEC IXML_Node*    | EXPORT_SPEC IXML_Node*    | ||||||
| ixmlNamedNodeMap_getNamedItem(IXML_NamedNodeMap *nnMap,  | ixmlNamedNodeMap_getNamedItem(IXML_NamedNodeMap *nnMap,  | ||||||
| 		                /** The {\bf NamedNodeMap} to search. */ | 		                /** The {\bf NamedNodeMap} to search. */ | ||||||
|                               DOMString name        |                               const DOMString name        | ||||||
| 			        /** The name of the {\bf Node} to find. */ | 			        /** The name of the {\bf Node} to find. */ | ||||||
|                              ); |                              ); | ||||||
|  |  | ||||||
| @@ -1556,7 +1560,7 @@ EXPORT_SPEC IXML_Node* | |||||||
| ixmlNamedNodeMap_removeNamedItem(IXML_NamedNodeMap *nnMap,   | ixmlNamedNodeMap_removeNamedItem(IXML_NamedNodeMap *nnMap,   | ||||||
| 		                   /** The {\bf NamedNodeMap} from which to  | 		                   /** The {\bf NamedNodeMap} from which to  | ||||||
| 				       remove the item. */ | 				       remove the item. */ | ||||||
|                                  DOMString name         |                                  const DOMString name         | ||||||
| 				   /** The name of the item to remove. */ | 				   /** The name of the item to remove. */ | ||||||
|                                 ); |                                 ); | ||||||
|  |  | ||||||
| @@ -1588,10 +1592,10 @@ EXPORT_SPEC IXML_Node* | |||||||
| ixmlNamedNodeMap_getNamedItemNS(IXML_NamedNodeMap *nnMap,     | ixmlNamedNodeMap_getNamedItemNS(IXML_NamedNodeMap *nnMap,     | ||||||
| 		                  /** The {\bf NamedNodeMap} from which to  | 		                  /** The {\bf NamedNodeMap} from which to  | ||||||
| 				      remove the {\bf Node}. */ | 				      remove the {\bf Node}. */ | ||||||
|                                 DOMString *namespaceURI, |                                 const DOMString *namespaceURI, | ||||||
| 				  /** The namespace URI of the {\bf Node} to  | 				  /** The namespace URI of the {\bf Node} to  | ||||||
|                                       remove. */ |                                       remove. */ | ||||||
|                                 DOMString localName      |                                 const DOMString localName      | ||||||
| 				  /** The local name of the {\bf Node} to  | 				  /** The local name of the {\bf Node} to  | ||||||
| 				      remove. */ | 				      remove. */ | ||||||
|                                ); |                                ); | ||||||
| @@ -1623,10 +1627,10 @@ EXPORT_SPEC IXML_Node* | |||||||
| ixmlNamedNodeMap_removeNamedItemNS(IXML_NamedNodeMap *nnMap,     | ixmlNamedNodeMap_removeNamedItemNS(IXML_NamedNodeMap *nnMap,     | ||||||
| 		                     /** The {\bf NamedNodeMap} from which to  | 		                     /** The {\bf NamedNodeMap} from which to  | ||||||
| 				         remove the {\bf Node}. */ | 				         remove the {\bf Node}. */ | ||||||
|                                    DOMString namespaceURI,  |                                    const DOMString namespaceURI,  | ||||||
| 				     /** The namespace URI of the {\bf Node}  | 				     /** The namespace URI of the {\bf Node}  | ||||||
| 				         to remove. */ | 				         to remove. */ | ||||||
|                                    DOMString localName      |                                    const DOMString localName      | ||||||
| 				     /** The local name of the {\bf Node} to  | 				     /** The local name of the {\bf Node} to  | ||||||
| 				         remove. */ | 				         remove. */ | ||||||
|                                   ); |                                   ); | ||||||
| @@ -1815,7 +1819,7 @@ ixmlRelaxParser(char errorChar); | |||||||
|    *                      {\tt NULL} on an error.  |    *                      {\tt NULL} on an error.  | ||||||
|    */ |    */ | ||||||
| EXPORT_SPEC IXML_Document* | EXPORT_SPEC IXML_Document* | ||||||
| ixmlParseBuffer(char *buffer  | ixmlParseBuffer(const char *buffer  | ||||||
| 		  /** The buffer that contains the XML text to convert to a  | 		  /** The buffer that contains the XML text to convert to a  | ||||||
| 		      {\bf Document}. */ | 		      {\bf Document}. */ | ||||||
|                ); |                ); | ||||||
| @@ -1838,7 +1842,7 @@ ixmlParseBuffer(char *buffer | |||||||
|    */ |    */ | ||||||
|  |  | ||||||
| EXPORT_SPEC int | EXPORT_SPEC int | ||||||
| ixmlParseBufferEx(char *buffer,  | ixmlParseBufferEx(const char *buffer,  | ||||||
| 		    /** The buffer that contains the XML text to convert to a  | 		    /** The buffer that contains the XML text to convert to a  | ||||||
| 		        {\bf Document}. */ | 		        {\bf Document}. */ | ||||||
|                   IXML_Document** doc  |                   IXML_Document** doc  | ||||||
| @@ -1853,7 +1857,7 @@ ixmlParseBufferEx(char *buffer, | |||||||
|    */ |    */ | ||||||
|  |  | ||||||
| EXPORT_SPEC IXML_Document* | EXPORT_SPEC IXML_Document* | ||||||
| ixmlLoadDocument(char* xmlFile       | ixmlLoadDocument(const char* xmlFile       | ||||||
| 		   /** The filename of the XML text to convert to a {\bf  | 		   /** The filename of the XML text to convert to a {\bf  | ||||||
| 		       Document}. */ | 		       Document}. */ | ||||||
|                 ); |                 ); | ||||||
| @@ -1875,7 +1879,7 @@ ixmlLoadDocument(char* xmlFile | |||||||
|    */ |    */ | ||||||
|  |  | ||||||
| EXPORT_SPEC int  | EXPORT_SPEC int  | ||||||
| ixmlLoadDocumentEx(char* xmlFile,       | ixmlLoadDocumentEx(const char* xmlFile,       | ||||||
| 		     /** The filename of the XML text to convert to a {\bf  | 		     /** The filename of the XML text to convert to a {\bf  | ||||||
| 		         Document}. */ | 		         Document}. */ | ||||||
|                    IXML_Document** doc    |                    IXML_Document** doc    | ||||||
|   | |||||||
| @@ -373,7 +373,7 @@ ixmlDocument_createTextNode( IN IXML_Document * doc, | |||||||
| ================================================================*/ | ================================================================*/ | ||||||
| int | int | ||||||
| ixmlDocument_createAttributeEx( IN IXML_Document * doc, | ixmlDocument_createAttributeEx( IN IXML_Document * doc, | ||||||
|                                 IN char *name, |                                 IN const char *name, | ||||||
|                                 OUT IXML_Attr ** rtAttr ) |                                 OUT IXML_Attr ** rtAttr ) | ||||||
| { | { | ||||||
|     IXML_Attr *attrNode = NULL; |     IXML_Attr *attrNode = NULL; | ||||||
| @@ -427,7 +427,7 @@ ixmlDocument_createAttributeEx( IN IXML_Document * doc, | |||||||
| ================================================================*/ | ================================================================*/ | ||||||
| IXML_Attr * | IXML_Attr * | ||||||
| ixmlDocument_createAttribute( IN IXML_Document * doc, | ixmlDocument_createAttribute( IN IXML_Document * doc, | ||||||
|                               IN char *name ) |                               IN const char *name ) | ||||||
| { | { | ||||||
|     IXML_Attr *attrNode = NULL; |     IXML_Attr *attrNode = NULL; | ||||||
|  |  | ||||||
| @@ -451,8 +451,8 @@ ixmlDocument_createAttribute( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlDocument_createAttributeNSEx( IN IXML_Document * doc, | ixmlDocument_createAttributeNSEx( IN IXML_Document * doc, | ||||||
|                                   IN DOMString namespaceURI, |                                   IN const DOMString namespaceURI, | ||||||
|                                   IN DOMString qualifiedName, |                                   IN const DOMString qualifiedName, | ||||||
|                                   OUT IXML_Attr ** rtAttr ) |                                   OUT IXML_Attr ** rtAttr ) | ||||||
| { | { | ||||||
|     IXML_Attr *attrNode = NULL; |     IXML_Attr *attrNode = NULL; | ||||||
| @@ -507,8 +507,8 @@ ixmlDocument_createAttributeNSEx( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Attr * | IXML_Attr * | ||||||
| ixmlDocument_createAttributeNS( IN IXML_Document * doc, | ixmlDocument_createAttributeNS( IN IXML_Document * doc, | ||||||
|                                 IN DOMString namespaceURI, |                                 IN const DOMString namespaceURI, | ||||||
|                                 IN DOMString qualifiedName ) |                                 IN const DOMString qualifiedName ) | ||||||
| { | { | ||||||
|     IXML_Attr *attrNode = NULL; |     IXML_Attr *attrNode = NULL; | ||||||
|  |  | ||||||
| @@ -531,7 +531,7 @@ ixmlDocument_createAttributeNS( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlDocument_createCDATASectionEx( IN IXML_Document * doc, | ixmlDocument_createCDATASectionEx( IN IXML_Document * doc, | ||||||
|                                    IN DOMString data, |                                    IN const DOMString data, | ||||||
|                                    OUT IXML_CDATASection ** rtCD ) |                                    OUT IXML_CDATASection ** rtCD ) | ||||||
| { | { | ||||||
|     int errCode = IXML_SUCCESS; |     int errCode = IXML_SUCCESS; | ||||||
| @@ -588,7 +588,7 @@ ixmlDocument_createCDATASectionEx( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_CDATASection * | IXML_CDATASection * | ||||||
| ixmlDocument_createCDATASection( IN IXML_Document * doc, | ixmlDocument_createCDATASection( IN IXML_Document * doc, | ||||||
|                                  IN DOMString data ) |                                  IN const DOMString data ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     IXML_CDATASection *cDSectionNode = NULL; |     IXML_CDATASection *cDSectionNode = NULL; | ||||||
| @@ -613,8 +613,8 @@ ixmlDocument_createCDATASection( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlDocument_createElementNSEx( IN IXML_Document * doc, | ixmlDocument_createElementNSEx( IN IXML_Document * doc, | ||||||
|                                 IN DOMString namespaceURI, |                                 IN const DOMString namespaceURI, | ||||||
|                                 IN DOMString qualifiedName, |                                 IN const DOMString qualifiedName, | ||||||
|                                 OUT IXML_Element ** rtElement ) |                                 OUT IXML_Element ** rtElement ) | ||||||
| { | { | ||||||
|  |  | ||||||
| @@ -673,8 +673,8 @@ ixmlDocument_createElementNSEx( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Element * | IXML_Element * | ||||||
| ixmlDocument_createElementNS( IN IXML_Document * doc, | ixmlDocument_createElementNS( IN IXML_Document * doc, | ||||||
|                               IN DOMString namespaceURI, |                               IN const DOMString namespaceURI, | ||||||
|                               IN DOMString qualifiedName ) |                               IN const DOMString qualifiedName ) | ||||||
| { | { | ||||||
|     IXML_Element *newElement = NULL; |     IXML_Element *newElement = NULL; | ||||||
|  |  | ||||||
| @@ -698,7 +698,7 @@ ixmlDocument_createElementNS( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_NodeList * | IXML_NodeList * | ||||||
| ixmlDocument_getElementsByTagName( IN IXML_Document * doc, | ixmlDocument_getElementsByTagName( IN IXML_Document * doc, | ||||||
|                                    IN char *tagName ) |                                    IN const char *tagName ) | ||||||
| { | { | ||||||
|     IXML_NodeList *returnNodeList = NULL; |     IXML_NodeList *returnNodeList = NULL; | ||||||
|  |  | ||||||
| @@ -728,8 +728,8 @@ ixmlDocument_getElementsByTagName( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_NodeList * | IXML_NodeList * | ||||||
| ixmlDocument_getElementsByTagNameNS( IN IXML_Document * doc, | ixmlDocument_getElementsByTagNameNS( IN IXML_Document * doc, | ||||||
|                                      IN DOMString namespaceURI, |                                      IN const DOMString namespaceURI, | ||||||
|                                      IN DOMString localName ) |                                      IN const DOMString localName ) | ||||||
| { | { | ||||||
|     IXML_NodeList *returnNodeList = NULL; |     IXML_NodeList *returnNodeList = NULL; | ||||||
|  |  | ||||||
| @@ -756,7 +756,7 @@ ixmlDocument_getElementsByTagNameNS( IN IXML_Document * doc, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Element * | IXML_Element * | ||||||
| ixmlDocument_getElementById( IN IXML_Document * doc, | ixmlDocument_getElementById( IN IXML_Document * doc, | ||||||
|                              IN DOMString tagName ) |                              IN const DOMString tagName ) | ||||||
| { | { | ||||||
|     IXML_Element *rtElement = NULL; |     IXML_Element *rtElement = NULL; | ||||||
|     IXML_Node *nodeptr = ( IXML_Node * ) doc; |     IXML_Node *nodeptr = ( IXML_Node * ) doc; | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ ixmlElement_getTagName( IN IXML_Element * element ) | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlElement_setTagName( IN IXML_Element * element, | ixmlElement_setTagName( IN IXML_Element * element, | ||||||
|                         IN char *tagName ) |                         IN const char *tagName ) | ||||||
| { | { | ||||||
|     int rc = IXML_SUCCESS; |     int rc = IXML_SUCCESS; | ||||||
|  |  | ||||||
| @@ -104,9 +104,9 @@ ixmlElement_setTagName( IN IXML_Element * element, | |||||||
| *       does not have a specified value. | *       does not have a specified value. | ||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| DOMString | const DOMString | ||||||
| ixmlElement_getAttribute( IN IXML_Element * element, | ixmlElement_getAttribute( IN IXML_Element * element, | ||||||
|                           IN DOMString name ) |                           IN const DOMString name ) | ||||||
| { | { | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
|  |  | ||||||
| @@ -142,8 +142,8 @@ ixmlElement_getAttribute( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlElement_setAttribute( IN IXML_Element * element, | ixmlElement_setAttribute( IN IXML_Element * element, | ||||||
|                           IN char *name, |                           IN const char *name, | ||||||
|                           IN char *value ) |                           IN const char *value ) | ||||||
| { | { | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
|     IXML_Attr *newAttrNode; |     IXML_Attr *newAttrNode; | ||||||
| @@ -221,7 +221,7 @@ ixmlElement_setAttribute( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlElement_removeAttribute( IN IXML_Element * element, | ixmlElement_removeAttribute( IN IXML_Element * element, | ||||||
|                              IN char *name ) |                              IN const char *name ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
| @@ -262,7 +262,7 @@ ixmlElement_removeAttribute( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Attr * | IXML_Attr * | ||||||
| ixmlElement_getAttributeNode( IN IXML_Element * element, | ixmlElement_getAttributeNode( IN IXML_Element * element, | ||||||
|                               IN char *name ) |                               IN const char *name ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
| @@ -483,7 +483,7 @@ ixmlElement_removeAttributeNode( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_NodeList * | IXML_NodeList * | ||||||
| ixmlElement_getElementsByTagName( IN IXML_Element * element, | ixmlElement_getElementsByTagName( IN IXML_Element * element, | ||||||
|                                   IN char *tagName ) |                                   IN const char *tagName ) | ||||||
| { | { | ||||||
|     IXML_NodeList *returnNodeList = NULL; |     IXML_NodeList *returnNodeList = NULL; | ||||||
|  |  | ||||||
| @@ -508,10 +508,10 @@ ixmlElement_getElementsByTagName( IN IXML_Element * element, | |||||||
| *       not have the specified value. | *       not have the specified value. | ||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| DOMString | const DOMString | ||||||
| ixmlElement_getAttributeNS( IN IXML_Element * element, | ixmlElement_getAttributeNS( IN IXML_Element * element, | ||||||
|                             IN DOMString namespaceURI, |                             IN const DOMString namespaceURI, | ||||||
|                             IN DOMString localName ) |                             IN const DOMString localName ) | ||||||
| { | { | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
|  |  | ||||||
| @@ -553,9 +553,9 @@ ixmlElement_getAttributeNS( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlElement_setAttributeNS( IN IXML_Element * element, | ixmlElement_setAttributeNS( IN IXML_Element * element, | ||||||
|                             IN DOMString namespaceURI, |                             IN const DOMString namespaceURI, | ||||||
|                             IN DOMString qualifiedName, |                             IN const DOMString qualifiedName, | ||||||
|                             IN DOMString value ) |                             IN const DOMString value ) | ||||||
| { | { | ||||||
|     IXML_Node *attrNode = NULL; |     IXML_Node *attrNode = NULL; | ||||||
|     IXML_Node newAttrNode; |     IXML_Node newAttrNode; | ||||||
| @@ -672,8 +672,8 @@ ixmlElement_setAttributeNS( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlElement_removeAttributeNS( IN IXML_Element * element, | ixmlElement_removeAttributeNS( IN IXML_Element * element, | ||||||
|                                IN DOMString namespaceURI, |                                IN const DOMString namespaceURI, | ||||||
|                                IN DOMString localName ) |                                IN const DOMString localName ) | ||||||
| { | { | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
|  |  | ||||||
| @@ -719,8 +719,8 @@ ixmlElement_removeAttributeNS( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Attr * | IXML_Attr * | ||||||
| ixmlElement_getAttributeNodeNS( IN IXML_Element * element, | ixmlElement_getAttributeNodeNS( IN IXML_Element * element, | ||||||
|                                 IN DOMString namespaceURI, |                                 IN const DOMString namespaceURI, | ||||||
|                                 IN DOMString localName ) |                                 IN const DOMString localName ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
| @@ -861,8 +861,8 @@ ixmlElement_setAttributeNodeNS( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_NodeList * | IXML_NodeList * | ||||||
| ixmlElement_getElementsByTagNameNS( IN IXML_Element * element, | ixmlElement_getElementsByTagNameNS( IN IXML_Element * element, | ||||||
|                                     IN DOMString namespaceURI, |                                     IN const DOMString namespaceURI, | ||||||
|                                     IN DOMString localName ) |                                     IN const DOMString localName ) | ||||||
| { | { | ||||||
|     IXML_Node *node = ( IXML_Node * ) element; |     IXML_Node *node = ( IXML_Node * ) element; | ||||||
|     IXML_NodeList *nodeList = NULL; |     IXML_NodeList *nodeList = NULL; | ||||||
| @@ -892,7 +892,7 @@ ixmlElement_getElementsByTagNameNS( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| BOOL | BOOL | ||||||
| ixmlElement_hasAttribute( IN IXML_Element * element, | ixmlElement_hasAttribute( IN IXML_Element * element, | ||||||
|                           IN DOMString name ) |                           IN const DOMString name ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
| @@ -930,8 +930,8 @@ ixmlElement_hasAttribute( IN IXML_Element * element, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| BOOL | BOOL | ||||||
| ixmlElement_hasAttributeNS( IN IXML_Element * element, | ixmlElement_hasAttributeNS( IN IXML_Element * element, | ||||||
|                             IN DOMString namespaceURI, |                             IN const DOMString namespaceURI, | ||||||
|                             IN DOMString localName ) |                             IN const DOMString localName ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     IXML_Node *attrNode; |     IXML_Node *attrNode; | ||||||
|   | |||||||
| @@ -88,8 +88,8 @@ typedef struct _Parser | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int     Parser_LoadDocument( IXML_Document **retDoc, char * xmlFile, BOOL file); | int     Parser_LoadDocument( IXML_Document **retDoc, const char * xmlFile, BOOL file); | ||||||
| BOOL    Parser_isValidXmlName( DOMString name); | BOOL    Parser_isValidXmlName( const DOMString name); | ||||||
| int     Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr); | int     Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr); | ||||||
| void    Parser_freeNodeContent( IXML_Node *IXML_Nodeptr); | void    Parser_freeNodeContent( IXML_Node *IXML_Nodeptr); | ||||||
|  |  | ||||||
| @@ -98,7 +98,7 @@ void    Parser_setErrorChar( char c ); | |||||||
| void    ixmlAttr_free(IXML_Attr *attrNode); | void    ixmlAttr_free(IXML_Attr *attrNode); | ||||||
| void    ixmlAttr_init(IXML_Attr *attrNode); | void    ixmlAttr_init(IXML_Attr *attrNode); | ||||||
|  |  | ||||||
| int     ixmlElement_setTagName(IXML_Element *element, char *tagName); | int     ixmlElement_setTagName(IXML_Element *element, const char *tagName); | ||||||
|  |  | ||||||
| void    ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap); | void    ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap); | ||||||
| int     ixmlNamedNodeMap_addToNamedNodeMap(IXML_NamedNodeMap **nnMap, IXML_Node *add); | int     ixmlNamedNodeMap_addToNamedNodeMap(IXML_NamedNodeMap **nnMap, IXML_Node *add); | ||||||
| @@ -106,12 +106,12 @@ int     ixmlNamedNodeMap_addToNamedNodeMap(IXML_NamedNodeMap **nnMap, IXML_Node | |||||||
| void    ixmlNode_init(IXML_Node *IXML_Nodeptr); | void    ixmlNode_init(IXML_Node *IXML_Nodeptr); | ||||||
| BOOL    ixmlNode_compare(IXML_Node *srcIXML_Node, IXML_Node *destIXML_Node); | BOOL    ixmlNode_compare(IXML_Node *srcIXML_Node, IXML_Node *destIXML_Node); | ||||||
|  |  | ||||||
| void    ixmlNode_getElementsByTagName( IXML_Node *n, char *tagname, IXML_NodeList **list); | void    ixmlNode_getElementsByTagName( IXML_Node *n, const char *tagname, IXML_NodeList **list); | ||||||
| void    ixmlNode_getElementsByTagNameNS( IXML_Node *IXML_Node, char *namespaceURI, | void    ixmlNode_getElementsByTagNameNS( IXML_Node *IXML_Node, const char *namespaceURI, | ||||||
|                 char *localName, IXML_NodeList **list); |                 const char *localName, IXML_NodeList **list); | ||||||
|  |  | ||||||
| int     ixmlNode_setNodeProperties(IXML_Node* node, IXML_Node *src); | int     ixmlNode_setNodeProperties(IXML_Node* node, IXML_Node *src); | ||||||
| int     ixmlNode_setNodeName( IXML_Node* node, DOMString qualifiedName); | int     ixmlNode_setNodeName( IXML_Node* node, const DOMString qualifiedName); | ||||||
|  |  | ||||||
| void    ixmlNodeList_init(IXML_NodeList *nList); | void    ixmlNodeList_init(IXML_NodeList *nList); | ||||||
| int     ixmlNodeList_addToNodeList(IXML_NodeList **nList, IXML_Node *add); | int     ixmlNodeList_addToNodeList(IXML_NodeList **nList, IXML_Node *add); | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| static void | static void | ||||||
| copy_with_escape( INOUT ixml_membuf * buf, | copy_with_escape( INOUT ixml_membuf * buf, | ||||||
|                   IN char *p ) |                   IN const char *p ) | ||||||
| { | { | ||||||
|     int i; |     int i; | ||||||
|     int plen; |     int plen; | ||||||
| @@ -87,13 +87,13 @@ void | |||||||
| ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr, | ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr, | ||||||
|                            IN ixml_membuf * buf ) |                            IN ixml_membuf * buf ) | ||||||
| { | { | ||||||
|     char *nodeName = NULL; |     const char *nodeName = NULL; | ||||||
|     char *nodeValue = NULL; |     const char *nodeValue = NULL; | ||||||
|     IXML_Node *child = NULL, |     IXML_Node *child = NULL, | ||||||
|      *sibling = NULL; |      *sibling = NULL; | ||||||
|  |  | ||||||
|     if( nodeptr != NULL ) { |     if( nodeptr != NULL ) { | ||||||
|         nodeName = ( char * )ixmlNode_getNodeName( nodeptr ); |         nodeName = ( const char * )ixmlNode_getNodeName( nodeptr ); | ||||||
|         nodeValue = ixmlNode_getNodeValue( nodeptr ); |         nodeValue = ixmlNode_getNodeValue( nodeptr ); | ||||||
|  |  | ||||||
|         switch ( ixmlNode_getNodeType( nodeptr ) ) { |         switch ( ixmlNode_getNodeType( nodeptr ) ) { | ||||||
| @@ -103,14 +103,16 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr, | |||||||
|                 break; |                 break; | ||||||
|  |  | ||||||
|             case eCDATA_SECTION_NODE: |             case eCDATA_SECTION_NODE: | ||||||
|  |                 ixml_membuf_append_str( buf, "<![CDATA[" ); | ||||||
|                 ixml_membuf_append_str( buf, nodeValue ); |                 ixml_membuf_append_str( buf, nodeValue ); | ||||||
|  |                 ixml_membuf_append_str( buf, "]]>" ); | ||||||
|                 break; |                 break; | ||||||
|  |  | ||||||
|             case ePROCESSING_INSTRUCTION_NODE: |             case ePROCESSING_INSTRUCTION_NODE: | ||||||
|                 ixml_membuf_append_str( buf, "<?" ); |                 ixml_membuf_append_str( buf, "<?" ); | ||||||
|                 ixml_membuf_append_str( buf, nodeName ); |                 ixml_membuf_append_str( buf, nodeName ); | ||||||
|                 ixml_membuf_append_str( buf, " " ); |                 ixml_membuf_append_str( buf, " " ); | ||||||
|                 ixml_membuf_append_str( buf, nodeValue ); |                 copy_with_escape( buf, nodeValue ); | ||||||
|                 ixml_membuf_append_str( buf, "?>\n" ); |                 ixml_membuf_append_str( buf, "?>\n" ); | ||||||
|                 break; |                 break; | ||||||
|  |  | ||||||
| @@ -122,10 +124,9 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr, | |||||||
|             case eATTRIBUTE_NODE: |             case eATTRIBUTE_NODE: | ||||||
|                 ixml_membuf_append_str( buf, nodeName ); |                 ixml_membuf_append_str( buf, nodeName ); | ||||||
|                 ixml_membuf_append_str( buf, "=\"" ); |                 ixml_membuf_append_str( buf, "=\"" ); | ||||||
|                 if( nodeValue != NULL ) { |                 copy_with_escape( buf, nodeValue ); | ||||||
|                     ixml_membuf_append_str( buf, nodeValue ); |  | ||||||
|                 } |  | ||||||
|                 ixml_membuf_append_str( buf, "\"" ); |                 ixml_membuf_append_str( buf, "\"" ); | ||||||
|  |  | ||||||
|                 if( nodeptr->nextSibling != NULL ) { |                 if( nodeptr->nextSibling != NULL ) { | ||||||
|                     ixml_membuf_append_str( buf, " " ); |                     ixml_membuf_append_str( buf, " " ); | ||||||
|                     ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf ); |                     ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf ); | ||||||
| @@ -145,7 +146,7 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr, | |||||||
|                 if( ( child != NULL ) |                 if( ( child != NULL ) | ||||||
|                     && ( ixmlNode_getNodeType( child ) == |                     && ( ixmlNode_getNodeType( child ) == | ||||||
|                          eELEMENT_NODE ) ) { |                          eELEMENT_NODE ) ) { | ||||||
|                     ixml_membuf_append_str( buf, ">\n" ); |                     ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|                 } else { |                 } else { | ||||||
|                     ixml_membuf_append_str( buf, ">" ); |                     ixml_membuf_append_str( buf, ">" ); | ||||||
|                 } |                 } | ||||||
| @@ -163,7 +164,7 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr, | |||||||
|                     && ixmlNode_getNodeType( sibling ) == eTEXT_NODE ) { |                     && ixmlNode_getNodeType( sibling ) == eTEXT_NODE ) { | ||||||
|                     ixml_membuf_append_str( buf, ">" ); |                     ixml_membuf_append_str( buf, ">" ); | ||||||
|                 } else { |                 } else { | ||||||
|                     ixml_membuf_append_str( buf, ">\n" ); |                     ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|                 } |                 } | ||||||
|                 ixmlPrintDomTreeRecursive( ixmlNode_getNextSibling |                 ixmlPrintDomTreeRecursive( ixmlNode_getNextSibling | ||||||
|                                            ( nodeptr ), buf ); |                                            ( nodeptr ), buf ); | ||||||
| @@ -187,15 +188,15 @@ void | |||||||
| ixmlPrintDomTree( IN IXML_Node * nodeptr, | ixmlPrintDomTree( IN IXML_Node * nodeptr, | ||||||
|                   IN ixml_membuf * buf ) |                   IN ixml_membuf * buf ) | ||||||
| { | { | ||||||
|     char *nodeName = NULL; |     const char *nodeName = NULL; | ||||||
|     char *nodeValue = NULL; |     const char *nodeValue = NULL; | ||||||
|     IXML_Node *child = NULL; |     IXML_Node *child = NULL; | ||||||
|  |  | ||||||
|     if( ( nodeptr == NULL ) || ( buf == NULL ) ) { |     if( ( nodeptr == NULL ) || ( buf == NULL ) ) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     nodeName = ( char * )ixmlNode_getNodeName( nodeptr ); |     nodeName = ( const char * )ixmlNode_getNodeName( nodeptr ); | ||||||
|     nodeValue = ixmlNode_getNodeValue( nodeptr ); |     nodeValue = ixmlNode_getNodeValue( nodeptr ); | ||||||
|  |  | ||||||
|     switch ( ixmlNode_getNodeType( nodeptr ) ) { |     switch ( ixmlNode_getNodeType( nodeptr ) ) { | ||||||
| @@ -210,7 +211,7 @@ ixmlPrintDomTree( IN IXML_Node * nodeptr, | |||||||
|         case eATTRIBUTE_NODE: |         case eATTRIBUTE_NODE: | ||||||
|             ixml_membuf_append_str( buf, nodeName ); |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|             ixml_membuf_append_str( buf, "=\"" ); |             ixml_membuf_append_str( buf, "=\"" ); | ||||||
|             ixml_membuf_append_str( buf, nodeValue ); |             copy_with_escape( buf, nodeValue ); | ||||||
|             ixml_membuf_append_str( buf, "\"" ); |             ixml_membuf_append_str( buf, "\"" ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
| @@ -226,7 +227,7 @@ ixmlPrintDomTree( IN IXML_Node * nodeptr, | |||||||
|             child = ixmlNode_getFirstChild( nodeptr ); |             child = ixmlNode_getFirstChild( nodeptr ); | ||||||
|             if( ( child != NULL ) |             if( ( child != NULL ) | ||||||
|                 && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) { |                 && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) { | ||||||
|                 ixml_membuf_append_str( buf, ">\n" ); |                 ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|             } else { |             } else { | ||||||
|                 ixml_membuf_append_str( buf, ">" ); |                 ixml_membuf_append_str( buf, ">" ); | ||||||
|             } |             } | ||||||
| @@ -238,7 +239,7 @@ ixmlPrintDomTree( IN IXML_Node * nodeptr, | |||||||
|             // Done with children.  Output the end tag. |             // Done with children.  Output the end tag. | ||||||
|             ixml_membuf_append_str( buf, "</" ); |             ixml_membuf_append_str( buf, "</" ); | ||||||
|             ixml_membuf_append_str( buf, nodeName ); |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|             ixml_membuf_append_str( buf, ">\n" ); |             ixml_membuf_append_str( buf, ">\r\n" ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|         default: |         default: | ||||||
| @@ -258,15 +259,15 @@ void | |||||||
| ixmlDomTreetoString( IN IXML_Node * nodeptr, | ixmlDomTreetoString( IN IXML_Node * nodeptr, | ||||||
|                      IN ixml_membuf * buf ) |                      IN ixml_membuf * buf ) | ||||||
| { | { | ||||||
|     char *nodeName = NULL; |     const char *nodeName = NULL; | ||||||
|     char *nodeValue = NULL; |     const char *nodeValue = NULL; | ||||||
|     IXML_Node *child = NULL; |     IXML_Node *child = NULL; | ||||||
|  |  | ||||||
|     if( ( nodeptr == NULL ) || ( buf == NULL ) ) { |     if( ( nodeptr == NULL ) || ( buf == NULL ) ) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     nodeName = ( char * )ixmlNode_getNodeName( nodeptr ); |     nodeName = ( const char * )ixmlNode_getNodeName( nodeptr ); | ||||||
|     nodeValue = ixmlNode_getNodeValue( nodeptr ); |     nodeValue = ixmlNode_getNodeValue( nodeptr ); | ||||||
|  |  | ||||||
|     switch ( ixmlNode_getNodeType( nodeptr ) ) { |     switch ( ixmlNode_getNodeType( nodeptr ) ) { | ||||||
| @@ -281,7 +282,7 @@ ixmlDomTreetoString( IN IXML_Node * nodeptr, | |||||||
|         case eATTRIBUTE_NODE: |         case eATTRIBUTE_NODE: | ||||||
|             ixml_membuf_append_str( buf, nodeName ); |             ixml_membuf_append_str( buf, nodeName ); | ||||||
|             ixml_membuf_append_str( buf, "=\"" ); |             ixml_membuf_append_str( buf, "=\"" ); | ||||||
|             ixml_membuf_append_str( buf, nodeValue ); |             copy_with_escape( buf, nodeValue ); | ||||||
|             ixml_membuf_append_str( buf, "\"" ); |             ixml_membuf_append_str( buf, "\"" ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
| @@ -324,7 +325,7 @@ ixmlDomTreetoString( IN IXML_Node * nodeptr, | |||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlLoadDocumentEx( IN char *xmlFile, | ixmlLoadDocumentEx( IN const char *xmlFile, | ||||||
|                     IXML_Document ** doc ) |                     IXML_Document ** doc ) | ||||||
| { | { | ||||||
|  |  | ||||||
| @@ -342,7 +343,7 @@ ixmlLoadDocumentEx( IN char *xmlFile, | |||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Document * | IXML_Document * | ||||||
| ixmlLoadDocument( IN char *xmlFile ) | ixmlLoadDocument( IN const char *xmlFile ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     IXML_Document *doc = NULL; |     IXML_Document *doc = NULL; | ||||||
| @@ -371,7 +372,7 @@ ixmlPrintDocument(IXML_Document *doc) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     ixml_membuf_init( buf ); |     ixml_membuf_init( buf ); | ||||||
|     ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\n" ); |     ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" ); | ||||||
|     ixmlPrintDomTree( rootNode, buf ); |     ixmlPrintDomTree( rootNode, buf ); | ||||||
|     return buf->buf; |     return buf->buf; | ||||||
|  |  | ||||||
| @@ -420,7 +421,7 @@ ixmlDocumenttoString(IXML_Document *doc) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     ixml_membuf_init( buf ); |     ixml_membuf_init( buf ); | ||||||
|     ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\n" ); |     ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" ); | ||||||
|     ixmlDomTreetoString( rootNode, buf ); |     ixmlDomTreetoString( rootNode, buf ); | ||||||
|     return buf->buf; |     return buf->buf; | ||||||
|  |  | ||||||
| @@ -469,7 +470,7 @@ ixmlRelaxParser(char errorChar) | |||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlParseBufferEx( IN char *buffer, | ixmlParseBufferEx( IN const char *buffer, | ||||||
|                    IXML_Document ** retDoc ) |                    IXML_Document ** retDoc ) | ||||||
| { | { | ||||||
|  |  | ||||||
| @@ -477,7 +478,7 @@ ixmlParseBufferEx( IN char *buffer, | |||||||
|         return IXML_INVALID_PARAMETER; |         return IXML_INVALID_PARAMETER; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if( strlen( buffer ) == 0 ) { |     if( buffer[0] == '\0' ) { | ||||||
|         return IXML_INVALID_PARAMETER; |         return IXML_INVALID_PARAMETER; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -491,7 +492,7 @@ ixmlParseBufferEx( IN char *buffer, | |||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Document * | IXML_Document * | ||||||
| ixmlParseBuffer( IN char *buffer ) | ixmlParseBuffer( IN const char *buffer ) | ||||||
| { | { | ||||||
|     IXML_Document *doc = NULL; |     IXML_Document *doc = NULL; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -232,15 +232,30 @@ static BOOL Parser_ElementPrefixDefined( Parser * myParser, | |||||||
|                                          IXML_Node * newNode, |                                          IXML_Node * newNode, | ||||||
|                                          char **nsURI ); |                                          char **nsURI ); | ||||||
| static int Parser_setElementNamespace( IXML_Element * newElement, | static int Parser_setElementNamespace( IXML_Element * newElement, | ||||||
|                                        char *nsURI ); |                                        const char *nsURI ); | ||||||
| static int Parser_parseDocument( IXML_Document ** retDoc, | static int Parser_parseDocument( IXML_Document ** retDoc, | ||||||
|                                  Parser * domParser ); |                                  Parser * domParser ); | ||||||
| static BOOL Parser_hasDefaultNamespace( Parser * xmlParser, | static BOOL Parser_hasDefaultNamespace( Parser * xmlParser, | ||||||
|                                         IXML_Node * newNode, |                                         IXML_Node * newNode, | ||||||
|                                         char **nsURI ); |                                         char **nsURI ); | ||||||
| static int Parser_getChar( IN char *src, | static int Parser_getChar( IN const char *src, | ||||||
|                            INOUT int *cLen ); |                            INOUT int *cLen ); | ||||||
|  |  | ||||||
|  | /*==============================================================================* | ||||||
|  | *   safe_strdup | ||||||
|  | *       strdup that handles NULL input. | ||||||
|  | *    | ||||||
|  | *===============================================================================*/ | ||||||
|  | static char * | ||||||
|  | safe_strdup(const char *s)  | ||||||
|  | { | ||||||
|  |     assert(s != NULL); | ||||||
|  |     if (s == NULL) { | ||||||
|  |         return strdup(""); | ||||||
|  |     } | ||||||
|  |     return strdup(s); | ||||||
|  | } | ||||||
|  |  | ||||||
| /*==============================================================================* | /*==============================================================================* | ||||||
| *   Parser_isCharInTable | *   Parser_isCharInTable | ||||||
| *       will determine whether character c is in the table of tbl | *       will determine whether character c is in the table of tbl | ||||||
| @@ -312,9 +327,9 @@ Parser_isNameChar( IN int c, | |||||||
| * | * | ||||||
| *===============================================================================*/ | *===============================================================================*/ | ||||||
| BOOL | BOOL | ||||||
| Parser_isValidXmlName( IN DOMString name ) | Parser_isValidXmlName( IN const DOMString name ) | ||||||
| { | { | ||||||
|     char *pstr = NULL; |     const char *pstr = NULL; | ||||||
|     int i = 0, |     int i = 0, | ||||||
|       nameLen = 0; |       nameLen = 0; | ||||||
|  |  | ||||||
| @@ -325,7 +340,7 @@ Parser_isValidXmlName( IN DOMString name ) | |||||||
|     pstr = name; |     pstr = name; | ||||||
|     if( Parser_isNameChar( *pstr, FALSE ) == TRUE ) { |     if( Parser_isNameChar( *pstr, FALSE ) == TRUE ) { | ||||||
|         for( i = 1; i < nameLen; i++ ) { |         for( i = 1; i < nameLen; i++ ) { | ||||||
|             if( Parser_isNameChar( *( pstr + 1 ), TRUE ) == FALSE ) {   //illegal char |             if( Parser_isNameChar( *( pstr + i ), TRUE ) == FALSE ) {   //illegal char | ||||||
|                 return FALSE; |                 return FALSE; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -419,11 +434,11 @@ Parser_intToUTF8( IN int c, | |||||||
| *           | *           | ||||||
| *===============================================================================*/ | *===============================================================================*/ | ||||||
| static int | static int | ||||||
| Parser_UTF8ToInt( IN char *ss, | Parser_UTF8ToInt( IN const char *ss, | ||||||
|                   OUT int *len ) |                   OUT int *len ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     unsigned char *s = ( unsigned char * )ss; |     const unsigned char *s = ( const unsigned char * )ss; | ||||||
|     int c = *s; |     int c = *s; | ||||||
|  |  | ||||||
|     if( c <= 127 ) {            // if c<=127, c is just the character. |     if( c <= 127 ) {            // if c<=127, c is just the character. | ||||||
| @@ -525,14 +540,14 @@ Parser_pushElement( IN Parser * xmlParser, | |||||||
|         memset( pNewStackElement, 0, sizeof( IXML_ElementStack ) ); |         memset( pNewStackElement, 0, sizeof( IXML_ElementStack ) ); | ||||||
|         // the element member includes both prefix and name  |         // the element member includes both prefix and name  | ||||||
|  |  | ||||||
|         pNewStackElement->element = strdup( newElement->nodeName ); |         pNewStackElement->element = safe_strdup( newElement->nodeName ); | ||||||
|         if( pNewStackElement->element == NULL ) { |         if( pNewStackElement->element == NULL ) { | ||||||
|             free( pNewStackElement ); |             free( pNewStackElement ); | ||||||
|             return IXML_INSUFFICIENT_MEMORY; |             return IXML_INSUFFICIENT_MEMORY; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if( newElement->prefix != 0 ) { |         if( newElement->prefix != 0 ) { | ||||||
|             pNewStackElement->prefix = strdup( newElement->prefix ); |             pNewStackElement->prefix = safe_strdup( newElement->prefix ); | ||||||
|             if( pNewStackElement->prefix == NULL ) { |             if( pNewStackElement->prefix == NULL ) { | ||||||
|                 Parser_freeElementStackItem( pNewStackElement ); |                 Parser_freeElementStackItem( pNewStackElement ); | ||||||
|                 free( pNewStackElement ); |                 free( pNewStackElement ); | ||||||
| @@ -542,7 +557,7 @@ Parser_pushElement( IN Parser * xmlParser, | |||||||
|  |  | ||||||
|         if( newElement->namespaceURI != 0 ) { |         if( newElement->namespaceURI != 0 ) { | ||||||
|             pNewStackElement->namespaceUri = |             pNewStackElement->namespaceUri = | ||||||
|                 strdup( newElement->namespaceURI ); |                 safe_strdup( newElement->namespaceURI ); | ||||||
|             if( pNewStackElement->namespaceUri == NULL ) { |             if( pNewStackElement->namespaceUri == NULL ) { | ||||||
|                 Parser_freeElementStackItem( pNewStackElement ); |                 Parser_freeElementStackItem( pNewStackElement ); | ||||||
|                 free( pNewStackElement ); |                 free( pNewStackElement ); | ||||||
| @@ -602,7 +617,7 @@ Parser_popElement( IN Parser * xmlParser ) | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| static int | static int | ||||||
| Parser_readFileOrBuffer( IN Parser * xmlParser, | Parser_readFileOrBuffer( IN Parser * xmlParser, | ||||||
|                          IN char *xmlFileName, |                          IN const char *xmlFileName, | ||||||
|                          IN BOOL file ) |                          IN BOOL file ) | ||||||
| { | { | ||||||
|     int fileSize = 0; |     int fileSize = 0; | ||||||
| @@ -634,7 +649,7 @@ Parser_readFileOrBuffer( IN Parser * xmlParser, | |||||||
|             fclose( xmlFilePtr ); |             fclose( xmlFilePtr ); | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         xmlParser->dataBuffer = strdup( xmlFileName ); |         xmlParser->dataBuffer = safe_strdup( xmlFileName ); | ||||||
|         if( xmlParser->dataBuffer == NULL ) { |         if( xmlParser->dataBuffer == NULL ) { | ||||||
|             return IXML_INSUFFICIENT_MEMORY; |             return IXML_INSUFFICIENT_MEMORY; | ||||||
|         } |         } | ||||||
| @@ -651,7 +666,7 @@ Parser_readFileOrBuffer( IN Parser * xmlParser, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| Parser_LoadDocument( OUT IXML_Document ** retDoc, | Parser_LoadDocument( OUT IXML_Document ** retDoc, | ||||||
|                      IN char *xmlFileName, |                      IN const char *xmlFileName, | ||||||
|                      IN BOOL file ) |                      IN BOOL file ) | ||||||
| { | { | ||||||
|     int rc = IXML_SUCCESS; |     int rc = IXML_SUCCESS; | ||||||
| @@ -1117,10 +1132,10 @@ Parser_skipWhiteSpaces( IN Parser * xmlParser ) | |||||||
| * | * | ||||||
| *===============================================================================*/ | *===============================================================================*/ | ||||||
| static int | static int | ||||||
| Parser_getChar( IN char *src, | Parser_getChar( IN const char *src, | ||||||
|                 INOUT int *cLen ) |                 INOUT int *cLen ) | ||||||
| { | { | ||||||
|     char *pnum; |     const char *pnum; | ||||||
|     int sum; |     int sum; | ||||||
|     char c; |     char c; | ||||||
|     int i; |     int i; | ||||||
| @@ -1213,13 +1228,13 @@ fail_entity: | |||||||
| *===============================================================================*/ | *===============================================================================*/ | ||||||
| static int | static int | ||||||
| Parser_copyToken( IN Parser * xmlParser, | Parser_copyToken( IN Parser * xmlParser, | ||||||
|                   IN char *src, |                   IN const char *src, | ||||||
|                   IN int len ) |                   IN int len ) | ||||||
| { | { | ||||||
|     int i, |     int i, | ||||||
|       c, |       c, | ||||||
|       cl; |       cl; | ||||||
|     char *psrc, |     const char *psrc, | ||||||
|      *pend; |      *pend; | ||||||
|     utf8char uch; |     utf8char uch; | ||||||
|  |  | ||||||
| @@ -1563,7 +1578,7 @@ Parser_getNextToken( IN Parser * xmlParser ) | |||||||
| *===============================================================================*/ | *===============================================================================*/ | ||||||
| static char * | static char * | ||||||
| Parser_getNameSpace( IN Parser * xmlParser, | Parser_getNameSpace( IN Parser * xmlParser, | ||||||
|                      IN char *prefix ) |                      IN const char *prefix ) | ||||||
| { | { | ||||||
|     IXML_ElementStack *pCur; |     IXML_ElementStack *pCur; | ||||||
|     IXML_NamespaceURI *pNsUri; |     IXML_NamespaceURI *pNsUri; | ||||||
| @@ -1597,7 +1612,7 @@ Parser_addNamespace( IN Parser * xmlParser ) | |||||||
| { | { | ||||||
|     IXML_Node *pNode; |     IXML_Node *pNode; | ||||||
|     IXML_ElementStack *pCur; |     IXML_ElementStack *pCur; | ||||||
|     char *namespaceUri; |     const char *namespaceUri; | ||||||
|  |  | ||||||
|     pNode = xmlParser->pNeedPrefixNode; |     pNode = xmlParser->pNeedPrefixNode; | ||||||
|     pCur = xmlParser->pCurElement; |     pCur = xmlParser->pCurElement; | ||||||
| @@ -1610,7 +1625,7 @@ Parser_addNamespace( IN Parser * xmlParser ) | |||||||
|             // it would be wrong that pNode->namespace != NULL. |             // it would be wrong that pNode->namespace != NULL. | ||||||
|             assert( pNode->namespaceURI == NULL ); |             assert( pNode->namespaceURI == NULL ); | ||||||
|  |  | ||||||
|             pNode->namespaceURI = strdup( pCur->namespaceUri ); |             pNode->namespaceURI = safe_strdup( pCur->namespaceUri ); | ||||||
|             if( pNode->namespaceURI == NULL ) { |             if( pNode->namespaceURI == NULL ) { | ||||||
|                 return IXML_INSUFFICIENT_MEMORY; |                 return IXML_INSUFFICIENT_MEMORY; | ||||||
|             } |             } | ||||||
| @@ -1626,7 +1641,7 @@ Parser_addNamespace( IN Parser * xmlParser ) | |||||||
|  |  | ||||||
|         namespaceUri = Parser_getNameSpace( xmlParser, pCur->prefix ); |         namespaceUri = Parser_getNameSpace( xmlParser, pCur->prefix ); | ||||||
|         if( namespaceUri != NULL ) { |         if( namespaceUri != NULL ) { | ||||||
|             pNode->namespaceURI = strdup( namespaceUri ); |             pNode->namespaceURI = safe_strdup( namespaceUri ); | ||||||
|             if( pNode->namespaceURI == NULL ) { |             if( pNode->namespaceURI == NULL ) { | ||||||
|                 return IXML_INSUFFICIENT_MEMORY; |                 return IXML_INSUFFICIENT_MEMORY; | ||||||
|             } |             } | ||||||
| @@ -1661,7 +1676,7 @@ Parser_setNodePrefixAndLocalName( IN IXML_Node * node ) | |||||||
|     pStrPrefix = strchr( node->nodeName, ':' ); |     pStrPrefix = strchr( node->nodeName, ':' ); | ||||||
|     if( pStrPrefix == NULL ) { |     if( pStrPrefix == NULL ) { | ||||||
|         node->prefix = NULL; |         node->prefix = NULL; | ||||||
|         node->localName = strdup( node->nodeName ); |         node->localName = safe_strdup( node->nodeName ); | ||||||
|         if( node->localName == NULL ) { |         if( node->localName == NULL ) { | ||||||
|             return IXML_INSUFFICIENT_MEMORY; |             return IXML_INSUFFICIENT_MEMORY; | ||||||
|         } |         } | ||||||
| @@ -1678,7 +1693,7 @@ Parser_setNodePrefixAndLocalName( IN IXML_Node * node ) | |||||||
|         memset( node->prefix, 0, nPrefix + 1 ); |         memset( node->prefix, 0, nPrefix + 1 ); | ||||||
|         strncpy( node->prefix, node->nodeName, nPrefix ); |         strncpy( node->prefix, node->nodeName, nPrefix ); | ||||||
|  |  | ||||||
|         node->localName = strdup( pLocalName ); |         node->localName = safe_strdup( pLocalName ); | ||||||
|         if( node->localName == NULL ) { |         if( node->localName == NULL ) { | ||||||
|             free( node->prefix ); |             free( node->prefix ); | ||||||
|             node->prefix = NULL;    //no need to free really, main loop will frees it |             node->prefix = NULL;    //no need to free really, main loop will frees it | ||||||
| @@ -1718,7 +1733,7 @@ Parser_xmlNamespace( IN Parser * xmlParser, | |||||||
|         } |         } | ||||||
| ///here it goes to segfault on "" when not copying | ///here it goes to segfault on "" when not copying | ||||||
| 	if(newNode->nodeValue){ | 	if(newNode->nodeValue){ | ||||||
|          pCur->namespaceUri = strdup( newNode->nodeValue ); |          pCur->namespaceUri = safe_strdup( newNode->nodeValue ); | ||||||
|          if( pCur->namespaceUri == NULL ) { |          if( pCur->namespaceUri == NULL ) { | ||||||
|              return IXML_INSUFFICIENT_MEMORY; |              return IXML_INSUFFICIENT_MEMORY; | ||||||
|          } |          } | ||||||
| @@ -1738,7 +1753,7 @@ Parser_xmlNamespace( IN Parser * xmlParser, | |||||||
|  |  | ||||||
|         if( ( pCur->prefix != NULL ) |         if( ( pCur->prefix != NULL ) | ||||||
|             && ( strcmp( pCur->prefix, newNode->localName ) == 0 ) ) { |             && ( strcmp( pCur->prefix, newNode->localName ) == 0 ) ) { | ||||||
|             pCur->namespaceUri = strdup( newNode->nodeValue ); |             pCur->namespaceUri = safe_strdup( newNode->nodeValue ); | ||||||
|             if( pCur->namespaceUri == NULL ) { |             if( pCur->namespaceUri == NULL ) { | ||||||
|                 return IXML_INSUFFICIENT_MEMORY; |                 return IXML_INSUFFICIENT_MEMORY; | ||||||
|             } |             } | ||||||
| @@ -1765,13 +1780,13 @@ Parser_xmlNamespace( IN Parser * xmlParser, | |||||||
|                 } |                 } | ||||||
|                 memset( pNewNs, 0, sizeof( IXML_NamespaceURI ) ); |                 memset( pNewNs, 0, sizeof( IXML_NamespaceURI ) ); | ||||||
|  |  | ||||||
|                 pNewNs->prefix = strdup( newNode->localName ); |                 pNewNs->prefix = safe_strdup( newNode->localName ); | ||||||
|                 if( pNewNs->prefix == NULL ) { |                 if( pNewNs->prefix == NULL ) { | ||||||
|                     free( pNewNs ); |                     free( pNewNs ); | ||||||
|                     return IXML_INSUFFICIENT_MEMORY; |                     return IXML_INSUFFICIENT_MEMORY; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 pNewNs->nsURI = strdup( newNode->nodeValue ); |                 pNewNs->nsURI = safe_strdup( newNode->nodeValue ); | ||||||
|                 if( pNewNs->nsURI == NULL ) { |                 if( pNewNs->nsURI == NULL ) { | ||||||
|                     Parser_freeNsURI( pNewNs ); |                     Parser_freeNsURI( pNewNs ); | ||||||
|                     free( pNewNs ); |                     free( pNewNs ); | ||||||
| @@ -1789,7 +1804,7 @@ Parser_xmlNamespace( IN Parser * xmlParser, | |||||||
|                     free( pNs->nsURI ); |                     free( pNs->nsURI ); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 pNs->nsURI = strdup( newNode->nodeValue ); |                 pNs->nsURI = safe_strdup( newNode->nodeValue ); | ||||||
|                 if( pNs->nsURI == NULL ) { |                 if( pNs->nsURI == NULL ) { | ||||||
|                     return IXML_INSUFFICIENT_MEMORY; |                     return IXML_INSUFFICIENT_MEMORY; | ||||||
|                 } |                 } | ||||||
| @@ -1826,7 +1841,7 @@ Parser_processSTag( IN Parser * xmlParser, | |||||||
|  |  | ||||||
|     pCurToken = ( xmlParser->tokenBuf ).buf; |     pCurToken = ( xmlParser->tokenBuf ).buf; | ||||||
|     if( pCurToken != NULL ) { |     if( pCurToken != NULL ) { | ||||||
|         node->nodeName = strdup( pCurToken ); |         node->nodeName = safe_strdup( pCurToken ); | ||||||
|         if( node->nodeName == NULL ) { |         if( node->nodeName == NULL ) { | ||||||
|             return IXML_INSUFFICIENT_MEMORY; |             return IXML_INSUFFICIENT_MEMORY; | ||||||
|         } |         } | ||||||
| @@ -1977,7 +1992,7 @@ Parser_processCDSect( IN char **pSrc, | |||||||
|         strncpy( node->nodeValue, pCDataStart, tokenLength ); |         strncpy( node->nodeValue, pCDataStart, tokenLength ); | ||||||
|         node->nodeValue[tokenLength] = '\0'; |         node->nodeValue[tokenLength] = '\0'; | ||||||
|  |  | ||||||
|         node->nodeName = strdup( CDATANODENAME ); |         node->nodeName = safe_strdup( CDATANODENAME ); | ||||||
|         if( node->nodeName == NULL ) { |         if( node->nodeName == NULL ) { | ||||||
|             // no need to free node->nodeValue at all, bacause node contents |             // no need to free node->nodeValue at all, bacause node contents | ||||||
|             // will be freed by the main loop. |             // will be freed by the main loop. | ||||||
| @@ -2002,13 +2017,13 @@ Parser_processCDSect( IN char **pSrc, | |||||||
| *===============================================================================*/ | *===============================================================================*/ | ||||||
| static int | static int | ||||||
| Parser_setElementNamespace( IN IXML_Element * newElement, | Parser_setElementNamespace( IN IXML_Element * newElement, | ||||||
|                             IN char *nsURI ) |                             IN const char *nsURI ) | ||||||
| { | { | ||||||
|     if( newElement != NULL ) { |     if( newElement != NULL ) { | ||||||
|         if( newElement->n.namespaceURI != NULL ) { |         if( newElement->n.namespaceURI != NULL ) { | ||||||
|             return IXML_SYNTAX_ERR; |             return IXML_SYNTAX_ERR; | ||||||
|         } else { |         } else { | ||||||
|             ( newElement->n ).namespaceURI = strdup( nsURI ); |             ( newElement->n ).namespaceURI = safe_strdup( nsURI ); | ||||||
|             if( ( newElement->n ).namespaceURI == NULL ) { |             if( ( newElement->n ).namespaceURI == NULL ) { | ||||||
|                 return IXML_INSUFFICIENT_MEMORY; |                 return IXML_INSUFFICIENT_MEMORY; | ||||||
|             } |             } | ||||||
| @@ -2107,7 +2122,7 @@ Parser_processContent( IN Parser * xmlParser, | |||||||
|  |  | ||||||
|         pCurToken = ( xmlParser->tokenBuf ).buf; |         pCurToken = ( xmlParser->tokenBuf ).buf; | ||||||
|         if( pCurToken != NULL ) { |         if( pCurToken != NULL ) { | ||||||
|             node->nodeValue = strdup( pCurToken ); |             node->nodeValue = safe_strdup( pCurToken ); | ||||||
|             if( node->nodeValue == NULL ) { |             if( node->nodeValue == NULL ) { | ||||||
|                 return IXML_INSUFFICIENT_MEMORY; |                 return IXML_INSUFFICIENT_MEMORY; | ||||||
|             } |             } | ||||||
| @@ -2115,7 +2130,7 @@ Parser_processContent( IN Parser * xmlParser, | |||||||
|             return IXML_SYNTAX_ERR; |             return IXML_SYNTAX_ERR; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         node->nodeName = strdup( TEXTNODENAME ); |         node->nodeName = safe_strdup( TEXTNODENAME ); | ||||||
|         if( node->nodeName == NULL ) { |         if( node->nodeName == NULL ) { | ||||||
|             return IXML_SYNTAX_ERR; |             return IXML_SYNTAX_ERR; | ||||||
|         } |         } | ||||||
| @@ -2152,7 +2167,7 @@ Parser_processETag( IN Parser * xmlParser, | |||||||
|     if( pCurToken == NULL ) { |     if( pCurToken == NULL ) { | ||||||
|         return IXML_SYNTAX_ERR; |         return IXML_SYNTAX_ERR; | ||||||
|     } |     } | ||||||
|     node->nodeName = strdup( pCurToken ); |     node->nodeName = safe_strdup( pCurToken ); | ||||||
|     if( node->nodeName == NULL ) { |     if( node->nodeName == NULL ) { | ||||||
|         return IXML_INSUFFICIENT_MEMORY; |         return IXML_INSUFFICIENT_MEMORY; | ||||||
|     } |     } | ||||||
| @@ -2320,7 +2335,7 @@ Parser_processAttribute( IN Parser * xmlParser, | |||||||
|         return IXML_SYNTAX_ERR; |         return IXML_SYNTAX_ERR; | ||||||
|     } |     } | ||||||
|     // copy in the attribute name |     // copy in the attribute name | ||||||
|     node->nodeName = strdup( pCurToken ); |     node->nodeName = safe_strdup( pCurToken ); | ||||||
|     if( node->nodeName == NULL ) { |     if( node->nodeName == NULL ) { | ||||||
|         return IXML_INSUFFICIENT_MEMORY; |         return IXML_INSUFFICIENT_MEMORY; | ||||||
|     } |     } | ||||||
| @@ -2373,7 +2388,7 @@ Parser_processAttribute( IN Parser * xmlParser, | |||||||
|  |  | ||||||
|     pCurToken = ( xmlParser->tokenBuf ).buf; |     pCurToken = ( xmlParser->tokenBuf ).buf; | ||||||
|     if( pCurToken != NULL ) {   // attribute has value, like a="c" |     if( pCurToken != NULL ) {   // attribute has value, like a="c" | ||||||
|         node->nodeValue = strdup( pCurToken ); |         node->nodeValue = safe_strdup( pCurToken ); | ||||||
|         if( node->nodeValue == NULL ) { |         if( node->nodeValue == NULL ) { | ||||||
|             return IXML_INSUFFICIENT_MEMORY; |             return IXML_INSUFFICIENT_MEMORY; | ||||||
|         } |         } | ||||||
| @@ -2456,7 +2471,7 @@ Parser_getNextNode( IN Parser * xmlParser, | |||||||
|                 goto ErrorHandler; |                 goto ErrorHandler; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             node->nodeName = strdup( lastElement ); |             node->nodeName = safe_strdup( lastElement ); | ||||||
|             if( node->nodeName == NULL ) { |             if( node->nodeName == NULL ) { | ||||||
|                 return IXML_INSUFFICIENT_MEMORY; |                 return IXML_INSUFFICIENT_MEMORY; | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| unsigned long | unsigned long | ||||||
| ixmlNamedNodeMap_getItemNumber( IN IXML_NamedNodeMap * nnMap, | ixmlNamedNodeMap_getItemNumber( IN IXML_NamedNodeMap * nnMap, | ||||||
|                                 IN char *name ) |                                 IN const char *name ) | ||||||
| { | { | ||||||
|     IXML_Node *tempNode; |     IXML_Node *tempNode; | ||||||
|     unsigned long returnItemNo = 0; |     unsigned long returnItemNo = 0; | ||||||
| @@ -92,7 +92,7 @@ ixmlNamedNodeMap_init( IN IXML_NamedNodeMap * nnMap ) | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| IXML_Node * | IXML_Node * | ||||||
| ixmlNamedNodeMap_getNamedItem( IN IXML_NamedNodeMap * nnMap, | ixmlNamedNodeMap_getNamedItem( IN IXML_NamedNodeMap * nnMap, | ||||||
|                                IN char *name ) |                                IN const char *name ) | ||||||
| { | { | ||||||
|     long index; |     long index; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -175,7 +175,7 @@ ixmlNode_getLocalName( IN IXML_Node * nodeptr ) | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlNode_setNamespaceURI( IN IXML_Node * nodeptr, | ixmlNode_setNamespaceURI( IN IXML_Node * nodeptr, | ||||||
|                           IN char *namespaceURI ) |                           IN const char *namespaceURI ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     if( nodeptr == NULL ) { |     if( nodeptr == NULL ) { | ||||||
| @@ -207,7 +207,7 @@ ixmlNode_setNamespaceURI( IN IXML_Node * nodeptr, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlNode_setPrefix( IN IXML_Node * nodeptr, | ixmlNode_setPrefix( IN IXML_Node * nodeptr, | ||||||
|                     IN char *prefix ) |                     IN const char *prefix ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     if( nodeptr == NULL ) { |     if( nodeptr == NULL ) { | ||||||
| @@ -240,7 +240,7 @@ ixmlNode_setPrefix( IN IXML_Node * nodeptr, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlNode_setLocalName( IN IXML_Node * nodeptr, | ixmlNode_setLocalName( IN IXML_Node * nodeptr, | ||||||
|                        IN char *localName ) |                        IN const char *localName ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     assert( nodeptr != NULL ); |     assert( nodeptr != NULL ); | ||||||
| @@ -288,10 +288,10 @@ ixmlNode_getNamespaceURI( IN IXML_Node * nodeptr ) | |||||||
| *       the prefix of the node. | *       the prefix of the node. | ||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| DOMString | const DOMString | ||||||
| ixmlNode_getPrefix( IN IXML_Node * nodeptr ) | ixmlNode_getPrefix( IN IXML_Node * nodeptr ) | ||||||
| { | { | ||||||
|     DOMString prefix = NULL; |     const DOMString prefix = NULL; | ||||||
|  |  | ||||||
|     if( nodeptr != NULL ) { |     if( nodeptr != NULL ) { | ||||||
|         prefix = nodeptr->prefix; |         prefix = nodeptr->prefix; | ||||||
| @@ -309,7 +309,7 @@ ixmlNode_getPrefix( IN IXML_Node * nodeptr ) | |||||||
| *       the nodeValue of the node. | *       the nodeValue of the node. | ||||||
| * | * | ||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| DOMString | const DOMString | ||||||
| ixmlNode_getNodeValue( IN IXML_Node * nodeptr ) | ixmlNode_getNodeValue( IN IXML_Node * nodeptr ) | ||||||
| { | { | ||||||
|  |  | ||||||
| @@ -330,7 +330,7 @@ ixmlNode_getNodeValue( IN IXML_Node * nodeptr ) | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlNode_setNodeValue( IN IXML_Node * nodeptr, | ixmlNode_setNodeValue( IN IXML_Node * nodeptr, | ||||||
|                        IN char *newNodeValue ) |                        IN const char *newNodeValue ) | ||||||
| { | { | ||||||
|     int rc = IXML_SUCCESS; |     int rc = IXML_SUCCESS; | ||||||
|  |  | ||||||
| @@ -1425,7 +1425,7 @@ ixmlNode_hasAttributes( IXML_Node * nodeptr ) | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| void | void | ||||||
| ixmlNode_getElementsByTagNameRecursive( IN IXML_Node * n, | ixmlNode_getElementsByTagNameRecursive( IN IXML_Node * n, | ||||||
|                                         IN char *tagname, |                                         IN const char *tagname, | ||||||
|                                         OUT IXML_NodeList ** list ) |                                         OUT IXML_NodeList ** list ) | ||||||
| { | { | ||||||
|     const char *name; |     const char *name; | ||||||
| @@ -1457,7 +1457,7 @@ ixmlNode_getElementsByTagNameRecursive( IN IXML_Node * n, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| void | void | ||||||
| ixmlNode_getElementsByTagName( IN IXML_Node * n, | ixmlNode_getElementsByTagName( IN IXML_Node * n, | ||||||
|                                IN char *tagname, |                                IN const char *tagname, | ||||||
|                                OUT IXML_NodeList ** list ) |                                OUT IXML_NodeList ** list ) | ||||||
| { | { | ||||||
|     const char *name; |     const char *name; | ||||||
| @@ -1484,8 +1484,8 @@ ixmlNode_getElementsByTagName( IN IXML_Node * n, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| void | void | ||||||
| ixmlNode_getElementsByTagNameNSRecursive( IN IXML_Node * n, | ixmlNode_getElementsByTagNameNSRecursive( IN IXML_Node * n, | ||||||
|                                           IN char *namespaceURI, |                                           IN const char *namespaceURI, | ||||||
|                                           IN char *localName, |                                           IN const char *localName, | ||||||
|                                           OUT IXML_NodeList ** list ) |                                           OUT IXML_NodeList ** list ) | ||||||
| { | { | ||||||
|     const DOMString nsURI; |     const DOMString nsURI; | ||||||
| @@ -1525,8 +1525,8 @@ ixmlNode_getElementsByTagNameNSRecursive( IN IXML_Node * n, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| void | void | ||||||
| ixmlNode_getElementsByTagNameNS( IN IXML_Node * n, | ixmlNode_getElementsByTagNameNS( IN IXML_Node * n, | ||||||
|                                  IN char *namespaceURI, |                                  IN const char *namespaceURI, | ||||||
|                                  IN char *localName, |                                  IN const char *localName, | ||||||
|                                  OUT IXML_NodeList ** list ) |                                  OUT IXML_NodeList ** list ) | ||||||
| { | { | ||||||
|     const DOMString nsURI; |     const DOMString nsURI; | ||||||
| @@ -1560,7 +1560,7 @@ ixmlNode_getElementsByTagNameNS( IN IXML_Node * n, | |||||||
| *=================================================================*/ | *=================================================================*/ | ||||||
| int | int | ||||||
| ixmlNode_setNodeName( IN IXML_Node * node, | ixmlNode_setNodeName( IN IXML_Node * node, | ||||||
|                       IN DOMString qualifiedName ) |                       IN const DOMString qualifiedName ) | ||||||
| { | { | ||||||
|     int rc = IXML_SUCCESS; |     int rc = IXML_SUCCESS; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								libupnp.spec
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								libupnp.spec
									
									
									
									
									
								
							| @@ -1,15 +1,14 @@ | |||||||
| Version: 1.4.1 | 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} | ||||||
| License: BSD | License: BSD | ||||||
| Group: System Environment/Libraries | Group: System Environment/Libraries | ||||||
| URL: http://www.libupnp.org/ | URL: http://www.libupnp.org/ | ||||||
| Source: http://puzzle.dl.sourceforge.net/sourceforge/pupnp/%{name}-%{version}.tar.gz | Source: http://puzzle.dl.sourceforge.net/sourceforge/pupnp/%{name}-%{version}.tar.bz2 | ||||||
| Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||||
|  |  | ||||||
| %define docdir %{_docdir}/%{name}-%{version}-%{release} | %define docdeveldir %{_docdir}/%{name}-devel-%{version} | ||||||
| %define docdeveldir %{_docdir}/%{name}-devel-%{version}-%{release} |  | ||||||
|  |  | ||||||
| %description | %description | ||||||
| The Universal Plug and Play (UPnP) SDK for Linux provides  | The Universal Plug and Play (UPnP) SDK for Linux provides  | ||||||
| @@ -29,7 +28,7 @@ the UPnP SDK libraries. | |||||||
| %setup -q | %setup -q | ||||||
|  |  | ||||||
| %build | %build | ||||||
| %configure --with-docdir=%{docdir}/  | %configure --with-documentation | ||||||
| make %{?_smp_mflags} | make %{?_smp_mflags} | ||||||
|  |  | ||||||
| %install | %install | ||||||
| @@ -78,6 +77,9 @@ make install DESTDIR=$RPM_BUILD_ROOT | |||||||
| rm -rf %{buildroot} | rm -rf %{buildroot} | ||||||
|  |  | ||||||
| %changelog | %changelog | ||||||
|  | * Fri Feb 02 2007 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.2-1 | ||||||
|  | - Update to version 1.4.2 | ||||||
|  |  | ||||||
| * Wed Jul 05 2006 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.1-1 | * Wed Jul 05 2006 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.1-1 | ||||||
| - Update to version 1.4.1 | - Update to version 1.4.1 | ||||||
|  |  | ||||||
| @@ -117,3 +119,4 @@ rm -rf %{buildroot} | |||||||
| * Thu Dec 22 2005 Eric Tanguy 1.2.1a-1 | * Thu Dec 22 2005 Eric Tanguy 1.2.1a-1 | ||||||
| - Modify spec file from  | - Modify spec file from  | ||||||
| http://rpm.pbone.net/index.php3/stat/4/idpl/2378737/com/libupnp-1.2.1a_DSM320-3.i386.rpm.html | http://rpm.pbone.net/index.php3/stat/4/idpl/2378737/com/libupnp-1.2.1a_DSM320-3.i386.rpm.html | ||||||
|  |  | ||||||
|   | |||||||
| @@ -62,6 +62,7 @@ typedef enum priority {LOW_PRIORITY, | |||||||
| #define DEFAULT_STARVATION_TIME	500   //default starvation time 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_IDLE_TIME 10 * 1000   //default idle time used by TPAttrInit | ||||||
| #define DEFAULT_FREE_ROUTINE NULL     //default free routine used TPJobInit | #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 | #define STATS 1 //always include stats because code change is minimal | ||||||
|  |  | ||||||
| @@ -72,21 +73,21 @@ typedef enum priority {LOW_PRIORITY, | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef STATS | #ifdef STATS | ||||||
| #define STATSONLY(x) x |  #define STATSONLY(x) x | ||||||
| #else | #else | ||||||
| #define STATSONLY(x) |  #define STATSONLY(x) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
| #define DEBUG 1 |  #define DEBUG 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| //DEBUGGING | //DEBUGGING | ||||||
| #ifndef WIN32 | #ifndef WIN32 | ||||||
|  #ifdef DEBUG |  #ifdef DEBUG | ||||||
|  #define DBGONLY(x) x |   #define DBGONLY(x) x | ||||||
|  #else |  #else | ||||||
|  #define DBGONLY(x) |   #define DBGONLY(x) | ||||||
|  #endif |  #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| @@ -119,23 +120,25 @@ typedef void (*free_routine)(void *arg); | |||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| typedef struct THREADPOOLATTR | typedef struct THREADPOOLATTR | ||||||
| { | { | ||||||
|   int minThreads; //minThreads, ThreadPool will always maintain at least |   int minThreads;     // minThreads, ThreadPool will always maintain at least | ||||||
|                   //this many threads |                       // this many threads | ||||||
|  |  | ||||||
|   int maxThreads; //maxThreads, ThreadPool will never have more than this |   int maxThreads;     // maxThreads, ThreadPool will never have more than this | ||||||
|                   //number of threads |                       // number of threads | ||||||
|  |  | ||||||
|   int maxIdleTime;   //maxIdleTime (in milliseconds)  |   int maxIdleTime;    // maxIdleTime (in milliseconds) | ||||||
|                      // this is the maximum time a thread will remain idle |                       // this is the maximum time a thread will remain idle | ||||||
|                      // before dying |                       // before dying | ||||||
|  |  | ||||||
|   int jobsPerThread; //jobs per thread to maintain |   int jobsPerThread;  // jobs per thread to maintain | ||||||
|  |  | ||||||
|   int starvationTime;   //the time a low priority or med priority |   int maxJobsTotal;   // maximum number of jobs that can be queued totally. | ||||||
| 	                    //job waits before getting bumped |  | ||||||
|                         //up a priority (in milliseconds) |  | ||||||
|  |  | ||||||
|   PolicyType schedPolicy; //scheduling policy to use |   int starvationTime; // the time a low priority or med priority | ||||||
|  | 	              // job waits before getting bumped | ||||||
|  |                       // up a priority (in milliseconds) | ||||||
|  |  | ||||||
|  |   PolicyType schedPolicy; // scheduling policy to use | ||||||
|  |  | ||||||
| } ThreadPoolAttr; | } ThreadPoolAttr; | ||||||
|  |  | ||||||
| @@ -521,6 +524,19 @@ int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime); | |||||||
| int TPAttrSetSchedPolicy(ThreadPoolAttr *attr, PolicyType schedPolicy); | int TPAttrSetSchedPolicy(ThreadPoolAttr *attr, PolicyType schedPolicy); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /**************************************************************************** | ||||||
|  |  * Function: TPAttrSetMaxJobsTotal | ||||||
|  |  * | ||||||
|  |  *  Description: | ||||||
|  |  *      Sets the maximum number jobs that can be qeued totally. | ||||||
|  |  *  Parameters: | ||||||
|  |  *      attr - must be valid thread pool attributes. | ||||||
|  |  *      maxJobsTotal - maximum number of jobs | ||||||
|  |  *  Returns: | ||||||
|  |  *      Always returns 0. | ||||||
|  |  *****************************************************************************/ | ||||||
|  | int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal); | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolGetStats |  * Function: ThreadPoolGetStats | ||||||
|  * |  * | ||||||
|   | |||||||
| @@ -527,11 +527,15 @@ extern "C" { | |||||||
| #define imillisleep(x) usleep(1000*x) | #define imillisleep(x) usleep(1000*x) | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef WIN32 | ||||||
|  #ifdef LIBUPNP_EXPORTS |  #ifndef UPNP_STATIC_LIB | ||||||
|   // set up declspec for dll export to make functions visible to library users |   #ifdef LIBUPNP_EXPORTS | ||||||
|   #define EXPORT_SPEC __declspec(dllexport) |    // 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 |  #else | ||||||
|   #define EXPORT_SPEC __declspec(dllimport) |   #define EXPORT_SPEC | ||||||
|  #endif |  #endif | ||||||
| #else | #else | ||||||
|  #define EXPORT_SPEC |  #define EXPORT_SPEC | ||||||
|   | |||||||
| @@ -34,9 +34,7 @@ | |||||||
| #include <assert.h> | #include <assert.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  |  | ||||||
| #ifdef STATS |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: CmpThreadPoolJob |  * Function: CmpThreadPoolJob | ||||||
| @@ -289,7 +287,8 @@ SetRelTimeout( struct timespec *time, | |||||||
|  *  Parameters: |  *  Parameters: | ||||||
|  *      ThreadPoolStats *stats must be valid non null stats structure |  *      ThreadPoolStats *stats must be valid non null stats structure | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| STATSONLY( static void StatsInit( ThreadPoolStats * stats ) { | #ifdef STATS | ||||||
|  | static void StatsInit( ThreadPoolStats * stats ) { | ||||||
|            assert( stats != NULL ); stats->totalIdleTime = 0; stats->totalJobsHQ = 0; stats->totalJobsLQ = 0; stats->totalJobsMQ = 0; stats->totalTimeHQ = 0; stats->totalTimeMQ = 0; stats->totalTimeLQ = 0; stats->totalWorkTime = 0; stats->totalIdleTime = 0; stats->avgWaitHQ = 0; //average wait in HQ |            assert( stats != NULL ); stats->totalIdleTime = 0; stats->totalJobsHQ = 0; stats->totalJobsLQ = 0; stats->totalJobsMQ = 0; stats->totalTimeHQ = 0; stats->totalTimeMQ = 0; stats->totalTimeLQ = 0; stats->totalWorkTime = 0; stats->totalIdleTime = 0; stats->avgWaitHQ = 0; //average wait in HQ | ||||||
|            stats->avgWaitMQ = 0;    //average wait in MQ |            stats->avgWaitMQ = 0;    //average wait in MQ | ||||||
|            stats->avgWaitLQ = 0; |            stats->avgWaitLQ = 0; | ||||||
| @@ -297,7 +296,7 @@ STATSONLY( static void StatsInit( ThreadPoolStats * stats ) { | |||||||
|            stats->idleThreads = 0; |            stats->idleThreads = 0; | ||||||
|            stats->persistentThreads = 0; |            stats->persistentThreads = 0; | ||||||
|            stats->maxThreads = 0; stats->totalThreads = 0;} |            stats->maxThreads = 0; stats->totalThreads = 0;} | ||||||
|  ) | #endif | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: CalcWaitTime |  * Function: CalcWaitTime | ||||||
| @@ -313,7 +312,8 @@ STATSONLY( static void StatsInit( ThreadPoolStats * stats ) { | |||||||
|  *      ThreadPriority p |  *      ThreadPriority p | ||||||
|  *      ThreadPoolJob *job |  *      ThreadPoolJob *job | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| STATSONLY( static void CalcWaitTime( ThreadPool * tp, | #ifdef STATS | ||||||
|  | static void CalcWaitTime( ThreadPool * tp, | ||||||
|                                      ThreadPriority p, |                                      ThreadPriority p, | ||||||
|                                      ThreadPoolJob * job ) { |                                      ThreadPoolJob * job ) { | ||||||
|            struct timeb now; |            struct timeb now; | ||||||
| @@ -329,7 +329,7 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|            assert( 0 );} |            assert( 0 );} | ||||||
|            } |            } | ||||||
|  |  | ||||||
|  ) | #endif | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: SetSeed |  * Function: SetSeed | ||||||
| @@ -380,6 +380,12 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|         int retCode = 0; |         int retCode = 0; | ||||||
|         int persistent = -1; |         int persistent = -1; | ||||||
|         ThreadPool *tp = ( ThreadPool * ) arg; |         ThreadPool *tp = ( ThreadPool * ) arg; | ||||||
|  |         //leuk_he allow static linking | ||||||
|  | 		  #ifdef WIN32 | ||||||
|  | 		   #ifdef PTW32_STATIC_LIB | ||||||
|  | 		    pthread_win32_thread_attach_np(); | ||||||
|  | 		   #endif | ||||||
|  | 		  #endif | ||||||
|  |  | ||||||
|         assert( tp != NULL ); |         assert( tp != NULL ); | ||||||
|  |  | ||||||
| @@ -447,7 +453,12 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|                     tp->totalThreads--; |                     tp->totalThreads--; | ||||||
|                     ithread_cond_broadcast( &tp->start_and_shutdown ); |                     ithread_cond_broadcast( &tp->start_and_shutdown ); | ||||||
|                     ithread_mutex_unlock( &tp->mutex ); |                     ithread_mutex_unlock( &tp->mutex ); | ||||||
|  | 					//leuk_he | ||||||
|  | 	                 #ifdef WIN32 | ||||||
|  | 	                  #ifdef PTW32_STATIC_LIB | ||||||
|  | 	                   pthread_win32_thread_detach_np (); | ||||||
|  | 	                  #endif | ||||||
|  | 	                 #endif | ||||||
|                     return NULL; |                     return NULL; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
| @@ -476,6 +487,12 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|                 ithread_cond_broadcast( &tp->start_and_shutdown ); |                 ithread_cond_broadcast( &tp->start_and_shutdown ); | ||||||
|  |  | ||||||
|                 ithread_mutex_unlock( &tp->mutex ); |                 ithread_mutex_unlock( &tp->mutex ); | ||||||
|  | 				//leuk_he | ||||||
|  |                 #ifdef WIN32 | ||||||
|  |                  #ifdef PTW32_STATIC_LIB | ||||||
|  |                   pthread_win32_thread_detach_np (); | ||||||
|  |                  #endif | ||||||
|  |                 #endif | ||||||
|  |  | ||||||
|                 return NULL; |                 return NULL; | ||||||
|             } else { |             } else { | ||||||
| @@ -703,6 +720,12 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|         if( tp == NULL ) { |         if( tp == NULL ) { | ||||||
|             return EINVAL; |             return EINVAL; | ||||||
|         } |         } | ||||||
|  | 				//leuk_he | ||||||
|  | 		  #ifdef WIN32 | ||||||
|  | 		   #ifdef PTW32_STATIC_LIB | ||||||
|  | 		    pthread_win32_process_attach_np(); | ||||||
|  | 		   #endif | ||||||
|  | 		  #endif | ||||||
|  |  | ||||||
|         retCode += ithread_mutex_init( &tp->mutex, NULL ); |         retCode += ithread_mutex_init( &tp->mutex, NULL ); | ||||||
|         assert( retCode == 0 ); |         assert( retCode == 0 ); | ||||||
| @@ -881,6 +904,7 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|         int rc = EOUTOFMEM; |         int rc = EOUTOFMEM; | ||||||
|  |  | ||||||
|         int tempId = -1; |         int tempId = -1; | ||||||
|  |         int totalJobs; | ||||||
|  |  | ||||||
|         ThreadPoolJob *temp = NULL; |         ThreadPoolJob *temp = NULL; | ||||||
|  |  | ||||||
| @@ -897,6 +921,13 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|                 || ( job->priority == MED_PRIORITY ) |                 || ( job->priority == MED_PRIORITY ) | ||||||
|                 || ( job->priority == HIGH_PRIORITY ) ); |                 || ( job->priority == HIGH_PRIORITY ) ); | ||||||
|  |  | ||||||
|  |         totalJobs = tp->highJobQ.size + tp->lowJobQ.size + tp->medJobQ.size; | ||||||
|  |         if (totalJobs >= tp->attr.maxJobsTotal) { | ||||||
|  |             fprintf(stderr, "total jobs = %d, too many jobs", totalJobs); | ||||||
|  |             ithread_mutex_unlock( &tp->mutex ); | ||||||
|  |             return rc; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if( jobId == NULL ) |         if( jobId == NULL ) | ||||||
|             jobId = &tempId; |             jobId = &tempId; | ||||||
|  |  | ||||||
| @@ -1242,6 +1273,7 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|         attr->minThreads = DEFAULT_MIN_THREADS; |         attr->minThreads = DEFAULT_MIN_THREADS; | ||||||
|         attr->schedPolicy = DEFAULT_POLICY; |         attr->schedPolicy = DEFAULT_POLICY; | ||||||
|         attr->starvationTime = DEFAULT_STARVATION_TIME; |         attr->starvationTime = DEFAULT_STARVATION_TIME; | ||||||
|  |         attr->maxJobsTotal = DEFAULT_MAX_JOBS_TOTAL; | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -1461,7 +1493,8 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     STATSONLY( void ThreadPoolPrintStats( ThreadPoolStats * stats ) { | #ifdef STATS | ||||||
|  |     void ThreadPoolPrintStats( ThreadPoolStats * stats ) { | ||||||
|                assert( stats != NULL ); if( stats == NULL ) { |                assert( stats != NULL ); if( stats == NULL ) { | ||||||
|                return;} |                return;} | ||||||
|  |  | ||||||
| @@ -1471,13 +1504,13 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|                printf( "ThreadPoolStats at Time: %ld\n", time( NULL ) ); |                printf( "ThreadPoolStats at Time: %ld\n", time( NULL ) ); | ||||||
| 	       #endif | 	       #endif | ||||||
|                printf |                printf | ||||||
|                ( "Average Wait in High Priority Q in milliseconds: %lf\n", |                ( "Average Wait in High Priority Q in milliseconds: %f\n", | ||||||
|                  stats->avgWaitHQ ); |                  stats->avgWaitHQ ); | ||||||
|                printf |                printf | ||||||
|                ( "Average Wait in Med Priority Q in milliseconds: %lf\n", |                ( "Average Wait in Med Priority Q in milliseconds: %f\n", | ||||||
|                  stats->avgWaitMQ ); |                  stats->avgWaitMQ ); | ||||||
|                printf |                printf | ||||||
|                ( "Averate Wait in Low Priority Q in milliseconds: %lf\n", |                ( "Averate Wait in Low Priority Q in milliseconds: %f\n", | ||||||
|                  stats->avgWaitLQ ); |                  stats->avgWaitLQ ); | ||||||
|                printf( "Max Threads Active: %d\n", stats->maxThreads ); |                printf( "Max Threads Active: %d\n", stats->maxThreads ); | ||||||
|                printf( "Current Worker Threads: %d\n", |                printf( "Current Worker Threads: %d\n", | ||||||
| @@ -1486,11 +1519,34 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|                        stats->persistentThreads ); |                        stats->persistentThreads ); | ||||||
|                printf( "Current Idle Threads: %d\n", stats->idleThreads ); |                printf( "Current Idle Threads: %d\n", stats->idleThreads ); | ||||||
|                printf( "Total Threads : %d\n", stats->totalThreads ); |                printf( "Total Threads : %d\n", stats->totalThreads ); | ||||||
|                printf( "Total Time spent Working in seconds: %lf\n", |                printf( "Total Time spent Working in seconds: %f\n", | ||||||
|                        stats->totalWorkTime ); |                        stats->totalWorkTime ); | ||||||
|                printf( "Total Time spent Idle in seconds : %lf\n", |                printf( "Total Time spent Idle in seconds : %f\n", | ||||||
|                        stats->totalIdleTime );} |                        stats->totalIdleTime );} | ||||||
|      ) | #endif | ||||||
|  |  | ||||||
|  |  /**************************************************************************** | ||||||
|  |  * Function: TPAttrSetMaxJobsTotal | ||||||
|  |  * | ||||||
|  |  *  Description: | ||||||
|  |  *      Sets the maximum number jobs that can be qeued totally. | ||||||
|  |  *  Parameters: | ||||||
|  |  *      attr - must be valid thread pool attributes. | ||||||
|  |  *      maxJobsTotal - maximum number of jobs | ||||||
|  |  *  Returns: | ||||||
|  |  *      Always returns 0. | ||||||
|  |  *****************************************************************************/ | ||||||
|  |     int TPAttrSetMaxJobsTotal( ThreadPoolAttr * attr, | ||||||
|  |                                int  maxJobsTotal ) { | ||||||
|  |         assert( attr != NULL ); | ||||||
|  |  | ||||||
|  |         if( attr == NULL ) { | ||||||
|  |             return EINVAL; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         attr->maxJobsTotal = maxJobsTotal; | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
| /**************************************************************************** | /**************************************************************************** | ||||||
|  * Function: ThreadPoolGetStats |  * Function: ThreadPoolGetStats | ||||||
| @@ -1505,7 +1561,8 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|  *  Returns: |  *  Returns: | ||||||
|  *      Always returns 0. |  *      Always returns 0. | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
|         STATSONLY( int | #ifdef STATS | ||||||
|  | int | ||||||
|                    ThreadPoolGetStats( ThreadPool * tp, |                    ThreadPoolGetStats( ThreadPool * tp, | ||||||
|                                        ThreadPoolStats * stats ) { |                                        ThreadPoolStats * stats ) { | ||||||
|  |  | ||||||
| @@ -1542,4 +1599,4 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default: | |||||||
|  |  | ||||||
|                    return 0;} |                    return 0;} | ||||||
|  |  | ||||||
|  ) | #endif | ||||||
|   | |||||||
| @@ -132,8 +132,7 @@ upnp_tv_ctrlpt_SOURCES = \ | |||||||
| 			sample/tvctrlpt/upnp_tv_ctrlpt.h \ | 			sample/tvctrlpt/upnp_tv_ctrlpt.h \ | ||||||
| 			sample/tvctrlpt/linux/upnp_tv_ctrlpt_main.c | 			sample/tvctrlpt/linux/upnp_tv_ctrlpt_main.c | ||||||
|  |  | ||||||
| if WITH_DOCDIR | if WITH_DOCUMENTATION | ||||||
|     docdir		= @DOCDIR@ |  | ||||||
|     examplesdir 	= $(docdir)/examples |     examplesdir 	= $(docdir)/examples | ||||||
|     examples_DATA 	= $(upnp_tv_ctrlpt_SOURCES) $(upnp_tv_device_SOURCES) |     examples_DATA 	= $(upnp_tv_ctrlpt_SOURCES) $(upnp_tv_device_SOURCES) | ||||||
| endif | endif | ||||||
| @@ -150,7 +149,10 @@ EXTRA_DIST 		= LICENSE \ | |||||||
| 			sample/tvdevice/web/tvcontrolSCPD.xml \ | 			sample/tvdevice/web/tvcontrolSCPD.xml \ | ||||||
| 			sample/tvdevice/web/tvdevicedesc.xml \ | 			sample/tvdevice/web/tvdevicedesc.xml \ | ||||||
| 			sample/tvdevice/web/tvdevicepres.html \ | 			sample/tvdevice/web/tvdevicepres.html \ | ||||||
| 			sample/tvdevice/web/tvpictureSCPD.xml | 			sample/tvdevice/web/tvpictureSCPD.xml \ | ||||||
|  | 			src/inc/inet_pton.h \ | ||||||
|  | 			src/inet_pton.c \ | ||||||
|  | 			src/win_dll.c | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,6 +36,14 @@ | |||||||
|  |  | ||||||
| //@{ | //@{ | ||||||
|  |  | ||||||
|  | #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  | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #ifdef __FreeBSD__ | #ifdef __FreeBSD__ | ||||||
| #include <time.h> | #include <time.h> | ||||||
| @@ -47,11 +55,15 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef WIN32 | ||||||
|  #ifdef LIBUPNP_EXPORTS |  #ifndef UPNP_STATIC_LIB | ||||||
|   // set up declspec for dll export to make functions visible to library users |   #ifdef LIBUPNP_EXPORTS | ||||||
|   #define EXPORT_SPEC __declspec(dllexport) |    // 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 |  #else | ||||||
|   #define EXPORT_SPEC __declspec(dllimport) |   #define EXPORT_SPEC | ||||||
|  #endif |  #endif | ||||||
| #else | #else | ||||||
|  #define EXPORT_SPEC |  #define EXPORT_SPEC | ||||||
| @@ -61,6 +73,7 @@ | |||||||
|  #define UpnpCloseSocket         close |  #define UpnpCloseSocket         close | ||||||
| #else | #else | ||||||
|  #define UpnpCloseSocket         closesocket |  #define UpnpCloseSocket         closesocket | ||||||
|  |  #define fseeko fseek | ||||||
| #endif | #endif | ||||||
| #define UPNP_SOCKETERROR        -1 | #define UPNP_SOCKETERROR        -1 | ||||||
| #define UPNP_INVALID_SOCKET     -1 | #define UPNP_INVALID_SOCKET     -1 | ||||||
| @@ -75,6 +88,8 @@ | |||||||
|  #include <time.h> |  #include <time.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #include <sys/types.h> | ||||||
|  |  | ||||||
| #define NUM_HANDLE 200 | #define NUM_HANDLE 200 | ||||||
| #define LINE_SIZE  180 | #define LINE_SIZE  180 | ||||||
| #define NAME_SIZE  256 | #define NAME_SIZE  256 | ||||||
| @@ -871,7 +886,7 @@ struct File_Info | |||||||
|   /** The length of the file. A length less than 0 indicates the size  |   /** The length of the file. A length less than 0 indicates the size  | ||||||
|    *  is unknown, and data will be sent until 0 bytes are returned from |    *  is unknown, and data will be sent until 0 bytes are returned from | ||||||
|    *  a read call. */ |    *  a read call. */ | ||||||
|   int file_length; |   off_t file_length; | ||||||
|  |  | ||||||
|   /** The time at which the contents of the file was modified; |   /** The time at which the contents of the file was modified; | ||||||
|    *  The time system is always local (not GMT). */ |    *  The time system is always local (not GMT). */ | ||||||
| @@ -965,7 +980,7 @@ struct UpnpVirtualDirCallbacks | |||||||
|    int (*seek) ( |    int (*seek) ( | ||||||
|      IN UpnpWebFileHandle fileHnd,  /** The handle of the file to move the  |      IN UpnpWebFileHandle fileHnd,  /** The handle of the file to move the  | ||||||
|                                         file pointer. */ |                                         file pointer. */ | ||||||
|      IN long offset,                /** The number of bytes to move in the  |      IN off_t offset,                /** The number of bytes to move in the  | ||||||
|                                         file.  Positive values move foward and  |                                         file.  Positive values move foward and  | ||||||
|                                         negative values move backward.  Note  |                                         negative values move backward.  Note  | ||||||
|                                         that this must be positive if the  |                                         that this must be positive if the  | ||||||
| @@ -2703,4 +2718,3 @@ EXPORT_SPEC void UpnpFree( | |||||||
| //@} The API | //@} The API | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1974,9 +1974,7 @@ TvDeviceStart( char *ip_address, | |||||||
|         ip_address = UpnpGetServerIpAddress(  ); |         ip_address = UpnpGetServerIpAddress(  ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if( port == 0 ) { |  | ||||||
|         port = UpnpGetServerPort(  ); |         port = UpnpGetServerPort(  ); | ||||||
|     } |  | ||||||
|  |  | ||||||
|     SampleUtil_Print( "UPnP Initialized\n \t ipaddress= %s port = %d\n", |     SampleUtil_Print( "UPnP Initialized\n \t ipaddress= %s port = %d\n", | ||||||
|                       ip_address, port ); |                       ip_address, port ); | ||||||
|   | |||||||
| @@ -244,6 +244,7 @@ int UpnpInit( IN const char *HostIP, | |||||||
|     TPAttrSetMinThreads( &attr, MIN_THREADS ); |     TPAttrSetMinThreads( &attr, MIN_THREADS ); | ||||||
|     TPAttrSetJobsPerThread( &attr, JOBS_PER_THREAD ); |     TPAttrSetJobsPerThread( &attr, JOBS_PER_THREAD ); | ||||||
|     TPAttrSetIdleTime( &attr, THREAD_IDLE_TIME ); |     TPAttrSetIdleTime( &attr, THREAD_IDLE_TIME ); | ||||||
|  |     TPAttrSetMaxJobsTotal( &attr, MAX_JOBS_TOTAL ); | ||||||
|  |  | ||||||
|     if( ThreadPoolInit( &gSendThreadPool, &attr ) != UPNP_E_SUCCESS ) { |     if( ThreadPoolInit( &gSendThreadPool, &attr ) != UPNP_E_SUCCESS ) { | ||||||
|         UpnpSdkInit = 0; |         UpnpSdkInit = 0; | ||||||
| @@ -415,6 +416,13 @@ UpnpFinish(  ) | |||||||
|  |  | ||||||
|     // remove all virtual dirs |     // remove all virtual dirs | ||||||
|     UpnpRemoveAllVirtualDirs(  ); |     UpnpRemoveAllVirtualDirs(  ); | ||||||
|  |     //leuk_he allow static linking: | ||||||
|  | 	 #ifdef WIN32 | ||||||
|  | 	  #ifdef PTW32_STATIC_LIB | ||||||
|  | 	   pthread_win32_thread_detach_np (); | ||||||
|  | 	  #endif | ||||||
|  | 	 #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|     UpnpSdkInit = 0; |     UpnpSdkInit = 0; | ||||||
|  |  | ||||||
| @@ -948,7 +956,7 @@ GetDescDocumentAndURL( IN Upnp_DescType descriptionType, | |||||||
|     char aliasStr[LINE_SIZE]; |     char aliasStr[LINE_SIZE]; | ||||||
|     char *temp_str = NULL; |     char *temp_str = NULL; | ||||||
|     FILE *fp = NULL; |     FILE *fp = NULL; | ||||||
|     unsigned fileLen; |     off_t fileLen; | ||||||
|     unsigned num_read; |     unsigned num_read; | ||||||
|     time_t last_modified; |     time_t last_modified; | ||||||
|     struct stat file_info; |     struct stat file_info; | ||||||
| @@ -3332,19 +3340,20 @@ UpnpDownloadXmlDoc( const char *url, | |||||||
|             return ret_code; |             return ret_code; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| 	/* TODO: MoNKi: Do not check this?? Some routers (Linksys WRT54GS) sends |  | ||||||
| 	   "CONTENT-TYPE: application/octet-stream". If the data sended is not |  | ||||||
| 	   an xml file, ixmlParseBufferEx will fail and the function will return |  | ||||||
| 	   UPNP_E_INVALID_DESC too.*/ |  | ||||||
|  |  | ||||||
|     if( strncasecmp( content_type, "text/xml", strlen( "text/xml" ) ) ) { |     if( strncasecmp( content_type, "text/xml", strlen( "text/xml" ) ) ) { | ||||||
|  |         DBGONLY( | ||||||
|  |             UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, "Not text/xml\n" ); | ||||||
|  |         ) | ||||||
|  |         // Linksys WRT54G router returns  | ||||||
|  |         // "CONTENT-TYPE: application/octet-stream". | ||||||
|  |         // Let's be nice to Linksys and try to parse document anyway. | ||||||
|  |         // If the data sended is not a xml file, ixmlParseBufferEx | ||||||
|  |         // will fail and the function will return UPNP_E_INVALID_DESC too. | ||||||
|  | #if 0 | ||||||
|         free( xml_buf ); |         free( xml_buf ); | ||||||
|         DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__, |         return UPNP_E_INVALID_DESC; | ||||||
|                              "Not text/xml\n" ); | #endif | ||||||
|              ) |  | ||||||
|             return UPNP_E_INVALID_DESC; |  | ||||||
|     } |     } | ||||||
|     // end of TODO Do not check this |  | ||||||
|  |  | ||||||
|     ret_code = ixmlParseBufferEx( xml_buf, xmlDoc ); |     ret_code = ixmlParseBufferEx( xml_buf, xmlDoc ); | ||||||
|     free( xml_buf ); |     free( xml_buf ); | ||||||
| @@ -3704,8 +3713,6 @@ FreeHandle( int Upnp_Handle ) | |||||||
|  |  | ||||||
| }  /****************** End of FreeHandle *********************/ | }  /****************** End of FreeHandle *********************/ | ||||||
|  |  | ||||||
| // **DBG**************************************************** |  | ||||||
| DBGONLY( |  | ||||||
|  |  | ||||||
| /************************************************************************** | /************************************************************************** | ||||||
|  * Function: PrintHandleInfo  |  * Function: PrintHandleInfo  | ||||||
| @@ -3719,56 +3726,61 @@ DBGONLY( | |||||||
|  * Return Values: int |  * Return Values: int | ||||||
|  *	UPNP_E_SUCCESS if successful else return appropriate error |  *	UPNP_E_SUCCESS if successful else return appropriate error | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|             int PrintHandleInfo( IN UpnpClient_Handle Hnd ) { | int PrintHandleInfo( IN UpnpClient_Handle Hnd ) | ||||||
|             struct Handle_Info * HndInfo; if( HandleTable[Hnd] != NULL ) { | { | ||||||
|             HndInfo = HandleTable[Hnd]; |     struct Handle_Info * HndInfo; | ||||||
|             DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__, |     if (HandleTable[Hnd] != NULL) { | ||||||
|                                  "Printing information for Handle_%d\n", |         HndInfo = HandleTable[Hnd]; | ||||||
|                                  Hnd ); |         DBGONLY( | ||||||
|                      UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__, |             UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__, | ||||||
|                                  "HType_%d\n", HndInfo->HType ); |                 "Printing information for Handle_%d\n", Hnd); | ||||||
| 		     DEVICEONLY( |             UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__, | ||||||
|                      if( HndInfo->HType != |                 "HType_%d\n", HndInfo->HType); | ||||||
|                          HND_CLIENT ) UpnpPrintf( UPNP_ALL, API, __FILE__, |             DEVICEONLY( | ||||||
|                                                   __LINE__, "DescURL_%s\n", |                 if(HndInfo->HType != HND_CLIENT) | ||||||
|                                                   HndInfo->DescURL ); ) |                     UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__, | ||||||
| 		     ) |                         "DescURL_%s\n", HndInfo->DescURL ); | ||||||
|             } |             ) | ||||||
|             else |         ) | ||||||
|             { |     } else { | ||||||
|             return UPNP_E_INVALID_HANDLE;} |         return UPNP_E_INVALID_HANDLE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return UPNP_E_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|             return UPNP_E_SUCCESS;} |  | ||||||
|    /****************** End of PrintHandleInfo *********************/ |    /****************** End of PrintHandleInfo *********************/ | ||||||
|  |  | ||||||
|             void printNodes( IXML_Node * tmpRoot, int depth ) { | void printNodes( IXML_Node * tmpRoot, int depth ) | ||||||
|             int i; | { | ||||||
|             IXML_NodeList * NodeList1; |     int i; | ||||||
|             IXML_Node * ChildNode1; |     IXML_NodeList *NodeList1; | ||||||
|             unsigned short NodeType; |     IXML_Node *ChildNode1; | ||||||
|             DOMString NodeValue; |     unsigned short NodeType; | ||||||
|             const DOMString NodeName; |     const DOMString NodeValue; | ||||||
|             NodeList1 = ixmlNode_getChildNodes( tmpRoot ); |     const DOMString NodeName; | ||||||
|             for( i = 0; i < 100; i++ ) { |     NodeList1 = ixmlNode_getChildNodes(tmpRoot); | ||||||
|             ChildNode1 = ixmlNodeList_item( NodeList1, i ); |     for (i = 0; i < 100; ++i) { | ||||||
|             if( ChildNode1 == NULL ) { |         ChildNode1 = ixmlNodeList_item(NodeList1, i); | ||||||
|             break;} |         if (ChildNode1 == NULL) { | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|      |      | ||||||
|             printNodes( ChildNode1, depth + 1 ); |         printNodes(ChildNode1, depth+1); | ||||||
|             NodeType = ixmlNode_getNodeType( ChildNode1 ); |         NodeType = ixmlNode_getNodeType(ChildNode1); | ||||||
|             NodeValue = ixmlNode_getNodeValue( ChildNode1 ); |         NodeValue = ixmlNode_getNodeValue(ChildNode1); | ||||||
|             NodeName = ixmlNode_getNodeName( ChildNode1 ); |         NodeName = ixmlNode_getNodeName(ChildNode1); | ||||||
|             DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__, |         DBGONLY( | ||||||
|                                  "DEPTH-%2d-IXML_Node Type %d, " |             UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__, | ||||||
|                                  "IXML_Node Name: %s, IXML_Node Value: %s\n", |                 "DEPTH-%2d-IXML_Node Type %d, " | ||||||
|                                  depth, NodeType, NodeName, NodeValue ); ) |                 "IXML_Node Name: %s, IXML_Node Value: %s\n", | ||||||
|             } |                 depth, NodeType, NodeName, NodeValue); | ||||||
|  | 	) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|             } |  | ||||||
|    /****************** End of printNodes *********************/ |    /****************** End of printNodes *********************/ | ||||||
|  |  | ||||||
|  )                              // dbgonly |  | ||||||
|  |  | ||||||
|     //******************************************************** |     //******************************************************** | ||||||
|     //* Name: getlocalhostname |     //* Name: getlocalhostname | ||||||
|     //* Description:  Function to get local IP address |     //* Description:  Function to get local IP address | ||||||
|   | |||||||
| @@ -196,11 +196,12 @@ addToAction( IN int response, | |||||||
|  |  | ||||||
|         if( response ) { |         if( response ) { | ||||||
|             sprintf( ActBuff, |             sprintf( ActBuff, | ||||||
|                      "<u:%sResponse xmlns:u=\"%s\"></u:%sResponse>", |                 "<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", | ||||||
|                      ActionName, ServType, ActionName ); |                 ActionName, ServType, ActionName ); | ||||||
|         } else { |         } else { | ||||||
|             sprintf( ActBuff, "<u:%s xmlns:u=\"%s\"></u:%s>", |             sprintf( ActBuff, | ||||||
|                      ActionName, ServType, ActionName ); |                 "<u:%s xmlns:u=\"%s\">\r\n</u:%s>", | ||||||
|  |                 ActionName, ServType, ActionName ); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         rc = ixmlParseBufferEx( ActBuff, ActionDoc ); |         rc = ixmlParseBufferEx( ActBuff, ActionDoc ); | ||||||
| @@ -274,11 +275,13 @@ makeAction( IN int response, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     if( response ) { |     if( response ) { | ||||||
|         sprintf( ActBuff, "<u:%sResponse xmlns:u=\"%s\"></u:%sResponse>", |         sprintf( ActBuff, | ||||||
|                  ActionName, ServType, ActionName ); |             "<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", | ||||||
|  |             ActionName, ServType, ActionName ); | ||||||
|     } else { |     } else { | ||||||
|         sprintf( ActBuff, "<u:%s xmlns:u=\"%s\"></u:%s>", |         sprintf( ActBuff, | ||||||
|                  ActionName, ServType, ActionName ); |             "<u:%s xmlns:u=\"%s\">\r\n</u:%s>", | ||||||
|  |             ActionName, ServType, ActionName ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if( ixmlParseBufferEx( ActBuff, &ActionDoc ) != IXML_SUCCESS ) { |     if( ixmlParseBufferEx( ActBuff, &ActionDoc ) != IXML_SUCCESS ) { | ||||||
| @@ -348,14 +351,9 @@ UpnpMakeAction( const char *ActionName, | |||||||
|     va_list ArgList; |     va_list ArgList; | ||||||
|     IXML_Document *out = NULL; |     IXML_Document *out = NULL; | ||||||
|  |  | ||||||
|     if( NumArg > 0 ) { |     va_start( ArgList, Arg ); | ||||||
|         va_start( ArgList, Arg ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     out = makeAction( 0, ActionName, ServType, NumArg, Arg, ArgList ); |     out = makeAction( 0, ActionName, ServType, NumArg, Arg, ArgList ); | ||||||
|     if( NumArg > 0 ) { |     va_end( ArgList ); | ||||||
|         va_end( ArgList ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return out; |     return out; | ||||||
| } | } | ||||||
| @@ -390,14 +388,9 @@ UpnpMakeActionResponse( const char *ActionName, | |||||||
|     va_list ArgList; |     va_list ArgList; | ||||||
|     IXML_Document *out = NULL; |     IXML_Document *out = NULL; | ||||||
|  |  | ||||||
|     if( NumArg > 0 ) { |     va_start( ArgList, Arg ); | ||||||
|         va_start( ArgList, Arg ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     out = makeAction( 1, ActionName, ServType, NumArg, Arg, ArgList ); |     out = makeAction( 1, ActionName, ServType, NumArg, Arg, ArgList ); | ||||||
|     if( NumArg > 0 ) { |     va_end( ArgList ); | ||||||
|         va_end( ArgList ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return out; |     return out; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -219,10 +219,11 @@ gena_unsubscribe( IN char *url, | |||||||
|     // make request msg |     // make request msg | ||||||
|     membuffer_init( &request ); |     membuffer_init( &request ); | ||||||
|     request.size_inc = 30; |     request.size_inc = 30; | ||||||
|     return_code = http_MakeMessage( &request, 1, 1, |     return_code = http_MakeMessage( | ||||||
|                                     "q" "ssc" "U" "c", |         &request, 1, 1, | ||||||
|                                     HTTPMETHOD_UNSUBSCRIBE, &dest_url, |         "q" "ssc" "Uc", | ||||||
|                                     "SID: ", sid ); |         HTTPMETHOD_UNSUBSCRIBE, &dest_url, | ||||||
|  |         "SID: ", sid ); | ||||||
|  |  | ||||||
|     //Not able to make the message so destroy the existing buffer |     //Not able to make the message so destroy the existing buffer | ||||||
|     if( return_code != 0 ) { |     if( return_code != 0 ) { | ||||||
| @@ -305,20 +306,21 @@ gena_subscribe( IN char *url, | |||||||
|     request.size_inc = 30; |     request.size_inc = 30; | ||||||
|     if( renewal_sid ) { |     if( renewal_sid ) { | ||||||
|         // renew subscription |         // renew subscription | ||||||
|         return_code = http_MakeMessage( &request, 1, 1, |         return_code = http_MakeMessage( | ||||||
|                                         "q" "ssc" "ssc" "c", |             &request, 1, 1, | ||||||
|                                         HTTPMETHOD_SUBSCRIBE, &dest_url, |             "q" "ssc" "sscc", | ||||||
|                                         "SID: ", renewal_sid, |             HTTPMETHOD_SUBSCRIBE, &dest_url, | ||||||
|                                         "TIMEOUT: Second-", timeout_str ); |             "SID: ", renewal_sid, | ||||||
|  |             "TIMEOUT: Second-", timeout_str ); | ||||||
|     } else { |     } else { | ||||||
|         // subscribe |         // subscribe | ||||||
|         return_code = http_MakeMessage( &request, 1, 1, |         return_code = http_MakeMessage( | ||||||
|                                         "q" "sssdsscc", |             &request, 1, 1, | ||||||
|                                         HTTPMETHOD_SUBSCRIBE, &dest_url, |             "q" "sssdsc" "sc" "sscc", | ||||||
|                                         "CALLBACK: <http://", LOCAL_HOST, |             HTTPMETHOD_SUBSCRIBE, &dest_url, | ||||||
|                                         ":", LOCAL_PORT, |             "CALLBACK: <http://", LOCAL_HOST, ":", LOCAL_PORT, "/>", | ||||||
|                                         "/>\r\n" "NT: upnp:event\r\n" |             "NT: upnp:event", | ||||||
|                                         "TIMEOUT: Second-", timeout_str ); | 	    "TIMEOUT: Second-", timeout_str ); | ||||||
|     } |     } | ||||||
|     if( return_code != 0 ) { |     if( return_code != 0 ) { | ||||||
|         return return_code; |         return return_code; | ||||||
|   | |||||||
| @@ -41,6 +41,7 @@ | |||||||
| #include "statcodes.h" | #include "statcodes.h" | ||||||
| #include "httpparser.h" | #include "httpparser.h" | ||||||
| #include "httpreadwrite.h" | #include "httpreadwrite.h" | ||||||
|  | #include "ssdplib.h" | ||||||
|  |  | ||||||
| #include "unixutil.h" | #include "unixutil.h" | ||||||
|  |  | ||||||
| @@ -218,9 +219,11 @@ notify_send_and_recv( IN uri_type * destination_url, | |||||||
|     } |     } | ||||||
|     // make start line and HOST header |     // make start line and HOST header | ||||||
|     membuffer_init( &start_msg ); |     membuffer_init( &start_msg ); | ||||||
|     if( http_MakeMessage( &start_msg, 1, 1, |     if (http_MakeMessage( | ||||||
|                           "q" "s", |         &start_msg, 1, 1, | ||||||
|                           HTTPMETHOD_NOTIFY, &url, mid_msg->buf ) != 0 ) { |         "q" "s", | ||||||
|  |         HTTPMETHOD_NOTIFY, &url, | ||||||
|  |         mid_msg->buf ) != 0 ) { | ||||||
|         membuffer_destroy( &start_msg ); |         membuffer_destroy( &start_msg ); | ||||||
|         sock_destroy( &info, SD_BOTH ); |         sock_destroy( &info, SD_BOTH ); | ||||||
|         return UPNP_E_OUTOF_MEMORY; |         return UPNP_E_OUTOF_MEMORY; | ||||||
| @@ -295,11 +298,12 @@ genaNotify( IN char *headers, | |||||||
|  |  | ||||||
|     // make 'end' msg (the part that won't vary with the destination) |     // make 'end' msg (the part that won't vary with the destination) | ||||||
|     endmsg.size_inc = 30; |     endmsg.size_inc = 30; | ||||||
|     if( http_MakeMessage( &mid_msg, 1, 1, |     if( http_MakeMessage( | ||||||
|                           "s" "ssc" "sdcc", |         &mid_msg, 1, 1, | ||||||
|                           headers, |         "s" "ssc" "sdcc", | ||||||
|                           "SID: ", sub->sid, |         headers, | ||||||
|                           "SEQ: ", sub->ToSendEventKey ) != 0 ) { |         "SID: ", sub->sid, | ||||||
|  |         "SEQ: ", sub->ToSendEventKey ) != 0 ) { | ||||||
|         membuffer_destroy( &mid_msg ); |         membuffer_destroy( &mid_msg ); | ||||||
|         return UPNP_E_OUTOF_MEMORY; |         return UPNP_E_OUTOF_MEMORY; | ||||||
|     } |     } | ||||||
| @@ -570,7 +574,7 @@ genaInitNotify( IN UpnpDevice_Handle device_handle, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: " |     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: " | ||||||
|              "%d\r\nNT: upnp:event\r\nNTS: upnp:propchange\r\n", |              "%zd\r\nNT: upnp:event\r\nNTS: upnp:propchange\r\n", | ||||||
|              strlen( propertySet ) + 1 ); |              strlen( propertySet ) + 1 ); | ||||||
|  |  | ||||||
|     //schedule thread for initial notification |     //schedule thread for initial notification | ||||||
| @@ -755,8 +759,8 @@ genaInitNotifyExt( IN UpnpDevice_Handle device_handle, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: " |     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: " | ||||||
|              "%d\r\nNT: upnp:event\r\nNTS: upnp:propchange\r\n", |              "%ld\r\nNT: upnp:event\r\nNTS: upnp:propchange\r\n", | ||||||
|              strlen( propertySet ) + 1 ); |              (long) strlen( propertySet ) + 1 ); | ||||||
|  |  | ||||||
|     //schedule thread for initial notification |     //schedule thread for initial notification | ||||||
|  |  | ||||||
| @@ -892,8 +896,8 @@ genaNotifyAllExt( IN UpnpDevice_Handle device_handle, | |||||||
|     //changed to add null terminator at end of content |     //changed to add null terminator at end of content | ||||||
|     //content length = (length in bytes of property set) + null char |     //content length = (length in bytes of property set) + null char | ||||||
|     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: " |     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: " | ||||||
|              "%d\r\nNT: upnp:event\r\nNTS: upnp:propchange\r\n", |              "%ld\r\nNT: upnp:event\r\nNTS: upnp:propchange\r\n", | ||||||
|              strlen( propertySet ) + 1 ); |              (long) strlen( propertySet ) + 1 ); | ||||||
|  |  | ||||||
|     HandleLock(  ); |     HandleLock(  ); | ||||||
|  |  | ||||||
| @@ -1053,9 +1057,9 @@ genaNotifyAll( IN UpnpDevice_Handle device_handle, | |||||||
|     } |     } | ||||||
|     //changed to add null terminator at end of content |     //changed to add null terminator at end of content | ||||||
|     //content length = (length in bytes of property set) + null char |     //content length = (length in bytes of property set) + null char | ||||||
|     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: %d\r\nNT:" |     sprintf( headers, "CONTENT-TYPE: text/xml\r\nCONTENT-LENGTH: %ld\r\nNT:" | ||||||
|              " upnp:event\r\nNTS: upnp:propchange\r\n", |              " upnp:event\r\nNTS: upnp:propchange\r\n", | ||||||
|              strlen( propertySet ) + 1 ); |              (long) strlen( propertySet ) + 1 ); | ||||||
|  |  | ||||||
|     HandleLock(  ); |     HandleLock(  ); | ||||||
|  |  | ||||||
| @@ -1164,10 +1168,14 @@ respond_ok( IN SOCKINFO * info, | |||||||
|  |  | ||||||
|     membuffer_init( &response ); |     membuffer_init( &response ); | ||||||
|     response.size_inc = 30; |     response.size_inc = 30; | ||||||
|     if( http_MakeMessage( &response, major, minor, |     if( http_MakeMessage( | ||||||
|                           "R" "D" "S" "N" "Xc" "ssc" "sc" "c", |         &response, major, minor, | ||||||
|                           HTTP_OK, 0, |         "R" "D" "S" "N" "Xc" "ssc" "scc", | ||||||
|                           "SID: ", sub->sid, timeout_str ) != 0 ) { |         HTTP_OK, | ||||||
|  |         (off_t)0, | ||||||
|  |         X_USER_AGENT, | ||||||
|  |         "SID: ", sub->sid, | ||||||
|  |         timeout_str ) != 0 ) { | ||||||
|         membuffer_destroy( &response ); |         membuffer_destroy( &response ); | ||||||
|         error_respond( info, HTTP_INTERNAL_SERVER_ERROR, request ); |         error_respond( info, HTTP_INTERNAL_SERVER_ERROR, request ); | ||||||
|         return UPNP_E_OUTOF_MEMORY; |         return UPNP_E_OUTOF_MEMORY; | ||||||
|   | |||||||
| @@ -45,7 +45,7 @@ | |||||||
| #else | #else | ||||||
|  #include <winsock2.h> |  #include <winsock2.h> | ||||||
|  |  | ||||||
|  #define socklen_t int |  typedef int socklen_t; | ||||||
|  #define EAFNOSUPPORT 97 |  #define EAFNOSUPPORT 97 | ||||||
| #endif | #endif | ||||||
| #include "unixutil.h" | #include "unixutil.h" | ||||||
| @@ -651,6 +651,11 @@ get_miniserver_sockets( MiniServerSockArray * out, | |||||||
|                               sizeof( struct sockaddr_in ) |                               sizeof( struct sockaddr_in ) | ||||||
|                  ); |                  ); | ||||||
|             if( sockError == UPNP_SOCKETERROR ) { |             if( sockError == UPNP_SOCKETERROR ) { | ||||||
|  | #ifdef WIN32 | ||||||
|  | 				errCode = WSAGetLastError(); | ||||||
|  | #else | ||||||
|  | 				errCode = errno;  | ||||||
|  | #endif | ||||||
|                 if( errno == EADDRINUSE ) |                 if( errno == EADDRINUSE ) | ||||||
|                     errCode = 1; |                     errCode = 1; | ||||||
|             } else |             } else | ||||||
|   | |||||||
| @@ -868,11 +868,11 @@ match_int( INOUT scanner_t * scanner, | |||||||
|            OUT int *value ) |            OUT int *value ) | ||||||
| { | { | ||||||
|     memptr token; |     memptr token; | ||||||
|     token_type_t tok_type; |     token_type_t   tok_type; | ||||||
|     parse_status_t status; |     parse_status_t status; | ||||||
|     int num; |     long           num; | ||||||
|     char *end_ptr; |     char          *end_ptr; | ||||||
|     size_t save_pos; |     size_t         save_pos; | ||||||
|  |  | ||||||
|     save_pos = scanner->cursor; |     save_pos = scanner->cursor; | ||||||
|  |  | ||||||
| @@ -2391,7 +2391,7 @@ int | |||||||
| raw_to_int( IN memptr * raw_value, | raw_to_int( IN memptr * raw_value, | ||||||
|             IN int base ) |             IN int base ) | ||||||
| { | { | ||||||
|     int num; |     long  num; | ||||||
|     char *end_ptr; |     char *end_ptr; | ||||||
|  |  | ||||||
|     if( raw_value->length == 0 ) { |     if( raw_value->length == 0 ) { | ||||||
|   | |||||||
| @@ -306,8 +306,8 @@ http_SendMessage( IN SOCKINFO * info, | |||||||
|     char *filename = NULL; |     char *filename = NULL; | ||||||
|     FILE *Fp; |     FILE *Fp; | ||||||
|     int num_read, |     int num_read, | ||||||
|       num_written, |       num_written; | ||||||
|       amount_to_be_read = 0; |     off_t amount_to_be_read = 0; | ||||||
|     va_list argp; |     va_list argp; | ||||||
|     char *file_buf = NULL, |     char *file_buf = NULL, | ||||||
|      *ChunkBuf = NULL; |      *ChunkBuf = NULL; | ||||||
| @@ -367,7 +367,7 @@ http_SendMessage( IN SOCKINFO * info, | |||||||
|                     return UPNP_E_FILE_READ_ERROR; |                     return UPNP_E_FILE_READ_ERROR; | ||||||
|                 } |                 } | ||||||
|             } else if( Instr && Instr->IsRangeActive ) { |             } else if( Instr && Instr->IsRangeActive ) { | ||||||
|                 if( fseek( Fp, Instr->RangeOffset, SEEK_CUR ) != 0 ) { |                 if( fseeko( Fp, Instr->RangeOffset, SEEK_CUR ) != 0 ) { | ||||||
|                     free( ChunkBuf ); |                     free( ChunkBuf ); | ||||||
|                     return UPNP_E_FILE_READ_ERROR; |                     return UPNP_E_FILE_READ_ERROR; | ||||||
|                 } |                 } | ||||||
| @@ -637,13 +637,14 @@ http_Download( IN const char *url_str, | |||||||
|     *temp = '/'; |     *temp = '/'; | ||||||
|     DBGONLY( UpnpPrintf |     DBGONLY( UpnpPrintf | ||||||
|              ( UPNP_INFO, HTTP, __FILE__, __LINE__, |              ( UPNP_INFO, HTTP, __FILE__, __LINE__, | ||||||
|                "HOSTNAME : %s Length : %d\n", hoststr, hostlen ); |                "HOSTNAME : %s Length : %zu\n", hoststr, hostlen ); | ||||||
|          ) |          ) | ||||||
|  |  | ||||||
|         ret_code = http_MakeMessage( &request, 1, 1, "QsbcDCUc", |         ret_code = http_MakeMessage( | ||||||
|                                      HTTPMETHOD_GET, url.pathquery.buff, |             &request, 1, 1, | ||||||
|                                      url.pathquery.size, "HOST: ", hoststr, |             "QsbcDCUc", | ||||||
|                                      hostlen ); |             HTTPMETHOD_GET, url.pathquery.buff, url.pathquery.size, | ||||||
|  |             "HOST: ", hoststr, hostlen ); | ||||||
|     if( ret_code != 0 ) { |     if( ret_code != 0 ) { | ||||||
|         DBGONLY( UpnpPrintf |         DBGONLY( UpnpPrintf | ||||||
|                  ( UPNP_INFO, HTTP, __FILE__, __LINE__, |                  ( UPNP_INFO, HTTP, __FILE__, __LINE__, | ||||||
| @@ -796,21 +797,27 @@ MakePostMessage( const char *url_str, | |||||||
|          ) |          ) | ||||||
|  |  | ||||||
|         if( contentLength >= 0 ) { |         if( contentLength >= 0 ) { | ||||||
|         ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUTNc", |         ret_code = http_MakeMessage( | ||||||
|                                      HTTPMETHOD_POST, url->pathquery.buff, |             request, 1, 1, | ||||||
|                                      url->pathquery.size, "HOST: ", |             "QsbcDCUTNc", | ||||||
|                                      hoststr, hostlen, contentType, |             HTTPMETHOD_POST, url->pathquery.buff, url->pathquery.size, | ||||||
|                                      contentLength ); |             "HOST: ", hoststr, hostlen, | ||||||
|  |             contentType, | ||||||
|  |             (off_t)contentLength ); | ||||||
|     } else if( contentLength == UPNP_USING_CHUNKED ) { |     } else if( contentLength == UPNP_USING_CHUNKED ) { | ||||||
|         ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUTKc", |         ret_code = http_MakeMessage( | ||||||
|                                      HTTPMETHOD_POST, url->pathquery.buff, |             request, 1, 1, | ||||||
|                                      url->pathquery.size, "HOST: ", |             "QsbcDCUTKc", | ||||||
|                                      hoststr, hostlen, contentType ); |             HTTPMETHOD_POST, url->pathquery.buff, url->pathquery.size, | ||||||
|  |             "HOST: ", hoststr, hostlen, | ||||||
|  |             contentType ); | ||||||
|     } else if( contentLength == UPNP_UNTIL_CLOSE ) { |     } else if( contentLength == UPNP_UNTIL_CLOSE ) { | ||||||
|         ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUTc", |         ret_code = http_MakeMessage( | ||||||
|                                      HTTPMETHOD_POST, url->pathquery.buff, |             request, 1, 1, | ||||||
|                                      url->pathquery.size, "HOST: ", |             "QsbcDCUTc", | ||||||
|                                      hoststr, hostlen, contentType ); |             HTTPMETHOD_POST, url->pathquery.buff, url->pathquery.size, | ||||||
|  |             "HOST: ", hoststr, hostlen, | ||||||
|  |             contentType ); | ||||||
|     } else { |     } else { | ||||||
|         ret_code = UPNP_E_INVALID_PARAM; |         ret_code = UPNP_E_INVALID_PARAM; | ||||||
|     } |     } | ||||||
| @@ -1131,9 +1138,11 @@ MakeGetMessage( const char *url_str, | |||||||
|         querylen = url->pathquery.size; |         querylen = url->pathquery.size; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUc", |     ret_code = http_MakeMessage( | ||||||
|                                  HTTPMETHOD_GET, querystr, querylen, |         request, 1, 1, | ||||||
|                                  "HOST: ", hoststr, hostlen ); |         "QsbcDCUc", | ||||||
|  |         HTTPMETHOD_GET, querystr, querylen, | ||||||
|  |         "HOST: ", hoststr, hostlen ); | ||||||
|  |  | ||||||
|     if( ret_code != 0 ) { |     if( ret_code != 0 ) { | ||||||
|         DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, |         DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, | ||||||
| @@ -1729,8 +1738,11 @@ http_SendStatusResponse( IN SOCKINFO * info, | |||||||
|     membuffer_init( &membuf ); |     membuffer_init( &membuf ); | ||||||
|     membuf.size_inc = 70; |     membuf.size_inc = 70; | ||||||
|  |  | ||||||
|     ret = http_MakeMessage( &membuf, response_major, response_minor, "RSCB", http_status_code,  // response start line |     ret = http_MakeMessage( | ||||||
|                             http_status_code ); // body |         &membuf, response_major, response_minor, | ||||||
|  |         "RSCB", | ||||||
|  |         http_status_code,  // response start line | ||||||
|  |         http_status_code ); // body | ||||||
|     if( ret == 0 ) { |     if( ret == 0 ) { | ||||||
|         timeout = HTTP_DEFAULT_TIMEOUT; |         timeout = HTTP_DEFAULT_TIMEOUT; | ||||||
|         ret = http_SendMessage( info, &timeout, "b", |         ret = http_SendMessage( info, &timeout, "b", | ||||||
| @@ -1757,28 +1769,30 @@ http_SendStatusResponse( IN SOCKINFO * info, | |||||||
| *		specified in the input parameters. | *		specified in the input parameters. | ||||||
| * | * | ||||||
| *		fmt types: | *		fmt types: | ||||||
| *		's':	arg = const char* C_string | *		'B':	arg = int status_code  | ||||||
|  | *				appends content-length, content-type and HTML body for given code | ||||||
| *		'b':	arg1 = const char* buf; arg2 = size_t buf_length  | *		'b':	arg1 = const char* buf; arg2 = size_t buf_length  | ||||||
| *				memory ptr | *				memory ptr | ||||||
| *		'c':	(no args) appends CRLF "\r\n" |  | ||||||
| *		'd':	arg = int number		// appends decimal number |  | ||||||
| *		't':	arg = time_t * gmt_time	// appends time in RFC 1123 fmt |  | ||||||
| *		'D':	(no args) appends HTTP DATE: header |  | ||||||
| *		'S':	(no args) appends HTTP SERVER: header |  | ||||||
| *		'U':	(no args) appends HTTP USER-AGENT: header |  | ||||||
| *		'C':	(no args) appends a HTTP CONNECTION: close header  | *		'C':	(no args) appends a HTTP CONNECTION: close header  | ||||||
| *				depending on major,minor version | *				depending on major,minor version | ||||||
|  | *		'c':	(no args) appends CRLF "\r\n" | ||||||
|  | *		'D':	(no args) appends HTTP DATE: header | ||||||
|  | *		'd':	arg = int number		// appends decimal number | ||||||
|  | *		'G':	arg = range information         // add range header | ||||||
|  | *		'h':	arg = off_t number		// appends off_t number | ||||||
|  | *		'K':	(no args)                       // add chunky header | ||||||
| *		'N':	arg1 = int content_length	// content-length header | *		'N':	arg1 = int content_length	// content-length header | ||||||
|  | *               'q':    arg1 = http_method_t, arg2 = (uri_type *) // request start line and HOST header | ||||||
| *		'Q':	arg1 = http_method_t; arg2 = char* url;  | *		'Q':	arg1 = http_method_t; arg2 = char* url;  | ||||||
| *				arg3 = int url_length // start line of request | *				arg3 = int url_length // start line of request | ||||||
| *		'R':	arg = int status_code // adds a response start line | *		'R':	arg = int status_code // adds a response start line | ||||||
| *		'B':	arg = int status_code  | *		'S':	(no args) appends HTTP SERVER: header | ||||||
| *				appends content-length, content-type and HTML body for given code | *		's':	arg = const char* C_string | ||||||
| *		'T':	arg = char * content_type; format e.g: "text/html";	 | *		'T':	arg = char * content_type; format e.g: "text/html";	 | ||||||
| *				 content-type header | *				 content-type header | ||||||
| * --- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld@users.sourceforge.net> | *		't':	arg = time_t * gmt_time	// appends time in RFC 1123 fmt | ||||||
| *       'X':    arg = const char useragent; "redsonic" HTTP X-User-Agent: useragent | *		'U':	(no args) appends HTTP USER-AGENT: header | ||||||
| * --- PATCH END --- | *               'X':    arg = const char useragent; "redsonic" HTTP X-User-Agent: useragent | ||||||
| * | * | ||||||
| *	Return : int; | *	Return : int; | ||||||
| *		0 - On Success | *		0 - On Success | ||||||
| @@ -1797,6 +1811,7 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|     char c; |     char c; | ||||||
|     char *s = NULL; |     char *s = NULL; | ||||||
|     int num; |     int num; | ||||||
|  |     off_t bignum; | ||||||
|     size_t length; |     size_t length; | ||||||
|     time_t *loc_time; |     time_t *loc_time; | ||||||
|     time_t curr_time; |     time_t curr_time; | ||||||
| @@ -1884,6 +1899,16 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         else if( c == 'h' )     // off_t | ||||||
|  |         { | ||||||
|  |             bignum = ( off_t )va_arg( argp, off_t ); | ||||||
|  |  | ||||||
|  |             sprintf( tempbuf, "%lld", (long long)bignum ); | ||||||
|  |             if( membuffer_append( buf, tempbuf, strlen( tempbuf ) ) != 0 ) { | ||||||
|  |                 goto error_handler; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|         else if( c == 't' || c == 'D' ) // date |         else if( c == 't' || c == 'D' ) // date | ||||||
|         { |         { | ||||||
|             if( c == 'D' ) { |             if( c == 'D' ) { | ||||||
| @@ -1925,12 +1950,13 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|  |  | ||||||
|         else if( c == 'N' ) { |         else if( c == 'N' ) { | ||||||
|             // content-length header |             // content-length header | ||||||
|             num = ( int )va_arg( argp, int ); |             bignum = ( off_t )va_arg( argp, off_t ); | ||||||
|  |  | ||||||
|             assert( num >= 0 ); |             assert( bignum >= 0 ); | ||||||
|             if( http_MakeMessage |             if (http_MakeMessage( | ||||||
|                 ( buf, http_major_version, http_minor_version, "sdc", |                 buf, http_major_version, http_minor_version, | ||||||
|                   "CONTENT-LENGTH: ", num ) != 0 ) { |                 "shc", | ||||||
|  |                 "CONTENT-LENGTH: ", bignum ) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -1940,14 +1966,14 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|  |  | ||||||
|             temp_str = ( c == 'S' ) ? "SERVER: " : "USER-AGENT: "; |             temp_str = ( c == 'S' ) ? "SERVER: " : "USER-AGENT: "; | ||||||
|             get_sdk_info( tempbuf ); |             get_sdk_info( tempbuf ); | ||||||
|             if( http_MakeMessage |             if (http_MakeMessage( | ||||||
|                 ( buf, http_major_version, http_minor_version, "ss", |                 buf, http_major_version, http_minor_version, | ||||||
|                   temp_str, tempbuf ) != 0 ) { |                 "ss", | ||||||
|  |                 temp_str, tempbuf ) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
| /* --- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld@users.sourceforge.net> */ |  | ||||||
| 	else if( c == 'X' )          // C string | 	else if( c == 'X' )          // C string | ||||||
|         { |         { | ||||||
|             s = ( char * )va_arg( argp, char * ); |             s = ( char * )va_arg( argp, char * ); | ||||||
| @@ -1962,9 +1988,6 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|          |          | ||||||
| /* --- PATCH END --- */ |  | ||||||
|      |  | ||||||
|  |  | ||||||
|         else if( c == 'R' ) { |         else if( c == 'R' ) { | ||||||
|             // response start line |             // response start line | ||||||
|             //   e.g.: 'HTTP/1.1 200 OK' |             //   e.g.: 'HTTP/1.1 200 OK' | ||||||
| @@ -1979,9 +2002,11 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|  |  | ||||||
|             // str |             // str | ||||||
|             status_msg = http_get_code_text( status_code ); |             status_msg = http_get_code_text( status_code ); | ||||||
|             if( http_MakeMessage |             if (http_MakeMessage( | ||||||
|                 ( buf, http_major_version, http_minor_version, "ssc", |                 buf, http_major_version, http_minor_version, | ||||||
|                   tempbuf, status_msg ) != 0 ) { |                 "ssc", | ||||||
|  |                 tempbuf, | ||||||
|  |                 status_msg ) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -1996,11 +2021,14 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|                      "<html><body><h1>", |                      "<html><body><h1>", | ||||||
|                      status_code, http_get_code_text( status_code ), |                      status_code, http_get_code_text( status_code ), | ||||||
|                      "</h1></body></html>" ); |                      "</h1></body></html>" ); | ||||||
|             num = strlen( tempbuf ); |             bignum = strlen( tempbuf ); | ||||||
|  |  | ||||||
|             if( http_MakeMessage( buf, http_major_version, http_minor_version, "NTcs", num, // content-length |             if (http_MakeMessage( | ||||||
|                                   "text/html",  // content-type |                     buf, http_major_version, http_minor_version, | ||||||
|                                   tempbuf ) != 0 )  // body |                     "NTcs", | ||||||
|  |                     bignum, // content-length | ||||||
|  |                     "text/html",  // content-type | ||||||
|  |                     tempbuf ) != 0 )  // body | ||||||
|             { |             { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
| @@ -2009,17 +2037,18 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|         else if( c == 'Q' ) { |         else if( c == 'Q' ) { | ||||||
|             // request start line |             // request start line | ||||||
|             // GET /foo/bar.html HTTP/1.1\r\n |             // GET /foo/bar.html HTTP/1.1\r\n | ||||||
|             // |  | ||||||
|  |  | ||||||
|             method = ( http_method_t ) va_arg( argp, http_method_t ); |             method = ( http_method_t ) va_arg( argp, http_method_t ); | ||||||
|             method_str = method_to_str( method ); |             method_str = method_to_str( method ); | ||||||
|             url_str = ( const char * )va_arg( argp, const char * ); |             url_str = ( const char * )va_arg( argp, const char * ); | ||||||
|             num = ( int )va_arg( argp, int );   // length of url_str |             num = ( int )va_arg( argp, int );   // length of url_str | ||||||
|  |  | ||||||
|             if( http_MakeMessage( buf, http_major_version, http_minor_version, "ssbsdsdc", method_str,  // method |             if (http_MakeMessage( | ||||||
|                                   " ", url_str, num,    // url |                 buf, http_major_version, http_minor_version, | ||||||
|                                   " HTTP/", http_major_version, ".", |                 "ssbsdsdc", | ||||||
|                                   http_minor_version ) != 0 ) { |                 method_str,  // method | ||||||
|  |                 " ", url_str, num,    // url | ||||||
|  |                 " HTTP/", http_major_version, ".", http_minor_version ) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -2036,10 +2065,11 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if( http_MakeMessage |             if (http_MakeMessage( | ||||||
|                 ( buf, http_major_version, http_minor_version, "Q" "sbc", |                 buf, http_major_version, http_minor_version, | ||||||
|                   method, url.pathquery.buff, url.pathquery.size, "HOST: ", |                 "Q" "sbc", | ||||||
|                   url.hostport.text.buff, url.hostport.text.size ) != 0 ) { |                 method, url.pathquery.buff, url.pathquery.size, | ||||||
|  |                 "HOST: ", url.hostport.text.buff, url.hostport.text.size ) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -2048,9 +2078,10 @@ http_MakeMessage( INOUT membuffer * buf, | |||||||
|             // content type header |             // content type header | ||||||
|             temp_str = ( const char * )va_arg( argp, const char * );    // type/subtype format |             temp_str = ( const char * )va_arg( argp, const char * );    // type/subtype format | ||||||
|  |  | ||||||
|             if( http_MakeMessage |             if (http_MakeMessage( | ||||||
|                 ( buf, http_major_version, http_minor_version, "ssc", |                 buf, http_major_version, http_minor_version, | ||||||
|                   "CONTENT-TYPE: ", temp_str ) != 0 ) { | 		"ssc", | ||||||
|  |                 "CONTENT-TYPE: ", temp_str ) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -2174,16 +2205,13 @@ MakeGetMessageEx( const char *url_str, | |||||||
|                              hostlen ); |                              hostlen ); | ||||||
|              ) |              ) | ||||||
|  |  | ||||||
|             errCode = http_MakeMessage( request, |             errCode = http_MakeMessage( | ||||||
|                                         1, |                 request, 1, 1, | ||||||
|                                         1, |                 "QsbcGDCUc", | ||||||
|                                         "QsbcGDCUc", |                 HTTPMETHOD_GET, | ||||||
|                                         HTTPMETHOD_GET, |                 url->pathquery.buff, url->pathquery.size, | ||||||
|                                         url->pathquery.buff, |                 "HOST: ", hoststr, hostlen, | ||||||
|                                         url->pathquery.size, |                 pRangeSpecifier ); | ||||||
|                                         "HOST: ", |  | ||||||
|                                         hoststr, |  | ||||||
|                                         hostlen, pRangeSpecifier ); |  | ||||||
|  |  | ||||||
|         if( errCode != 0 ) { |         if( errCode != 0 ) { | ||||||
|             DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, |             DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, | ||||||
|   | |||||||
| @@ -632,8 +632,8 @@ get_file_info( IN const char *filename, | |||||||
|     rc = get_content_type( filename, &info->content_type ); |     rc = get_content_type( filename, &info->content_type ); | ||||||
|  |  | ||||||
|     DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, |     DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, | ||||||
|                          "file info: %s, length: %d, last_mod=%s readable=%d\n", |                          "file info: %s, length: %lld, last_mod=%s readable=%d\n", | ||||||
|                          filename, info->file_length, |                          filename, (long long)info->file_length, | ||||||
|                          asctime( gmtime( &info->last_modified ) ), |                          asctime( gmtime( &info->last_modified ) ), | ||||||
|                          info->is_readable ); ) |                          info->is_readable ); ) | ||||||
|  |  | ||||||
| @@ -871,8 +871,8 @@ StrTok( char **Src, | |||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| GetNextRange( char **SrcRangeStr, | GetNextRange( char **SrcRangeStr, | ||||||
|               int *FirstByte, |               off_t *FirstByte, | ||||||
|               int *LastByte ) |               off_t *LastByte ) | ||||||
| { | { | ||||||
|     char *Ptr, |     char *Ptr, | ||||||
|      *Tok; |      *Tok; | ||||||
| @@ -936,11 +936,11 @@ GetNextRange( char **SrcRangeStr, | |||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier, | CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier, | ||||||
|                                long FileLength, |                                off_t FileLength, | ||||||
|                                OUT struct SendInstruction *Instr ) |                                OUT struct SendInstruction *Instr ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     int FirstByte, |     off_t FirstByte, | ||||||
|       LastByte; |       LastByte; | ||||||
|     char *RangeInput, |     char *RangeInput, | ||||||
|      *Ptr; |      *Ptr; | ||||||
| @@ -984,28 +984,36 @@ CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier, | |||||||
|  |  | ||||||
|             Instr->RangeOffset = FirstByte; |             Instr->RangeOffset = FirstByte; | ||||||
|             Instr->ReadSendSize = LastByte - FirstByte + 1; |             Instr->ReadSendSize = LastByte - FirstByte + 1; | ||||||
|             sprintf( Instr->RangeHeader, "CONTENT-RANGE: bytes %d-%d/%ld\r\n", FirstByte, LastByte, FileLength );   //Data between two range. |             sprintf( Instr->RangeHeader, | ||||||
|  |                 "CONTENT-RANGE: bytes %lld-%lld/%lld\r\n", | ||||||
|  |                 (long long)FirstByte, | ||||||
|  |                 (long long)LastByte, | ||||||
|  |                 (long long)FileLength );   //Data between two range. | ||||||
|         } else if( FirstByte >= 0 && LastByte == -1 |         } else if( FirstByte >= 0 && LastByte == -1 | ||||||
|                    && FirstByte < FileLength ) { |                    && FirstByte < FileLength ) { | ||||||
|             Instr->RangeOffset = FirstByte; |             Instr->RangeOffset = FirstByte; | ||||||
|             Instr->ReadSendSize = FileLength - FirstByte; |             Instr->ReadSendSize = FileLength - FirstByte; | ||||||
|             sprintf( Instr->RangeHeader, |             sprintf( Instr->RangeHeader, | ||||||
|                      "CONTENT-RANGE: bytes %d-%ld/%ld\r\n", FirstByte, |                      "CONTENT-RANGE: bytes %lld-%lld/%lld\r\n", | ||||||
|                      FileLength - 1, FileLength ); |                      (long long)FirstByte, | ||||||
|  |                      (long long)(FileLength - 1), | ||||||
|  |                      (long long)FileLength ); | ||||||
|         } else if( FirstByte == -1 && LastByte > 0 ) { |         } else if( FirstByte == -1 && LastByte > 0 ) { | ||||||
|             if( LastByte >= FileLength ) { |             if( LastByte >= FileLength ) { | ||||||
|                 Instr->RangeOffset = 0; |                 Instr->RangeOffset = 0; | ||||||
|                 Instr->ReadSendSize = FileLength; |                 Instr->ReadSendSize = FileLength; | ||||||
|                 sprintf( Instr->RangeHeader, |                 sprintf( Instr->RangeHeader, | ||||||
|                          "CONTENT-RANGE: bytes 0-%ld/%ld\r\n", |                          "CONTENT-RANGE: bytes 0-%lld/%lld\r\n", | ||||||
|                          FileLength - 1, FileLength ); |                          (long long)(FileLength - 1), | ||||||
|  |                          (long long)FileLength ); | ||||||
|             } else { |             } else { | ||||||
|                 Instr->RangeOffset = FileLength - LastByte; |                 Instr->RangeOffset = FileLength - LastByte; | ||||||
|                 Instr->ReadSendSize = LastByte; |                 Instr->ReadSendSize = LastByte; | ||||||
|                 sprintf( Instr->RangeHeader, |                 sprintf( Instr->RangeHeader, | ||||||
|                          "CONTENT-RANGE: bytes %ld-%ld/%ld\r\n", |                          "CONTENT-RANGE: bytes %lld-%lld/%lld\r\n", | ||||||
|                          FileLength - LastByte + 1, FileLength, |                          (long long)(FileLength - LastByte + 1), | ||||||
|                          FileLength ); |                          (long long)FileLength, | ||||||
|  |                          (long long)FileLength ); | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             free( RangeInput ); |             free( RangeInput ); | ||||||
| @@ -1042,7 +1050,7 @@ CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier, | |||||||
| int | int | ||||||
| CheckOtherHTTPHeaders( IN http_message_t * Req, | CheckOtherHTTPHeaders( IN http_message_t * Req, | ||||||
|                        OUT struct SendInstruction *RespInstr, |                        OUT struct SendInstruction *RespInstr, | ||||||
|                        int FileSize ) |                        off_t FileSize ) | ||||||
| { | { | ||||||
|     http_header_t *header; |     http_header_t *header; | ||||||
|     ListNode *node; |     ListNode *node; | ||||||
| @@ -1184,7 +1192,6 @@ process_request( IN http_message_t * req, | |||||||
|     int code; |     int code; | ||||||
|     int err_code; |     int err_code; | ||||||
|  |  | ||||||
|     //membuffer content_type; |  | ||||||
|     char *request_doc; |     char *request_doc; | ||||||
|     struct File_Info finfo; |     struct File_Info finfo; | ||||||
|     xboolean using_alias; |     xboolean using_alias; | ||||||
| @@ -1208,7 +1215,6 @@ process_request( IN http_message_t * req, | |||||||
|     // init |     // init | ||||||
|     request_doc = NULL; |     request_doc = NULL; | ||||||
|     finfo.content_type = NULL; |     finfo.content_type = NULL; | ||||||
|     //membuffer_init( &content_type ); |  | ||||||
|     alias_grabbed = FALSE; |     alias_grabbed = FALSE; | ||||||
|     err_code = HTTP_INTERNAL_SERVER_ERROR;  // default error |     err_code = HTTP_INTERNAL_SERVER_ERROR;  // default error | ||||||
|     using_virtual_dir = FALSE; |     using_virtual_dir = FALSE; | ||||||
| @@ -1362,7 +1368,7 @@ process_request( IN http_message_t * req, | |||||||
|  |  | ||||||
|     RespInstr->ReadSendSize = finfo.file_length; |     RespInstr->ReadSendSize = finfo.file_length; | ||||||
|  |  | ||||||
|     //Check other header field. |     // Check other header field. | ||||||
|     if( ( err_code = |     if( ( err_code = | ||||||
|           CheckOtherHTTPHeaders( req, RespInstr, |           CheckOtherHTTPHeaders( req, RespInstr, | ||||||
|                                  finfo.file_length ) ) != HTTP_OK ) { |                                  finfo.file_length ) ) != HTTP_OK ) { | ||||||
| @@ -1376,85 +1382,80 @@ process_request( IN http_message_t * req, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     if( RespInstr->IsRangeActive && RespInstr->IsChunkActive ) { |     if( RespInstr->IsRangeActive && RespInstr->IsChunkActive ) { | ||||||
|  |         // Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT | ||||||
| /* - PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> |         // Transfer-Encoding: chunked | ||||||
|  * added X-User-Agent header |         if (http_MakeMessage( | ||||||
|  */ |             headers, resp_major, resp_minor, | ||||||
|          |             "R" "T" "GKD" "s" "tcS" "XcCc", | ||||||
|         //Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT |             HTTP_PARTIAL_CONTENT, // status code | ||||||
|         //Transfer-Encoding: chunked |             finfo.content_type,   // content type | ||||||
|         // K means add chunky header ang G means range header. |             RespInstr,            // range info | ||||||
|         if( http_MakeMessage( headers, resp_major, resp_minor, "RTGKDstcSXcCc", HTTP_PARTIAL_CONTENT, // status code |             "LAST-MODIFIED: ", | ||||||
|                               // RespInstr->ReadSendSize,// content length | 	    &finfo.last_modified, | ||||||
|                               finfo.content_type, |             X_USER_AGENT) != 0 ) { | ||||||
|                               //     content_type.buf,            // content type |  | ||||||
|                               RespInstr,    // Range |  | ||||||
|                               "LAST-MODIFIED: ", |  | ||||||
|                               &finfo.last_modified, |  | ||||||
|                               X_USER_AGENT) != 0 ) { |  | ||||||
|             goto error_handler; |             goto error_handler; | ||||||
|         } |         } | ||||||
|     } else if( RespInstr->IsRangeActive && !RespInstr->IsChunkActive ) { |     } else if( RespInstr->IsRangeActive && !RespInstr->IsChunkActive ) { | ||||||
|  |  | ||||||
|         //Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT |         // Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT | ||||||
|         //Transfer-Encoding: chunked |         // Transfer-Encoding: chunked | ||||||
|         // K means add chunky header ang G means range header. |         if (http_MakeMessage( | ||||||
|         if( http_MakeMessage( headers, resp_major, resp_minor, "RNTGDstcSXcCc", HTTP_PARTIAL_CONTENT, // status code |             headers, resp_major, resp_minor, | ||||||
|                               RespInstr->ReadSendSize,  // content length |             "R" "N" "T" "GD" "s" "tcS" "XcCc", | ||||||
|                               finfo.content_type, |             HTTP_PARTIAL_CONTENT,     // status code | ||||||
|                               //content_type.buf,            // content type |             RespInstr->ReadSendSize,  // content length | ||||||
|                               RespInstr,    //Range Info |             finfo.content_type,       // content type | ||||||
|                               "LAST-MODIFIED: ", |             RespInstr,                // range info | ||||||
|                               &finfo.last_modified, |             "LAST-MODIFIED: ", | ||||||
|                               X_USER_AGENT) != 0 ) { | 	    &finfo.last_modified, | ||||||
|  |             X_USER_AGENT) != 0 ) { | ||||||
|             goto error_handler; |             goto error_handler; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     } else if( !RespInstr->IsRangeActive && RespInstr->IsChunkActive ) { |     } else if( !RespInstr->IsRangeActive && RespInstr->IsChunkActive ) { | ||||||
|  |         // Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT | ||||||
|         //Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT |         // Transfer-Encoding: chunked | ||||||
|         //Transfer-Encoding: chunked |         if (http_MakeMessage( | ||||||
|         // K means add chunky header ang G means range header. |             headers, resp_major, resp_minor, | ||||||
|         if( http_MakeMessage( headers, resp_major, resp_minor, "RKTDstcSXcCc", HTTP_OK,   // status code |             "RK" "TD" "s" "tcS" "XcCc", | ||||||
|                               //RespInstr->ReadSendSize,// content length |             HTTP_OK,            // status code | ||||||
|                               finfo.content_type, |             finfo.content_type, // content type | ||||||
|                               // content_type.buf,            // content type |             "LAST-MODIFIED: ", | ||||||
|                               "LAST-MODIFIED: ", | 	    &finfo.last_modified, | ||||||
|                               &finfo.last_modified, |             X_USER_AGENT) != 0 ) { | ||||||
|                               X_USER_AGENT) != 0 ) { |  | ||||||
|             goto error_handler; |             goto error_handler; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     } else { |     } else { // !RespInstr->IsRangeActive && !RespInstr->IsChunkActive | ||||||
|         if( RespInstr->ReadSendSize >= 0 ) { |         if (RespInstr->ReadSendSize >= 0) { | ||||||
|             //Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT |             // Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT | ||||||
|             //Transfer-Encoding: chunked |             // Transfer-Encoding: chunked | ||||||
|             // K means add chunky header ang G means range header. |             if (http_MakeMessage( | ||||||
|             if( http_MakeMessage( headers, resp_major, resp_minor, "RNTDstcSXcCc", HTTP_OK,   // status code |                 headers, resp_major, resp_minor, | ||||||
|                                   RespInstr->ReadSendSize,  // content length |                 "R" "N" "TD" "s" "tcS" "XcCc", | ||||||
|                                   finfo.content_type, |                 HTTP_OK,                 // status code | ||||||
|                                   //content_type.buf,          // content type |                 RespInstr->ReadSendSize, // content length | ||||||
|                                   "LAST-MODIFIED: ", |                 finfo.content_type,      // content type | ||||||
|                                   &finfo.last_modified, |                 "LAST-MODIFIED: ", | ||||||
|                                   X_USER_AGENT) != 0 ) { | 		&finfo.last_modified, | ||||||
|  |                 X_USER_AGENT) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             //Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT |             // Content-Range: bytes 222-3333/4000  HTTP_PARTIAL_CONTENT | ||||||
|             //Transfer-Encoding: chunked |             // Transfer-Encoding: chunked | ||||||
|             // K means add chunky header ang G means range header. |             if (http_MakeMessage( | ||||||
|             if( http_MakeMessage( headers, resp_major, resp_minor, "RTDstcSXcCc", HTTP_OK,    // status code |                 headers, resp_major, resp_minor, | ||||||
|                                   //RespInstr->ReadSendSize,// content length |                 "R" "TD" "s" "tcS" "XcCc", | ||||||
|                                   finfo.content_type, |                 HTTP_OK,            // status code | ||||||
|                                   //content_type.buf,          // content type |                 finfo.content_type, // content type | ||||||
|                                   "LAST-MODIFIED: ", |                 "LAST-MODIFIED: ", | ||||||
|                                   &finfo.last_modified, | 		&finfo.last_modified, | ||||||
|                                   X_USER_AGENT) != 0 ) { |                 X_USER_AGENT) != 0 ) { | ||||||
|                 goto error_handler; |                 goto error_handler; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| /* -- PATCH END -- */ |  | ||||||
|  |  | ||||||
|     if( req->method == HTTPMETHOD_HEAD ) { |     if( req->method == HTTPMETHOD_HEAD ) { | ||||||
|         *rtype = RESP_HEADERS; |         *rtype = RESP_HEADERS; | ||||||
| @@ -1468,8 +1469,8 @@ process_request( IN http_message_t * req, | |||||||
|         *rtype = RESP_FILEDOC; |         *rtype = RESP_FILEDOC; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     //simple get http 0.9 as specified in http 1.0 |     // simple get http 0.9 as specified in http 1.0 | ||||||
|     //don't send headers |     // don't send headers | ||||||
|     if( req->method == HTTPMETHOD_SIMPLEGET ) { |     if( req->method == HTTPMETHOD_SIMPLEGET ) { | ||||||
|         membuffer_destroy( headers ); |         membuffer_destroy( headers ); | ||||||
|     } |     } | ||||||
| @@ -1479,7 +1480,6 @@ process_request( IN http_message_t * req, | |||||||
|   error_handler: |   error_handler: | ||||||
|     free( request_doc ); |     free( request_doc ); | ||||||
|     ixmlFreeDOMString( finfo.content_type ); |     ixmlFreeDOMString( finfo.content_type ); | ||||||
|     //  membuffer_destroy( &content_type ); |  | ||||||
|     if( err_code != UPNP_E_SUCCESS && alias_grabbed ) { |     if( err_code != UPNP_E_SUCCESS && alias_grabbed ) { | ||||||
|         alias_release( alias ); |         alias_release( alias ); | ||||||
|     } |     } | ||||||
| @@ -1738,12 +1738,12 @@ web_server_callback( IN http_parser_t * parser, | |||||||
|                                           &RespInstr ); |                                           &RespInstr ); | ||||||
|                 //Send response. |                 //Send response. | ||||||
|  |  | ||||||
| /* - PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> |                 http_MakeMessage( | ||||||
|  * added X-User-Agent header |                     &headers, 1, 1, | ||||||
|  */ |                     "RTDSXcCc", | ||||||
|                 http_MakeMessage( &headers, 1, 1, "RTDSXcCc", ret, |                     ret, | ||||||
|                                   "text/html", X_USER_AGENT ); |                     "text/html", | ||||||
| /* - PATCH END --- */ |                     X_USER_AGENT ); | ||||||
|  |  | ||||||
|                 http_SendMessage( info, &timeout, "b", headers.buf, |                 http_SendMessage( info, &timeout, "b", headers.buf, | ||||||
|                                   headers.length ); |                                   headers.length ); | ||||||
|   | |||||||
| @@ -53,6 +53,10 @@ | |||||||
| #endif | #endif | ||||||
| #include "unixutil.h" | #include "unixutil.h" | ||||||
|  |  | ||||||
|  | #ifndef MSG_NOSIGNAL | ||||||
|  |  #define MSG_NOSIGNAL 0 | ||||||
|  | #endif | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| *	Function :	sock_init | *	Function :	sock_init | ||||||
| * | * | ||||||
| @@ -229,7 +233,7 @@ sock_read_write( IN SOCKINFO * info, | |||||||
|  |  | ||||||
|     if( bRead ) { |     if( bRead ) { | ||||||
|         // read data |         // read data | ||||||
|         numBytes = recv( sockfd, buffer, bufsize,0); // MSG_NOSIGNAL is not a good idea in portable code, here SIGPIPE/SIGEPIPE has to be used instead |         numBytes = recv( sockfd, buffer, bufsize,MSG_NOSIGNAL); | ||||||
|     } else { |     } else { | ||||||
|         byte_left = bufsize; |         byte_left = bufsize; | ||||||
|         bytes_sent = 0; |         bytes_sent = 0; | ||||||
| @@ -237,7 +241,7 @@ sock_read_write( IN SOCKINFO * info, | |||||||
|             // write data |             // write data | ||||||
|             num_written = |             num_written = | ||||||
|                 send( sockfd, buffer + bytes_sent, byte_left, |                 send( sockfd, buffer + bytes_sent, byte_left, | ||||||
|                       MSG_DONTROUTE); // | MSG_NOSIGNAL is not a good idea in portable code, here SIGPIPE/SIGEPIPE has to be used instead |                       MSG_DONTROUTE|MSG_NOSIGNAL); | ||||||
|             if( num_written == -1 ) { |             if( num_written == -1 ) { | ||||||
|                 return num_written; |                 return num_written; | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -125,7 +125,7 @@ is_unreserved( char in ) | |||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| is_escaped( char *in ) | is_escaped( const char *in ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     if( ( in[0] == '%' ) && ( isxdigit( in[1] ) ) && isxdigit( in[2] ) ) { |     if( ( in[0] == '%' ) && ( isxdigit( in[1] ) ) && isxdigit( in[2] ) ) { | ||||||
| @@ -204,7 +204,7 @@ replace_escaped( char *in, | |||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| parse_uric( char *in, | parse_uric( const char *in, | ||||||
|             int max, |             int max, | ||||||
|             token * out ) |             token * out ) | ||||||
| { | { | ||||||
| @@ -496,12 +496,12 @@ token_cmp( token * in1, | |||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| parse_port( int max, | parse_port( int max, | ||||||
|             char *port, |             const char *port, | ||||||
|             unsigned short *out ) |             unsigned short *out ) | ||||||
| { | { | ||||||
|  |  | ||||||
|     char *finger = port; |     const char *finger = port; | ||||||
|     char *max_ptr = finger + max; |     const char *max_ptr = finger + max; | ||||||
|     unsigned short temp = 0; |     unsigned short temp = 0; | ||||||
|  |  | ||||||
|     while( ( finger < max_ptr ) && ( isdigit( *finger ) ) ) { |     while( ( finger < max_ptr ) && ( isdigit( *finger ) ) ) { | ||||||
| @@ -533,7 +533,7 @@ parse_port( int max, | |||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| parse_hostport( char *in, | parse_hostport( const char *in, | ||||||
|                 int max, |                 int max, | ||||||
|                 hostport_type * out ) |                 hostport_type * out ) | ||||||
| { | { | ||||||
| @@ -681,7 +681,7 @@ parse_hostport( char *in, | |||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| parse_scheme( char *in, | parse_scheme( const char *in, | ||||||
|               int max, |               int max, | ||||||
|               token * out ) |               token * out ) | ||||||
| { | { | ||||||
| @@ -994,7 +994,7 @@ resolve_rel_url( char *base_url, | |||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int | int | ||||||
| parse_uri( char *in, | parse_uri( const char *in, | ||||||
|            int max, |            int max, | ||||||
|            uri_type * out ) |            uri_type * out ) | ||||||
| { | { | ||||||
| @@ -1074,8 +1074,8 @@ parse_uri_and_unescape( char *in, | |||||||
|     if( ( ret = parse_uri( in, max, out ) ) != HTTP_SUCCESS ) |     if( ( ret = parse_uri( in, max, out ) ) != HTTP_SUCCESS ) | ||||||
|         return ret; |         return ret; | ||||||
|     if( out->pathquery.size > 0 ) |     if( out->pathquery.size > 0 ) | ||||||
|         remove_escaped_chars( out->pathquery.buff, &out->pathquery.size ); |         remove_escaped_chars( (char *)out->pathquery.buff, &out->pathquery.size ); | ||||||
|     if( out->fragment.size > 0 ) |     if( out->fragment.size > 0 ) | ||||||
|         remove_escaped_chars( out->fragment.buff, &out->fragment.size ); |         remove_escaped_chars( (char *)out->fragment.buff, &out->fragment.size ); | ||||||
|     return HTTP_SUCCESS; |     return HTTP_SUCCESS; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -398,7 +398,7 @@ FindServiceEventURLPath( service_table * table, | |||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| service_info * | service_info * | ||||||
| FindServiceControlURLPath( service_table * table, | FindServiceControlURLPath( service_table * table, | ||||||
|                            char *controlURLPath ) |                            const char *controlURLPath ) | ||||||
| { | { | ||||||
|     service_info *finger = NULL; |     service_info *finger = NULL; | ||||||
|     uri_type parsed_url; |     uri_type parsed_url; | ||||||
| @@ -664,7 +664,7 @@ DOMString | |||||||
| getElementValue( IXML_Node * node ) | getElementValue( IXML_Node * node ) | ||||||
| { | { | ||||||
|     IXML_Node *child = ( IXML_Node * ) ixmlNode_getFirstChild( node ); |     IXML_Node *child = ( IXML_Node * ) ixmlNode_getFirstChild( node ); | ||||||
|     DOMString temp = NULL; |     const DOMString temp = NULL; | ||||||
|  |  | ||||||
|     if( ( child != 0 ) && ( ixmlNode_getNodeType( child ) == eTEXT_NODE ) ) { |     if( ( child != 0 ) && ( ixmlNode_getNodeType( child ) == eTEXT_NODE ) ) { | ||||||
|         temp = ixmlNode_getNodeValue( child ); |         temp = ixmlNode_getNodeValue( child ); | ||||||
|   | |||||||
| @@ -95,6 +95,17 @@ | |||||||
| #define MAX_THREADS 12  | #define MAX_THREADS 12  | ||||||
| //@} | //@} | ||||||
|  |  | ||||||
|  | /** @name MAX_JOBS_TOTAL | ||||||
|  |  *  The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs | ||||||
|  |  *  that can be queued. If this limit is reached further jobs will be thrown | ||||||
|  |  *  to avoid memory exhaustion. The default value 100. | ||||||
|  |  *  (Added by Axis.) | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | //@{ | ||||||
|  | #define MAX_JOBS_TOTAL 100 | ||||||
|  | //@} | ||||||
|  |  | ||||||
| /** @name DEFAULT_SOAP_CONTENT_LENGTH | /** @name DEFAULT_SOAP_CONTENT_LENGTH | ||||||
|  * SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.   |  * SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.   | ||||||
|  * This prevents devices that have a misbehaving web server to send  |  * This prevents devices that have a misbehaving web server to send  | ||||||
|   | |||||||
| @@ -475,6 +475,7 @@ int http_SendStatusResponse( IN SOCKINFO *info, IN int http_status_code, | |||||||
| *				memory ptr | *				memory ptr | ||||||
| *		'c':	(no args) appends CRLF "\r\n" | *		'c':	(no args) appends CRLF "\r\n" | ||||||
| *		'd':	arg = int number		// appends decimal number | *		'd':	arg = int number		// appends decimal number | ||||||
|  | *		'h':	arg = off_t number		// appends off_t number | ||||||
| *		't':	arg = time_t * gmt_time	// appends time in RFC 1123 fmt | *		't':	arg = time_t * gmt_time	// appends time in RFC 1123 fmt | ||||||
| *		'D':	(no args) appends HTTP DATE: header | *		'D':	(no args) appends HTTP DATE: header | ||||||
| *		'S':	(no args) appends HTTP SERVER: header | *		'S':	(no args) appends HTTP SERVER: header | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #define socklen_t int | typedef int socklen_t; | ||||||
| #define EAFNOSUPPORT 97 | #define EAFNOSUPPORT 97 | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   | |||||||
| @@ -246,7 +246,7 @@ service_info * FindServiceEventURLPath( service_table *table, | |||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| service_info * FindServiceControlURLPath( service_table *table, | service_info * FindServiceControlURLPath( service_table *table, | ||||||
| 					  char * controlURLPath); | 					  const char * controlURLPath); | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| *	Function :	printService | *	Function :	printService | ||||||
|   | |||||||
| @@ -80,7 +80,7 @@ typedef enum SsdpCmdType{SSDP_ERROR=-1, | |||||||
| #define  SSDP_IP   "239.255.255.250" | #define  SSDP_IP   "239.255.255.250" | ||||||
| #define  SSDP_PORT 1900 | #define  SSDP_PORT 1900 | ||||||
| #define  NUM_TRY 3 | #define  NUM_TRY 3 | ||||||
| #define  NUM_COPY 2 | #define  NUM_COPY 1 | ||||||
| #define  THREAD_LIMIT 50 | #define  THREAD_LIMIT 50 | ||||||
| #define  COMMAND_LEN  300 | #define  COMMAND_LEN  300 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ | |||||||
| #else | #else | ||||||
|  #define XINLINE |  #define XINLINE | ||||||
|  |  | ||||||
|  #define socklen_t int |  typedef int socklen_t; | ||||||
|  #define EAFNOSUPPORT 97 |  #define EAFNOSUPPORT 97 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -86,7 +86,7 @@ enum uriType  { absolute, relative }; | |||||||
| /*	Buffer used in parsinghttp messages, urls, etc. generally this simply | /*	Buffer used in parsinghttp messages, urls, etc. generally this simply | ||||||
| *	holds a pointer into a larger array									*/ | *	holds a pointer into a larger array									*/ | ||||||
| typedef struct TOKEN { | typedef struct TOKEN { | ||||||
|    char * buff; |   const char *buff; | ||||||
|   int size; |   int size; | ||||||
| } token; | } token; | ||||||
|  |  | ||||||
| @@ -276,7 +276,7 @@ int token_cmp( token *in1,  token *in2); | |||||||
| * | * | ||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int parse_port(int max,   char * port, unsigned short int * out); | int parse_port(int max, const char *port, unsigned short int *out); | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| *	Function :	parse_hostport | *	Function :	parse_hostport | ||||||
| @@ -296,7 +296,7 @@ int parse_port(int max,   char * port, unsigned short int * out); | |||||||
| * | * | ||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int parse_hostport(  char* in, int max, hostport_type *out ); | int parse_hostport(const char *in, int max, hostport_type *out ); | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| *	Function :	remove_escaped_chars | *	Function :	remove_escaped_chars | ||||||
| @@ -391,7 +391,7 @@ char * resolve_rel_url( char * base_url,  char * rel_url); | |||||||
| * | * | ||||||
| *	Note : | *	Note : | ||||||
| ************************************************************************/ | ************************************************************************/ | ||||||
| int parse_uri(  char * in, int max, uri_type * out); | int parse_uri(const char * in, int max, uri_type * out); | ||||||
|  |  | ||||||
| /************************************************************************ | /************************************************************************ | ||||||
| *	Function :	parse_uri_and_unescape | *	Function :	parse_uri_and_unescape | ||||||
|   | |||||||
| @@ -48,8 +48,8 @@ struct SendInstruction | |||||||
|    int  IsRangeActive; |    int  IsRangeActive; | ||||||
|    int  IsTrailers; |    int  IsTrailers; | ||||||
|    char RangeHeader[200]; |    char RangeHeader[200]; | ||||||
|    long RangeOffset; |    off_t RangeOffset; | ||||||
|    long ReadSendSize;  // Read from local source and send on the network. |    off_t ReadSendSize;  // Read from local source and send on the network. | ||||||
|    long RecvWriteSize; // Recv from the network and write into local file. |    long RecvWriteSize; // Recv from the network and write into local file. | ||||||
|  |  | ||||||
|    //Later few more member could be added depending on the requirement. |    //Later few more member could be added depending on the requirement. | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ | |||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #define socklen_t int | typedef int socklen_t; | ||||||
| #define EAFNOSUPPORT 97 | #define EAFNOSUPPORT 97 | ||||||
| /* | /* | ||||||
|  * WARNING: Don't even consider trying to compile this on a system where |  * WARNING: Don't even consider trying to compile this on a system where | ||||||
|   | |||||||
| @@ -212,11 +212,11 @@ dom_find_deep_node( IN char *names[], | |||||||
| * | * | ||||||
| *	Note :The given node must have a text node as its first child | *	Note :The given node must have a text node as its first child | ||||||
| ****************************************************************************/ | ****************************************************************************/ | ||||||
| static DOMString | static const DOMString | ||||||
| get_node_value( IN IXML_Node * node ) | get_node_value( IN IXML_Node * node ) | ||||||
| { | { | ||||||
|     IXML_Node *text_node = NULL; |     IXML_Node *text_node = NULL; | ||||||
|     DOMString text_value = NULL; |     const DOMString text_value = NULL; | ||||||
|  |  | ||||||
|     text_node = ixmlNode_getFirstChild( node ); |     text_node = ixmlNode_getFirstChild( node ); | ||||||
|     if( text_node == NULL ) { |     if( text_node == NULL ) { | ||||||
| @@ -246,18 +246,19 @@ get_node_value( IN IXML_Node * node ) | |||||||
| ****************************************************************************/ | ****************************************************************************/ | ||||||
| static XINLINE int | static XINLINE int | ||||||
| get_host_and_path( IN char *ctrl_url, | get_host_and_path( IN char *ctrl_url, | ||||||
|                    OUT memptr * host, |                    OUT const memptr *host, | ||||||
|                    OUT memptr * path, |                    OUT const memptr *path, | ||||||
|                    OUT uri_type * url ) |                    OUT uri_type * url ) | ||||||
| { | { | ||||||
|     if( parse_uri( ctrl_url, strlen( ctrl_url ), url ) != HTTP_SUCCESS ) { |     if( parse_uri( ctrl_url, strlen( ctrl_url ), url ) != HTTP_SUCCESS ) { | ||||||
|         return -1; |         return -1; | ||||||
|     } |     } | ||||||
|     host->buf = url->hostport.text.buff; |     // This is done to ensure that the buffer is kept const | ||||||
|     host->length = url->hostport.text.size; |     ((memptr *)host)->buf = (char *)url->hostport.text.buff; | ||||||
|  |     ((memptr *)host)->length = url->hostport.text.size; | ||||||
|  |  | ||||||
|     path->buf = url->pathquery.buff; |     ((memptr *)path)->buf = (char *)url->pathquery.buff; | ||||||
|     path->length = url->pathquery.size; |     ((memptr *)path)->length = url->pathquery.size; | ||||||
|  |  | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| @@ -414,12 +415,12 @@ get_response_value( IN http_message_t * hmsg, | |||||||
|     IXML_Node *error_node = NULL; |     IXML_Node *error_node = NULL; | ||||||
|     IXML_Document *doc = NULL; |     IXML_Document *doc = NULL; | ||||||
|     char *node_str = NULL; |     char *node_str = NULL; | ||||||
|     char *temp_str = NULL; |     const char *temp_str = NULL; | ||||||
|     DOMString error_node_str = NULL; |     DOMString error_node_str = NULL; | ||||||
|     int err_code; |     int err_code; | ||||||
|     xboolean done = FALSE; |     xboolean done = FALSE; | ||||||
|     char *names[5]; |     char *names[5]; | ||||||
|     DOMString nodeValue; |     const DOMString nodeValue; | ||||||
|  |  | ||||||
|     err_code = UPNP_E_BAD_RESPONSE; // default error |     err_code = UPNP_E_BAD_RESPONSE; // default error | ||||||
|  |  | ||||||
| @@ -601,12 +602,15 @@ SoapSendAction( IN char *action_url, | |||||||
|     char *upnp_error_str; |     char *upnp_error_str; | ||||||
|     xboolean got_response = FALSE; |     xboolean got_response = FALSE; | ||||||
|  |  | ||||||
|  |     off_t content_length; | ||||||
|     char *xml_start = |     char *xml_start = | ||||||
| //        "<?xml version=\"1.0\"?>\n" required?? |         "<s:Envelope " | ||||||
| 		"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " |         "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " | ||||||
|         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" |         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n" | ||||||
|         "<s:Body>"; |         "<s:Body>"; | ||||||
|     char *xml_end = "</s:Body>\n" "</s:Envelope>\n"; |     char *xml_end = | ||||||
|  |         "</s:Body>\r\n" | ||||||
|  |         "</s:Envelope>\r\n\r\n"; | ||||||
|     int xml_start_len; |     int xml_start_len; | ||||||
|     int xml_end_len; |     int xml_end_len; | ||||||
|     int action_str_len; |     int action_str_len; | ||||||
| @@ -644,18 +648,23 @@ SoapSendAction( IN char *action_url, | |||||||
|                          url.hostport.text.size, |                          url.hostport.text.size, | ||||||
|                          url.hostport.text.buff ); ) |                          url.hostport.text.buff ); ) | ||||||
|  |  | ||||||
|         xml_start_len = strlen( xml_start ); |     xml_start_len = strlen( xml_start ); | ||||||
|     xml_end_len = strlen( xml_end ); |     xml_end_len = strlen( xml_end ); | ||||||
|     action_str_len = strlen( action_str ); |     action_str_len = strlen( action_str ); | ||||||
|  |  | ||||||
|     // make request msg |     // make request msg | ||||||
|     request.size_inc = 50; |     request.size_inc = 50; | ||||||
|     if( http_MakeMessage( &request, 1, 1, "q" "N" "s" "sssbs" "U" "c" "bbb", SOAPMETHOD_POST, &url, xml_start_len + action_str_len + xml_end_len,   // content-length |     content_length = xml_start_len + action_str_len + xml_end_len; | ||||||
|                           ContentTypeHeader, |     if (http_MakeMessage( | ||||||
|                           "SOAPACTION: \"", service_type, "#", name.buf, |        	&request, 1, 1, | ||||||
|                           name.length, "\"\r\n", xml_start, xml_start_len, |         "q" "N" "s" "sssbsc" "Uc" "b" "b" "b", | ||||||
|                           action_str, action_str_len, xml_end, |         SOAPMETHOD_POST, &url,  | ||||||
|                           xml_end_len ) != 0 ) { |         content_length, | ||||||
|  |         ContentTypeHeader, | ||||||
|  |         "SOAPACTION: \"", service_type, "#", name.buf, name.length, "\"", | ||||||
|  |         xml_start, xml_start_len, | ||||||
|  |         action_str, action_str_len, | ||||||
|  |         xml_end, xml_end_len ) != 0 ) { | ||||||
|         goto error_handler; |         goto error_handler; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -736,20 +745,26 @@ SoapSendActionEx( IN char *action_url, | |||||||
|     xboolean got_response = FALSE; |     xboolean got_response = FALSE; | ||||||
|  |  | ||||||
|     char *xml_start = |     char *xml_start = | ||||||
| //		"<?xml version=\"1.0\"?>\n" required?? |         "<s:Envelope " | ||||||
|         "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " |         "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " | ||||||
|         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n"; |         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n"; | ||||||
|     char *xml_body_start = "<s:Body>"; |     char *xml_header_start = | ||||||
|     char *xml_end = "</s:Body>\n" "</s:Envelope>\n"; |         "<s:Header>\r\n"; | ||||||
|  |     char *xml_header_end = | ||||||
|  |         "</s:Header>\r\n"; | ||||||
|  |     char *xml_body_start = | ||||||
|  |         "<s:Body>"; | ||||||
|  |     char *xml_end = | ||||||
|  |         "</s:Body>\r\n" | ||||||
|  |         "</s:Envelope>\r\n"; | ||||||
|     int xml_start_len; |     int xml_start_len; | ||||||
|     int xml_end_len; |  | ||||||
|     char *xml_header_start = "<s:Header>\n"; |  | ||||||
|     char *xml_header_end = "</s:Header>\n"; |  | ||||||
|     int xml_header_start_len; |     int xml_header_start_len; | ||||||
|     int xml_header_end_len; |  | ||||||
|     int xml_header_str_len; |     int xml_header_str_len; | ||||||
|     int action_str_len; |     int xml_header_end_len; | ||||||
|     int xml_body_start_len; |     int xml_body_start_len; | ||||||
|  |     int action_str_len; | ||||||
|  |     int xml_end_len; | ||||||
|  |     off_t content_length; | ||||||
|  |  | ||||||
|     *response_node = NULL;      // init |     *response_node = NULL;      // init | ||||||
|  |  | ||||||
| @@ -789,7 +804,7 @@ SoapSendActionEx( IN char *action_url, | |||||||
|                          url.hostport.text.size, |                          url.hostport.text.size, | ||||||
|                          url.hostport.text.buff ); ) |                          url.hostport.text.buff ); ) | ||||||
|  |  | ||||||
|         xml_start_len = strlen( xml_start ); |     xml_start_len = strlen( xml_start ); | ||||||
|     xml_body_start_len = strlen( xml_body_start ); |     xml_body_start_len = strlen( xml_body_start ); | ||||||
|     xml_end_len = strlen( xml_end ); |     xml_end_len = strlen( xml_end ); | ||||||
|     action_str_len = strlen( action_str ); |     action_str_len = strlen( action_str ); | ||||||
| @@ -800,17 +815,24 @@ SoapSendActionEx( IN char *action_url, | |||||||
|  |  | ||||||
|     // make request msg |     // make request msg | ||||||
|     request.size_inc = 50; |     request.size_inc = 50; | ||||||
|     if( http_MakeMessage( &request, 1, 1, "q" "N" "s" "sssbs" "U" "c" "bbbbbbb", SOAPMETHOD_POST, &url, xml_start_len + xml_header_start_len + xml_header_str_len + xml_header_end_len + xml_body_start_len + action_str_len + xml_end_len, // content-length |     content_length = | ||||||
|                           ContentTypeHeader, |         xml_start_len + | ||||||
|                           "SOAPACTION: \"", service_type, "#", name.buf, |         xml_header_start_len + xml_header_str_len + xml_header_end_len + | ||||||
|                           name.length, "\"\r\n", |         xml_body_start_len + action_str_len + xml_end_len; | ||||||
|                           xml_start, xml_start_len, |     if (http_MakeMessage( | ||||||
|                           xml_header_start, xml_header_start_len, |         &request, 1, 1, | ||||||
|                           xml_header_str, xml_header_str_len, |         "q" "N" "s" "sssbsc" "Uc" "bbbbbbb", | ||||||
|                           xml_header_end, xml_header_end_len, |         SOAPMETHOD_POST, &url, | ||||||
|                           xml_body_start, xml_body_start_len, |         content_length, | ||||||
|                           action_str, action_str_len, |         ContentTypeHeader, | ||||||
|                           xml_end, xml_end_len ) != 0 ) { |         "SOAPACTION: \"", service_type, "#", name.buf, name.length, "\"", | ||||||
|  |         xml_start, xml_start_len, | ||||||
|  |         xml_header_start, xml_header_start_len, | ||||||
|  |         xml_header_str, xml_header_str_len, | ||||||
|  |         xml_header_end, xml_header_end_len, | ||||||
|  |         xml_body_start, xml_body_start_len, | ||||||
|  |         action_str, action_str_len, | ||||||
|  |         xml_end, xml_end_len ) != 0 ) { | ||||||
|         goto error_handler; |         goto error_handler; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -873,24 +895,28 @@ SoapGetServiceVarStatus( IN char *action_url, | |||||||
|                          IN char *var_name, |                          IN char *var_name, | ||||||
|                          OUT char **var_value ) |                          OUT char **var_value ) | ||||||
| { | { | ||||||
|     memptr host;                // value for HOST header |     const memptr host;                // value for HOST header | ||||||
|     memptr path;                // ctrl path in first line in msg |     const memptr path;                // ctrl path in first line in msg | ||||||
|     uri_type url; |     uri_type url; | ||||||
|     membuffer request; |     membuffer request; | ||||||
|     int ret_code; |     int ret_code; | ||||||
|     http_parser_t response; |     http_parser_t response; | ||||||
|     int upnp_error_code; |     int upnp_error_code; | ||||||
|  |  | ||||||
|  |     off_t content_length; | ||||||
|     char *xml_start = |     char *xml_start = | ||||||
| //		"<?xml version=\"1.0\"?>\n" required?? |         "<s:Envelope " | ||||||
|         "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " |         "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " | ||||||
|         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" |         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n" | ||||||
|         "<s:Body>\n" |         "<s:Body>\r\n" | ||||||
|         "<u:QueryStateVariable xmlns:u=\"urn:schemas-upnp-org:control-1-0\">\n" |         "<u:QueryStateVariable xmlns:u=\"urn:schemas-upnp-org:control-1-0\">\r\n" | ||||||
|         "<u:varName>"; |         "<u:varName>"; | ||||||
|  |  | ||||||
|     char *xml_end = "</u:varName>\n" |     char *xml_end = | ||||||
|         "</u:QueryStateVariable>\n" "</s:Body>\n" "</s:Envelope>\n"; |         "</u:varName>\r\n" | ||||||
|  |         "</u:QueryStateVariable>\r\n" | ||||||
|  |         "</s:Body>\r\n" | ||||||
|  |         "</s:Envelope>\r\n"; | ||||||
|  |  | ||||||
|     *var_value = NULL;          // return NULL in case of an error |     *var_value = NULL;          // return NULL in case of an error | ||||||
|  |  | ||||||
| @@ -902,11 +928,16 @@ SoapGetServiceVarStatus( IN char *action_url, | |||||||
|     } |     } | ||||||
|     // make headers |     // make headers | ||||||
|     request.size_inc = 50; |     request.size_inc = 50; | ||||||
|     if( http_MakeMessage( &request, 1, 1, "Q" "sbc" "N" "s" "s" "U" "c" "sss", SOAPMETHOD_POST, path.buf, path.length, "HOST: ", host.buf, host.length, strlen( xml_start ) + strlen( var_name ) + strlen( xml_end ),   // content-length |     content_length = strlen( xml_start ) + strlen( var_name ) + strlen( xml_end ); | ||||||
|                           ContentTypeHeader, |     if (http_MakeMessage( | ||||||
|                           "SOAPACTION: \"urn:schemas" | 	&request, 1, 1, | ||||||
|                           "-upnp-org:control-1-0#QueryStateVariable\"\r\n", | 	"Q" "sbc" "N" "s" "s" "Ucc" "sss", | ||||||
|                           xml_start, var_name, xml_end ) != 0 ) { | 	SOAPMETHOD_POST, path.buf, path.length, | ||||||
|  | 	"HOST: ", host.buf, host.length, | ||||||
|  | 	content_length, | ||||||
|  | 	ContentTypeHeader, | ||||||
|  | 	"SOAPACTION: \"urn:schemas-upnp-org:control-1-0#QueryStateVariable\"", | ||||||
|  | 	xml_start, var_name, xml_end ) != 0 ) { | ||||||
|         return UPNP_E_OUTOF_MEMORY; |         return UPNP_E_OUTOF_MEMORY; | ||||||
|     } |     } | ||||||
|     // send msg and get reply |     // send msg and get reply | ||||||
|   | |||||||
| @@ -189,7 +189,7 @@ send_error_response( IN SOCKINFO * info, | |||||||
|                      IN const char *err_msg, |                      IN const char *err_msg, | ||||||
|                      IN http_message_t * hmsg ) |                      IN http_message_t * hmsg ) | ||||||
| { | { | ||||||
|     int content_length; |     off_t content_length; | ||||||
|     int timeout_secs = SOAP_TIMEOUT; |     int timeout_secs = SOAP_TIMEOUT; | ||||||
|     int major, |     int major, | ||||||
|       minor; |       minor; | ||||||
| @@ -228,20 +228,19 @@ send_error_response( IN SOCKINFO * info, | |||||||
|  |  | ||||||
|     // make headers |     // make headers | ||||||
|     membuffer_init( &headers ); |     membuffer_init( &headers ); | ||||||
| /* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */     |     if (http_MakeMessage( | ||||||
|     if( http_MakeMessage( &headers, major, minor, |         &headers, major, minor, | ||||||
|                           "RNsDsSXc" "sssss", |         "RNsDsSXcc" "sssss", | ||||||
|                           500, |         500, | ||||||
|                           content_length, |         content_length, | ||||||
|                           ContentTypeHeader, |         ContentTypeHeader, | ||||||
|                           "EXT:\r\n", |         "EXT:\r\n", | ||||||
|                           X_USER_AGENT, |         X_USER_AGENT, | ||||||
|                           start_body, err_code_str, mid_body, err_msg, |         start_body, err_code_str, mid_body, err_msg, | ||||||
|                           end_body ) != 0 ) { |         end_body ) != 0 ) { | ||||||
|         membuffer_destroy( &headers ); |         membuffer_destroy( &headers ); | ||||||
|         return;                 // out of mem |         return;                 // out of mem | ||||||
|     } |     } | ||||||
| /*-- PATCH END - */ |  | ||||||
|     // send err msg |     // send err msg | ||||||
|     http_SendMessage( info, &timeout_secs, "b", |     http_SendMessage( info, &timeout_secs, "b", | ||||||
|                       headers.buf, headers.length ); |                       headers.buf, headers.length ); | ||||||
| @@ -268,12 +267,11 @@ send_var_query_response( IN SOCKINFO * info, | |||||||
|                          IN const char *var_value, |                          IN const char *var_value, | ||||||
|                          IN http_message_t * hmsg ) |                          IN http_message_t * hmsg ) | ||||||
| { | { | ||||||
|     int content_length; |     off_t content_length; | ||||||
|     int timeout_secs = SOAP_TIMEOUT; |     int timeout_secs = SOAP_TIMEOUT; | ||||||
|     int major, |     int major; | ||||||
|       minor; |     int minor; | ||||||
|     const char *start_body = |     const char *start_body = | ||||||
| //		"<?xml version=\"1.0\"?>\n" required?? |  | ||||||
|         "<s:Envelope " |         "<s:Envelope " | ||||||
|         "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " |         "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " | ||||||
|         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" |         "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" | ||||||
| @@ -297,19 +295,18 @@ send_var_query_response( IN SOCKINFO * info, | |||||||
|     // make headers |     // make headers | ||||||
|     membuffer_init( &response ); |     membuffer_init( &response ); | ||||||
|      |      | ||||||
| /* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */ |     if (http_MakeMessage( | ||||||
|     if( http_MakeMessage( &response, major, minor, |         &response, major, minor, | ||||||
|                           "RNsDsSXcc" "sss", |         "RNsDsSXcc" "sss", | ||||||
|                           HTTP_OK, |         HTTP_OK, | ||||||
|                           content_length, |         content_length, | ||||||
|                           ContentTypeHeader, |         ContentTypeHeader, | ||||||
|                           "EXT:\r\n", |         "EXT:\r\n", | ||||||
|                           X_USER_AGENT, |         X_USER_AGENT, | ||||||
|                           start_body, var_value, end_body ) != 0 ) { |         start_body, var_value, end_body ) != 0 ) { | ||||||
|         membuffer_destroy( &response ); |         membuffer_destroy( &response ); | ||||||
|         return;                 // out of mem |         return;                 // out of mem | ||||||
|     } |     } | ||||||
| /* -- PATCH END - */ |  | ||||||
|      |      | ||||||
|     // send msg |     // send msg | ||||||
|     http_SendMessage( info, &timeout_secs, "b", |     http_SendMessage( info, &timeout_secs, "b", | ||||||
| @@ -603,13 +600,13 @@ get_device_info( IN http_message_t * request, | |||||||
|     service_info *serv_info; |     service_info *serv_info; | ||||||
|     char save_char; |     char save_char; | ||||||
|     int ret_code = -1;          // error by default |     int ret_code = -1;          // error by default | ||||||
|     char *control_url; |     const char *control_url; | ||||||
|     char *actionName = NULL; |     char *actionName = NULL; | ||||||
|  |  | ||||||
|     // null-terminate pathquery of url |     // null-terminate pathquery of url | ||||||
|     control_url = request->uri.pathquery.buff; |     control_url = request->uri.pathquery.buff; | ||||||
|     save_char = control_url[request->uri.pathquery.size]; |     save_char = control_url[request->uri.pathquery.size]; | ||||||
|     control_url[request->uri.pathquery.size] = '\0'; |     ((char *)control_url)[request->uri.pathquery.size] = '\0'; | ||||||
|  |  | ||||||
|     HandleLock(  ); |     HandleLock(  ); | ||||||
|  |  | ||||||
| @@ -666,7 +663,7 @@ get_device_info( IN http_message_t * request, | |||||||
|     ret_code = 0; |     ret_code = 0; | ||||||
|  |  | ||||||
|   error_handler: |   error_handler: | ||||||
|     control_url[request->uri.pathquery.size] = save_char;   // restore |     ((char *)control_url)[request->uri.pathquery.size] = save_char;   // restore | ||||||
|     HandleUnlock(  ); |     HandleUnlock(  ); | ||||||
|     return ret_code; |     return ret_code; | ||||||
| } | } | ||||||
| @@ -695,7 +692,7 @@ send_action_response( IN SOCKINFO * info, | |||||||
|     int major, |     int major, | ||||||
|       minor; |       minor; | ||||||
|     int err_code; |     int err_code; | ||||||
|     int content_length; |     off_t content_length; | ||||||
|     int ret_code; |     int ret_code; | ||||||
|     int timeout_secs = SOAP_TIMEOUT; |     int timeout_secs = SOAP_TIMEOUT; | ||||||
|     static char *start_body = |     static char *start_body = | ||||||
| @@ -717,17 +714,22 @@ send_action_response( IN SOCKINFO * info, | |||||||
|         goto error_handler; |         goto error_handler; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     content_length = strlen( start_body ) + strlen( xml_response ) + |     content_length = | ||||||
|  |         strlen( start_body ) + | ||||||
|  |         strlen( xml_response ) + | ||||||
|         strlen( end_body ); |         strlen( end_body ); | ||||||
|  |  | ||||||
|     // make headers |     // make headers | ||||||
| /* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */     |     if (http_MakeMessage( | ||||||
|     if( http_MakeMessage( &headers, major, minor, "RNsDsSXcc", HTTP_OK,   // status code |         &headers, major, minor, | ||||||
|                           content_length, ContentTypeHeader, "EXT:\r\n", X_USER_AGENT // EXT header |         "RNsDsSXcc", | ||||||
|          ) != 0 ) { |         HTTP_OK,   // status code | ||||||
|  |         content_length, | ||||||
|  |         ContentTypeHeader, | ||||||
|  |         "EXT:\r\n", | ||||||
|  |         X_USER_AGENT) != 0 ) { | ||||||
|         goto error_handler; |         goto error_handler; | ||||||
|     } |     } | ||||||
| /* -- PATCH END - */ |  | ||||||
|  |  | ||||||
|     // send whole msg |     // send whole msg | ||||||
|     ret_code = http_SendMessage( info, &timeout_secs, "bbbb", |     ret_code = http_SendMessage( info, &timeout_secs, "bbbb", | ||||||
| @@ -778,7 +780,7 @@ get_var_name( IN IXML_Document * TempDoc, | |||||||
|     IXML_Node *VarNameNode = NULL; |     IXML_Node *VarNameNode = NULL; | ||||||
|     IXML_Node *VarNode = NULL; |     IXML_Node *VarNode = NULL; | ||||||
|     const DOMString StNodeName = NULL; |     const DOMString StNodeName = NULL; | ||||||
|     DOMString Temp = NULL; |     const DOMString Temp = NULL; | ||||||
|     int ret_val = -1; |     int ret_val = -1; | ||||||
|  |  | ||||||
|     // Got the Envelop node here |     // Got the Envelop node here | ||||||
|   | |||||||
| @@ -234,7 +234,17 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr, | |||||||
|  |  | ||||||
|     for( Index = 0; Index < NumPacket; Index++ ) { |     for( Index = 0; Index < NumPacket; Index++ ) { | ||||||
|         int rc; |         int rc; | ||||||
|  |         // The reason to keep this loop is purely historical/documentation, | ||||||
|  |         // according to section 9.2 of HTTPU spec: | ||||||
|  |         //  | ||||||
|  |         // "If a multicast resource would send a response(s) to any copy of the  | ||||||
|  |         //  request, it SHOULD send its response(s) to each copy of the request  | ||||||
|  |         //  it receives. It MUST NOT repeat its response(s) per copy of the  | ||||||
|  |         //  reuqest." | ||||||
|  |         //   | ||||||
|  |         // http://www.upnp.org/download/draft-goland-http-udp-04.txt | ||||||
|  |         // | ||||||
|  |         // So, NUM_COPY has been changed from 2 to 1. | ||||||
|         NumCopy = 0; |         NumCopy = 0; | ||||||
|         while( NumCopy < NUM_COPY ) { |         while( NumCopy < NUM_COPY ) { | ||||||
|             DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, |             DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, | ||||||
| @@ -295,16 +305,16 @@ CreateServicePacket( IN int msg_type, | |||||||
|     *packet = NULL; |     *packet = NULL; | ||||||
|  |  | ||||||
|     if( msg_type == MSGTYPE_REPLY ) { |     if( msg_type == MSGTYPE_REPLY ) { | ||||||
| /* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */ |         ret_code = http_MakeMessage( | ||||||
|         ret_code = http_MakeMessage( &buf, 1, 1, |             &buf, 1, 1, | ||||||
|                                      "R" "sdc" "D" "s" "ssc" "S" "Xc" "ssc" |             "R" "sdc" "D" "sc" "ssc" "S" "Xc" "ssc" "sscc", | ||||||
|                                      "ssc" "c", HTTP_OK, |             HTTP_OK, | ||||||
|                                      "CACHE-CONTROL: max-age=", duration, |             "CACHE-CONTROL: max-age=", duration, | ||||||
|                                      "EXT:\r\n", "LOCATION: ", location, | 	    "EXT:", | ||||||
|                                      X_USER_AGENT, |             "LOCATION: ", location, | ||||||
|                                      "ST: ", nt, "USN: ", usn ); |             X_USER_AGENT, | ||||||
| /* -- PATCH END - */ |             "ST: ", nt, | ||||||
|          |             "USN: ", usn); | ||||||
|         if( ret_code != 0 ) { |         if( ret_code != 0 ) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| @@ -320,15 +330,17 @@ CreateServicePacket( IN int msg_type, | |||||||
|         // NOTE: The CACHE-CONTROL and LOCATION headers are not present in |         // NOTE: The CACHE-CONTROL and LOCATION headers are not present in | ||||||
|         //  a shutdown msg, but are present here for MS WinMe interop. |         //  a shutdown msg, but are present here for MS WinMe interop. | ||||||
|          |          | ||||||
| /* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */ |         ret_code = http_MakeMessage( | ||||||
|         ret_code = http_MakeMessage( &buf, 1, 1, |             &buf, 1, 1, | ||||||
|                                      "Q" "sssdc" "sdc" "ssc" "ssc" "ssc" |             "Q" "sssdc" "sdc" "ssc" "ssc" "ssc" "S" "Xc" "sscc", | ||||||
|                                      "S" "Xc" "ssc" "c", HTTPMETHOD_NOTIFY, "*", |             HTTPMETHOD_NOTIFY, "*", | ||||||
|                                      1, "HOST: ", SSDP_IP, ":", SSDP_PORT, |             1, "HOST: ", SSDP_IP, ":", SSDP_PORT, | ||||||
|                                      "CACHE-CONTROL: max-age=", duration, |             "CACHE-CONTROL: max-age=", duration, | ||||||
|                                      "LOCATION: ", location, "NT: ", nt, |             "LOCATION: ", location, | ||||||
|                                      "NTS: ", nts, X_USER_AGENT, "USN: ", usn ); |             "NT: ", nt, | ||||||
| /* -- PATCH END - */         |             "NTS: ", nts, | ||||||
|  |             X_USER_AGENT, | ||||||
|  |             "USN: ", usn ); | ||||||
|         if( ret_code != 0 ) { |         if( ret_code != 0 ) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0; | |||||||
|     IXML_Node *tmpNode = NULL; |     IXML_Node *tmpNode = NULL; | ||||||
|     IXML_Node *tmpNode2 = NULL; |     IXML_Node *tmpNode2 = NULL; | ||||||
|     IXML_Node *textNode = NULL; |     IXML_Node *textNode = NULL; | ||||||
|     DOMString tmpStr; |     const DOMString tmpStr; | ||||||
|     char SERVER[200]; |     char SERVER[200]; | ||||||
|  |  | ||||||
|     DBGONLY( const DOMString dbgStr; |     DBGONLY( const DOMString dbgStr; | ||||||
| @@ -922,6 +922,7 @@ get_ssdp_sockets( MiniServerSockArray * out ) | |||||||
|     struct ip_mreq ssdpMcastAddr; |     struct ip_mreq ssdpMcastAddr; | ||||||
|     struct sockaddr_in ssdpAddr; |     struct sockaddr_in ssdpAddr; | ||||||
|     int option = 1; |     int option = 1; | ||||||
|  |     struct in_addr addr; | ||||||
|  |  | ||||||
|     CLIENTONLY( if( ( ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) |     CLIENTONLY( if( ( ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) | ||||||
|                     == UPNP_INVALID_SOCKET ) { |                     == UPNP_INVALID_SOCKET ) { | ||||||
| @@ -997,7 +998,7 @@ get_ssdp_sockets( MiniServerSockArray * out ) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     memset( ( void * )&ssdpMcastAddr, 0, sizeof( struct ip_mreq ) ); |     memset( ( void * )&ssdpMcastAddr, 0, sizeof( struct ip_mreq ) ); | ||||||
|     ssdpMcastAddr.imr_interface.s_addr = htonl( INADDR_ANY ); |     ssdpMcastAddr.imr_interface.s_addr = inet_addr( LOCAL_HOST ); | ||||||
|     ssdpMcastAddr.imr_multiaddr.s_addr = inet_addr( SSDP_IP ); |     ssdpMcastAddr.imr_multiaddr.s_addr = inet_addr( SSDP_IP ); | ||||||
|     if( setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, |     if( setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, | ||||||
|                     ( char * )&ssdpMcastAddr, |                     ( char * )&ssdpMcastAddr, | ||||||
| @@ -1012,6 +1013,17 @@ get_ssdp_sockets( MiniServerSockArray * out ) | |||||||
|         CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); |         CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) ); | ||||||
|         return UPNP_E_SOCKET_ERROR; |         return UPNP_E_SOCKET_ERROR; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /* Set multicast interface. */ | ||||||
|  |     memset( ( void * )&addr, 0, sizeof( struct in_addr )); | ||||||
|  |     addr.s_addr = inet_addr(LOCAL_HOST); | ||||||
|  |     if (setsockopt(ssdpSock, IPPROTO_IP, IP_MULTICAST_IF, | ||||||
|  |                    (char *)&addr, sizeof addr) != 0) { | ||||||
|  |         DBGONLY(UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, | ||||||
|  |                             "Couldn't set multicast interface.\n" )); | ||||||
|  |         /* This is probably not a critical error, so let's continue. */ | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // result is not checked becuase it will fail in WinMe and Win9x. |     // result is not checked becuase it will fail in WinMe and Win9x. | ||||||
|     setsockopt( ssdpSock, IPPROTO_IP, |     setsockopt( ssdpSock, IPPROTO_IP, | ||||||
|                 IP_MULTICAST_TTL, &ttl, sizeof( ttl ) ); |                 IP_MULTICAST_TTL, &ttl, sizeof( ttl ) ); | ||||||
|   | |||||||
| @@ -213,7 +213,7 @@ config_description_doc( INOUT IXML_Document * doc, | |||||||
|     IXML_Node *rootNode = NULL; |     IXML_Node *rootNode = NULL; | ||||||
|     IXML_Node *urlbase_node = NULL; |     IXML_Node *urlbase_node = NULL; | ||||||
|     char *urlBaseStr = "URLBase"; |     char *urlBaseStr = "URLBase"; | ||||||
|     DOMString domStr = NULL; |     const DOMString domStr = NULL; | ||||||
|     uri_type uri; |     uri_type uri; | ||||||
|     int err_code; |     int err_code; | ||||||
|     int len; |     int len; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user