Compare commits
19 Commits
release-1.
...
release-1.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bf601218cd | ||
![]() |
0c67e186f5 | ||
![]() |
8bc61b1a5c | ||
![]() |
aec58e6c9e | ||
![]() |
4bcb9dd5e1 | ||
![]() |
8cfa0e488c | ||
![]() |
9e775e662e | ||
![]() |
03400550cd | ||
![]() |
62a5d7c5ef | ||
![]() |
df80fbae36 | ||
![]() |
9c6ea48583 | ||
![]() |
8da593fae3 | ||
![]() |
b4816a33a9 | ||
![]() |
1b029e80af | ||
![]() |
907b103439 | ||
![]() |
ecd755d3f8 | ||
![]() |
b8cac59dd9 | ||
![]() |
591e0d3e25 | ||
![]() |
bd3bf7ad0a |
130
ChangeLog
130
ChangeLog
@@ -1,8 +1,129 @@
|
||||
|
||||
*************************************************************************
|
||||
Version 1.4.3
|
||||
*************************************************************************
|
||||
|
||||
2007-03-05 Oxy <oxygenic(at)users.sourceforge.net>
|
||||
* Code adapted and typedefs added to compile cleanly under Windows
|
||||
with Borland C++ Builder and MS Visual C++
|
||||
|
||||
2007-03-03 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||
|
||||
* Fixed nasty segmentation fault bug on membuffer.c.
|
||||
|
||||
*************************************************************************
|
||||
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
|
||||
working, code compiles with Borland Builder C++ and MS Visual
|
||||
C/C++
|
||||
working, code compiles with Borland Builder C++ and MS Visual
|
||||
C/C++
|
||||
|
||||
2006-07-05 Nektarios K. Papadopoulos <npapadop(at)inaccessnetworks.com>
|
||||
|
||||
@@ -28,7 +149,7 @@
|
||||
to loigu)
|
||||
|
||||
*************************************************************************
|
||||
Release of version 1.4.0
|
||||
Version 1.4.0
|
||||
*************************************************************************
|
||||
|
||||
2006-05-26 Oxy <virtual_worlds(at)gmx.de>
|
||||
@@ -46,10 +167,13 @@ Release of version 1.4.0
|
||||
2006-05-18 Oxy <virtual_worlds(at)gmx.de>
|
||||
|
||||
* DSM-320 patch added (fetched from project MediaTomb)
|
||||
|
||||
* httpGet additons atch added, Added proxy support by introducing
|
||||
UpnpOpenHttpGetProxy. UpnpOpenHttpGet now just calls
|
||||
UpnpOpenHttpGetProxy with the proxy url set to NULL.
|
||||
|
||||
* Bugfix for typo ("\0" / "0") in ixmlparser.c
|
||||
|
||||
* Bugfix for M-Search packet
|
||||
|
||||
*************************************************************************
|
||||
|
39
Makefile.am
39
Makefile.am
@@ -5,40 +5,39 @@
|
||||
# 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
|
||||
|
||||
SUBDIRS = ixml threadutil upnp docs/dist
|
||||
SUBDIRS = ixml threadutil upnp docs/dist
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
# by 'install-exec' target (instead of default 'install-data')
|
||||
pkgconfigexecdir = $(libdir)/pkgconfig
|
||||
pkgconfigexec_DATA = libupnp.pc
|
||||
pkgconfigexecdir = $(libdir)/pkgconfig
|
||||
pkgconfigexec_DATA = libupnp.pc
|
||||
|
||||
$(pkgconfigexec_DATA): config.status
|
||||
|
||||
|
||||
if WITH_DOCDIR
|
||||
docdir = @DOCDIR@
|
||||
doc_DATA = LICENSE README NEWS TODO THANKS
|
||||
if WITH_DOCUMENTATION
|
||||
doc_DATA = LICENSE README NEWS TODO THANKS
|
||||
endif
|
||||
|
||||
|
||||
CLEANFILES = IUpnpErrFile.txt IUpnpInfoFile.txt
|
||||
|
||||
|
||||
|
||||
|
||||
CLEANFILES = IUpnpErrFile.txt IUpnpInfoFile.txt
|
||||
|
||||
|
19
THANKS
19
THANKS
@@ -6,18 +6,23 @@ suggesting various improvements or submitting actual code.
|
||||
Here is a list of these people. Help us keep it complete and
|
||||
exempt of errors.
|
||||
|
||||
- Erwan Velu
|
||||
- Paul Vixie
|
||||
- Arno Willig
|
||||
- Eric Tanguy
|
||||
- Oskar Liljeblad
|
||||
- Chaos
|
||||
- John Dennis
|
||||
- David Maass
|
||||
- Erik Johansson
|
||||
- Eric Tanguy
|
||||
- Erwan Velu
|
||||
- Fredrik Svensson
|
||||
- Jiri Zouhar
|
||||
- John Dennis
|
||||
- Jonathan (no_dice)
|
||||
- Leuk_He
|
||||
- Loigu
|
||||
- Marcelo Jimenez
|
||||
- Marcelo Roberto Jimenez
|
||||
- Markus Strobl
|
||||
- Nektarios K. Papadopoulos
|
||||
- Oxy
|
||||
- Oskar Liljeblad
|
||||
- Michael (Oxy)
|
||||
- Paul Vixie
|
||||
- Siva Chandran
|
||||
|
||||
|
@@ -34,6 +34,7 @@
|
||||
|
||||
#include "autoconfig.h"
|
||||
|
||||
#define MAX_JOBS_TOTAL 10
|
||||
|
||||
/** @name Compile time configuration options
|
||||
* The Linux SDK for UPnP Devices contains some compile-time parameters
|
||||
|
@@ -34,7 +34,7 @@
|
||||
<RESFILES value=""/>
|
||||
<DEFFILE value=""/>
|
||||
<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=""/>
|
||||
<SPARELIBS value=""/>
|
||||
<PACKAGES value=""/>
|
||||
@@ -45,11 +45,11 @@
|
||||
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
|
||||
<RELEASELIBPATH value="$(BCB)\lib\release"/>
|
||||
<LINKER value="tlink32"/>
|
||||
<USERDEFINES value="WIN32;LIBUPNP_EXPORTS"/>
|
||||
<USERDEFINES value="WIN32;LIBUPNP_EXPORTS;UPNP_USE_BCBPP"/>
|
||||
<SYSDEFINES value="NO_STRICT;_NO_VCL"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
<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;..\..\pthreads-w32-1-10-0-release"/>
|
||||
<WARNINGS value="-w-par"/>
|
||||
</MACROS>
|
||||
<OPTIONS>
|
||||
@@ -94,22 +94,27 @@ ProductVersion=1.0.0.0
|
||||
Comments=
|
||||
|
||||
[HistoryLists\hlIncludePath]
|
||||
Count=1
|
||||
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
|
||||
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;..\..\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]
|
||||
Count=1
|
||||
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
|
||||
Count=3
|
||||
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;..\..\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;D:\DEVELOP\pthreads-w32-1-10-0-release
|
||||
Item2=..\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]
|
||||
Count=1
|
||||
Item0=$(BCB)\source\vcl
|
||||
|
||||
[HistoryLists\hlConditionals]
|
||||
Count=3
|
||||
Item0=WIN32;LIBUPNP_EXPORTS
|
||||
Item1=WIN32;EXPORT_SPEC
|
||||
Item2=WIN32
|
||||
Count=4
|
||||
Item0=WIN32;LIBUPNP_EXPORTS;UPNP_USE_BCBPP
|
||||
Item1=WIN32;LIBUPNP_EXPORTS
|
||||
Item2=WIN32;EXPORT_SPEC
|
||||
Item3=WIN32
|
||||
|
||||
[Debugging]
|
||||
DebugSourceDirs=$(BCB)\source\vcl
|
||||
|
@@ -43,7 +43,7 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# 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 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" /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" /D "UPNP_USE_MSVCPP" /FR /YX /FD /c
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
||||
@@ -53,7 +53,8 @@ BSC32=bscmake.exe
|
||||
# ADD BSC32 /nologo
|
||||
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 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
|
||||
# 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"
|
||||
|
||||
@@ -69,7 +70,7 @@ LINK32=link.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# 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 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 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" /D "UPNP_USE_MSVCPP" /FR /YX /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||
@@ -79,7 +80,7 @@ BSC32=bscmake.exe
|
||||
# ADD BSC32 /nologo
|
||||
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 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
|
||||
# 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
|
||||
|
||||
@@ -274,6 +275,146 @@ SOURCE=..\upnp\src\win_dll.c
|
||||
# Begin Group "Header-Dateien"
|
||||
|
||||
# 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
|
||||
# Begin Group "Ressourcendateien"
|
||||
|
||||
|
73
configure.ac
73
configure.ac
@@ -8,9 +8,9 @@
|
||||
# (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.3], [mroberto@users.sourceforge.net])
|
||||
# *Independently* of the above libupnp package version, the libtool version
|
||||
# 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:
|
||||
@@ -19,16 +19,34 @@ AC_INIT([libupnp], [1.4.1], [virtual_worlds@gmx.de])
|
||||
# - interfaces added: age++
|
||||
# - interfaces removed: age=0
|
||||
# *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])
|
||||
AC_SUBST([LT_VERSION_UPNP], [2:2:0])
|
||||
#
|
||||
# For release 1.4.1, we had:
|
||||
#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_MACRO_DIR(m4)
|
||||
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 :
|
||||
@@ -42,6 +60,7 @@ AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects])
|
||||
# installed libraries.
|
||||
#
|
||||
AC_CONFIG_HEADERS([autoconfig.h upnp/inc/upnpconfig.h])
|
||||
#AC_SYS_LARGEFILE_SENSITIVE
|
||||
|
||||
AC_REVISION([$Revision: 1.11 $])
|
||||
|
||||
@@ -106,19 +125,28 @@ RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code])
|
||||
|
||||
|
||||
# doc installation
|
||||
AC_MSG_CHECKING([documentation installation])
|
||||
AC_ARG_WITH([docdir],
|
||||
AC_HELP_STRING([--with-docdir=DIR],
|
||||
[where documentation is installed
|
||||
@<:@[DATADIR/doc/]AC_PACKAGE_NAME[-]AC_PACKAGE_VERSION@:>@])
|
||||
AC_HELP_STRING([--without-docdir],
|
||||
[do not install the documentation]),
|
||||
[DOCDIR="$with_docdir"],
|
||||
[DOCDIR="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"])
|
||||
# autoconf >= 2.60 already defines ${docdir}, but we will not use its
|
||||
# default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}.
|
||||
# That would give us ${datarootdir}/doc/libupnp, and we want the package
|
||||
# version on that.
|
||||
docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"
|
||||
AC_MSG_CHECKING([for documentation directory])
|
||||
AC_ARG_WITH([documentation],
|
||||
AS_HELP_STRING([--with-documentation=directory_name],
|
||||
[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)
|
||||
AC_SUBST(DOCDIR)
|
||||
AC_MSG_RESULT($DOCDIR)
|
||||
# If something has been entered after an equal sign, assume it is the directory
|
||||
if test x"$with_documentation" != xyes -a x"$with_documentation" != xno; then
|
||||
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
|
||||
AX_CFLAGS_WARN_ALL
|
||||
|
||||
# Arrange for large-file support (can be disabled with --disable-largefile).
|
||||
# Define _FILE_OFFSET_BITS and _LARGE_FILES if necessary
|
||||
AC_SYS_LARGEFILE
|
||||
#
|
||||
# Lot's of stuff to ensure large file support
|
||||
#
|
||||
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 \
|
||||
./html/upnp/icon1.gif \
|
||||
./html/upnp/icon2.gif \
|
||||
@@ -251,9 +254,10 @@ EXTRA_DIST = ./UPnP_Programming_Guide.pdf \
|
||||
./html/ixml/ixmlCloneDOMString.html \
|
||||
./html/ixml/ixmlFreeDOMString.html
|
||||
|
||||
if WITH_DOCDIR
|
||||
docsdir = @DOCDIR@
|
||||
nobase_docs_DATA = ./UPnP_Programming_Guide.pdf \
|
||||
if WITH_DOCUMENTATION
|
||||
docsdir = @docdir@
|
||||
nobase_docs_DATA = \
|
||||
./UPnP_Programming_Guide.pdf \
|
||||
./IXML_Programming_Guide.pdf \
|
||||
./html/upnp/icon1.gif \
|
||||
./html/upnp/icon2.gif \
|
||||
@@ -506,3 +510,4 @@ if WITH_DOCDIR
|
||||
./html/ixml/ixmlCloneDOMString.html \
|
||||
./html/ixml/ixmlFreeDOMString.html
|
||||
endif
|
||||
|
||||
|
102
ixml/inc/ixml.h
102
ixml/inc/ixml.h
@@ -260,7 +260,7 @@ ixmlNode_getNodeName(IXML_Node *nodeptr
|
||||
* @return [DOMString] A {\bf DOMString} of the {\bf Node} value.
|
||||
*/
|
||||
|
||||
EXPORT_SPEC DOMString
|
||||
EXPORT_SPEC const DOMString
|
||||
ixmlNode_getNodeValue(IXML_Node *nodeptr
|
||||
/** Pointer to the {\bf Node} to retrieve the value. */
|
||||
);
|
||||
@@ -282,7 +282,7 @@ ixmlNode_getNodeValue(IXML_Node *nodeptr
|
||||
EXPORT_SPEC int
|
||||
ixmlNode_setNodeValue(IXML_Node *nodeptr,
|
||||
/** The {\bf Node} to which to assign a new value. */
|
||||
char *newNodeValue
|
||||
const char *newNodeValue
|
||||
/** The new value of the {\bf Node}. */
|
||||
);
|
||||
|
||||
@@ -439,7 +439,7 @@ ixmlNode_getNamespaceURI(IXML_Node *nodeptr
|
||||
* or {\tt NULL}.
|
||||
*/
|
||||
|
||||
EXPORT_SPEC DOMString
|
||||
EXPORT_SPEC const DOMString
|
||||
ixmlNode_getPrefix(IXML_Node *nodeptr
|
||||
/** The {\bf Node} from which to retrieve the prefix. */
|
||||
);
|
||||
@@ -867,7 +867,7 @@ EXPORT_SPEC int
|
||||
ixmlDocument_createCDATASectionEx(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new
|
||||
node. */
|
||||
DOMString data,
|
||||
const DOMString data,
|
||||
/** The data to associate with the new
|
||||
{\bf CDATASection} node. */
|
||||
IXML_CDATASection** cdNode
|
||||
@@ -886,7 +886,7 @@ EXPORT_SPEC IXML_CDATASection*
|
||||
ixmlDocument_createCDATASection(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new
|
||||
node. */
|
||||
DOMString data
|
||||
const DOMString data
|
||||
/** The data to associate with the new {\bf
|
||||
CDATASection} node. */
|
||||
);
|
||||
@@ -899,7 +899,7 @@ ixmlDocument_createCDATASection(IXML_Document *doc,
|
||||
EXPORT_SPEC IXML_Attr*
|
||||
ixmlDocument_createAttribute(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new node. */
|
||||
char *name
|
||||
const char *name
|
||||
/** The name of the new attribute. */
|
||||
);
|
||||
|
||||
@@ -924,7 +924,7 @@ EXPORT_SPEC int
|
||||
ixmlDocument_createAttributeEx(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new
|
||||
node. */
|
||||
char *name,
|
||||
const char *name,
|
||||
/** The name of the new attribute. */
|
||||
IXML_Attr** attrNode
|
||||
/** A pointer to a {\bf Attr} where the new
|
||||
@@ -943,7 +943,7 @@ ixmlDocument_createAttributeEx(IXML_Document *doc,
|
||||
EXPORT_SPEC IXML_NodeList*
|
||||
ixmlDocument_getElementsByTagName(IXML_Document *doc,
|
||||
/** The {\bf Document} to search. */
|
||||
DOMString tagName
|
||||
const DOMString tagName
|
||||
/** The tag name to find. */
|
||||
);
|
||||
|
||||
@@ -970,10 +970,10 @@ EXPORT_SPEC int
|
||||
ixmlDocument_createElementNSEx(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new
|
||||
node. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI for the new {\bf
|
||||
Element}. */
|
||||
DOMString qualifiedName,
|
||||
const DOMString qualifiedName,
|
||||
/** The qualified name of the new {\bf
|
||||
Element}. */
|
||||
IXML_Element** rtElement
|
||||
@@ -992,10 +992,10 @@ ixmlDocument_createElementNSEx(IXML_Document *doc,
|
||||
EXPORT_SPEC IXML_Element*
|
||||
ixmlDocument_createElementNS(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new node. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI for the new {\bf
|
||||
Element}. */
|
||||
DOMString qualifiedName
|
||||
const DOMString qualifiedName
|
||||
/** The qualified name of the new {\bf
|
||||
Element}. */
|
||||
);
|
||||
@@ -1021,9 +1021,9 @@ EXPORT_SPEC int
|
||||
ixmlDocument_createAttributeNSEx(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new
|
||||
{\bf Attr}. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI for the attribute. */
|
||||
DOMString qualifiedName,
|
||||
const DOMString qualifiedName,
|
||||
/** The qualified name of the attribute. */
|
||||
IXML_Attr** attrNode
|
||||
/** A pointer to an {\bf Attr} where the
|
||||
@@ -1040,9 +1040,9 @@ EXPORT_SPEC IXML_Attr*
|
||||
ixmlDocument_createAttributeNS(IXML_Document *doc,
|
||||
/** The owner {\bf Document} of the new
|
||||
{\bf Attr}. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI for the attribute. */
|
||||
DOMString qualifiedName
|
||||
const DOMString qualifiedName
|
||||
/** The qualified name of the attribute. */
|
||||
);
|
||||
|
||||
@@ -1059,11 +1059,11 @@ ixmlDocument_createAttributeNS(IXML_Document *doc,
|
||||
EXPORT_SPEC IXML_NodeList*
|
||||
ixmlDocument_getElementsByTagNameNS(IXML_Document* doc,
|
||||
/** The {\bf Document} to search. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace of the elements to
|
||||
find or {\tt "*"} to match any
|
||||
namespace. */
|
||||
DOMString localName
|
||||
const DOMString localName
|
||||
/** The local name of the elements to
|
||||
find or {\tt "*"} to match any local
|
||||
name. */
|
||||
@@ -1079,7 +1079,7 @@ EXPORT_SPEC IXML_Element*
|
||||
ixmlDocument_getElementById(IXML_Document* doc,
|
||||
/** The owner {\bf Document} of the {\bf
|
||||
Element}. */
|
||||
DOMString tagName
|
||||
const DOMString tagName
|
||||
/** The name of the {\bf Element}.*/
|
||||
);
|
||||
|
||||
@@ -1174,11 +1174,11 @@ ixmlElement_getTagName(IXML_Element* element
|
||||
* attribute.
|
||||
*/
|
||||
|
||||
EXPORT_SPEC DOMString
|
||||
EXPORT_SPEC const DOMString
|
||||
ixmlElement_getAttribute(IXML_Element* element,
|
||||
/** The {\bf Element} from which to retrieve the
|
||||
attribute. */
|
||||
DOMString name
|
||||
const DOMString name
|
||||
/** The name of the attribute to retrieve. */
|
||||
);
|
||||
|
||||
@@ -1202,9 +1202,9 @@ EXPORT_SPEC int
|
||||
ixmlElement_setAttribute(IXML_Element* element,
|
||||
/** The {\bf Element} on which to set the
|
||||
attribute. */
|
||||
DOMString name,
|
||||
const DOMString name,
|
||||
/** The name of the attribute. */
|
||||
DOMString value
|
||||
const DOMString value
|
||||
/** The value of the attribute. Note that this is
|
||||
a non-parsed string and any markup must be
|
||||
escaped. */
|
||||
@@ -1224,7 +1224,7 @@ EXPORT_SPEC int
|
||||
ixmlElement_removeAttribute(IXML_Element* element,
|
||||
/** The {\bf Element} from which to remove the
|
||||
attribute. */
|
||||
DOMString name
|
||||
const DOMString name
|
||||
/** The name of the attribute to remove. */
|
||||
);
|
||||
|
||||
@@ -1240,7 +1240,7 @@ EXPORT_SPEC IXML_Attr*
|
||||
ixmlElement_getAttributeNode(IXML_Element* element,
|
||||
/** The {\bf Element} from which to get the
|
||||
attribute node. */
|
||||
DOMString name
|
||||
const DOMString name
|
||||
/** The name of the attribute node to find. */
|
||||
);
|
||||
|
||||
@@ -1309,7 +1309,7 @@ EXPORT_SPEC IXML_NodeList*
|
||||
ixmlElement_getElementsByTagName(IXML_Element* element,
|
||||
/** The {\bf Element} from which to start
|
||||
the search. */
|
||||
DOMString tagName
|
||||
const DOMString tagName
|
||||
/** The name of the tag for which to
|
||||
search. */
|
||||
);
|
||||
@@ -1322,13 +1322,13 @@ ixmlElement_getElementsByTagName(IXML_Element* element,
|
||||
* matching attribute.
|
||||
*/
|
||||
|
||||
EXPORT_SPEC DOMString
|
||||
EXPORT_SPEC const DOMString
|
||||
ixmlElement_getAttributeNS(IXML_Element* element,
|
||||
/** The {\bf Element} from which to get the
|
||||
attribute value. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI of the attribute. */
|
||||
DOMString localname
|
||||
const DOMString localname
|
||||
/** The local name of the attribute. */
|
||||
);
|
||||
|
||||
@@ -1358,11 +1358,11 @@ EXPORT_SPEC int
|
||||
ixmlElement_setAttributeNS(IXML_Element* element,
|
||||
/** The {\bf Element} on which to set the
|
||||
attribute. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI of the new attribute. */
|
||||
DOMString qualifiedName,
|
||||
const DOMString qualifiedName,
|
||||
/** The qualified name of the attribute. */
|
||||
DOMString value
|
||||
const DOMString value
|
||||
/** The new value for the attribute. */
|
||||
);
|
||||
|
||||
@@ -1380,9 +1380,9 @@ EXPORT_SPEC int
|
||||
ixmlElement_removeAttributeNS(IXML_Element* element,
|
||||
/** The {\bf Element} from which to remove the
|
||||
the attribute. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI of the attribute. */
|
||||
DOMString localName
|
||||
const DOMString localName
|
||||
/** The local name of the attribute.*/
|
||||
);
|
||||
|
||||
@@ -1395,9 +1395,9 @@ EXPORT_SPEC IXML_Attr*
|
||||
ixmlElement_getAttributeNodeNS(IXML_Element* element,
|
||||
/** The {\bf Element} from which to get the
|
||||
attribute. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI of the attribute. */
|
||||
DOMString localName
|
||||
const DOMString localName
|
||||
/** The local name of the attribute. */
|
||||
);
|
||||
|
||||
@@ -1441,10 +1441,10 @@ EXPORT_SPEC IXML_NodeList*
|
||||
ixmlElement_getElementsByTagNameNS(IXML_Element* element,
|
||||
/** The {\bf Element} from which to start
|
||||
the search. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI of the {\bf
|
||||
Element}s to find. */
|
||||
DOMString localName
|
||||
const DOMString localName
|
||||
/** The local name of the {\bf Element}s
|
||||
to find. */
|
||||
);
|
||||
@@ -1461,7 +1461,7 @@ EXPORT_SPEC BOOL
|
||||
ixmlElement_hasAttribute(IXML_Element* element,
|
||||
/** The {\bf Element} on which to check for an
|
||||
attribute. */
|
||||
DOMString name
|
||||
const DOMString name
|
||||
/** The name of the attribute for which to check. */
|
||||
);
|
||||
|
||||
@@ -1477,9 +1477,9 @@ EXPORT_SPEC BOOL
|
||||
ixmlElement_hasAttributeNS(IXML_Element* element,
|
||||
/** The {\bf Element} on which to check for the
|
||||
attribute. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI of the attribute. */
|
||||
DOMString localName
|
||||
const DOMString localName
|
||||
/** The local name of the attribute. */
|
||||
);
|
||||
|
||||
@@ -1529,7 +1529,7 @@ ixmlNamedNodeMap_getLength(IXML_NamedNodeMap *nnMap
|
||||
EXPORT_SPEC IXML_Node*
|
||||
ixmlNamedNodeMap_getNamedItem(IXML_NamedNodeMap *nnMap,
|
||||
/** The {\bf NamedNodeMap} to search. */
|
||||
DOMString name
|
||||
const DOMString name
|
||||
/** The name of the {\bf Node} to find. */
|
||||
);
|
||||
|
||||
@@ -1560,7 +1560,7 @@ EXPORT_SPEC IXML_Node*
|
||||
ixmlNamedNodeMap_removeNamedItem(IXML_NamedNodeMap *nnMap,
|
||||
/** The {\bf NamedNodeMap} from which to
|
||||
remove the item. */
|
||||
DOMString name
|
||||
const DOMString name
|
||||
/** The name of the item to remove. */
|
||||
);
|
||||
|
||||
@@ -1592,10 +1592,10 @@ EXPORT_SPEC IXML_Node*
|
||||
ixmlNamedNodeMap_getNamedItemNS(IXML_NamedNodeMap *nnMap,
|
||||
/** The {\bf NamedNodeMap} from which to
|
||||
remove the {\bf Node}. */
|
||||
DOMString *namespaceURI,
|
||||
const DOMString *namespaceURI,
|
||||
/** The namespace URI of the {\bf Node} to
|
||||
remove. */
|
||||
DOMString localName
|
||||
const DOMString localName
|
||||
/** The local name of the {\bf Node} to
|
||||
remove. */
|
||||
);
|
||||
@@ -1627,10 +1627,10 @@ EXPORT_SPEC IXML_Node*
|
||||
ixmlNamedNodeMap_removeNamedItemNS(IXML_NamedNodeMap *nnMap,
|
||||
/** The {\bf NamedNodeMap} from which to
|
||||
remove the {\bf Node}. */
|
||||
DOMString namespaceURI,
|
||||
const DOMString namespaceURI,
|
||||
/** The namespace URI of the {\bf Node}
|
||||
to remove. */
|
||||
DOMString localName
|
||||
const DOMString localName
|
||||
/** The local name of the {\bf Node} to
|
||||
remove. */
|
||||
);
|
||||
@@ -1819,7 +1819,7 @@ ixmlRelaxParser(char errorChar);
|
||||
* {\tt NULL} on an error.
|
||||
*/
|
||||
EXPORT_SPEC IXML_Document*
|
||||
ixmlParseBuffer(char *buffer
|
||||
ixmlParseBuffer(const char *buffer
|
||||
/** The buffer that contains the XML text to convert to a
|
||||
{\bf Document}. */
|
||||
);
|
||||
@@ -1842,7 +1842,7 @@ ixmlParseBuffer(char *buffer
|
||||
*/
|
||||
|
||||
EXPORT_SPEC int
|
||||
ixmlParseBufferEx(char *buffer,
|
||||
ixmlParseBufferEx(const char *buffer,
|
||||
/** The buffer that contains the XML text to convert to a
|
||||
{\bf Document}. */
|
||||
IXML_Document** doc
|
||||
@@ -1857,7 +1857,7 @@ ixmlParseBufferEx(char *buffer,
|
||||
*/
|
||||
|
||||
EXPORT_SPEC IXML_Document*
|
||||
ixmlLoadDocument(char* xmlFile
|
||||
ixmlLoadDocument(const char* xmlFile
|
||||
/** The filename of the XML text to convert to a {\bf
|
||||
Document}. */
|
||||
);
|
||||
@@ -1879,7 +1879,7 @@ ixmlLoadDocument(char* xmlFile
|
||||
*/
|
||||
|
||||
EXPORT_SPEC int
|
||||
ixmlLoadDocumentEx(char* xmlFile,
|
||||
ixmlLoadDocumentEx(const char* xmlFile,
|
||||
/** The filename of the XML text to convert to a {\bf
|
||||
Document}. */
|
||||
IXML_Document** doc
|
||||
|
@@ -373,7 +373,7 @@ ixmlDocument_createTextNode( IN IXML_Document * doc,
|
||||
================================================================*/
|
||||
int
|
||||
ixmlDocument_createAttributeEx( IN IXML_Document * doc,
|
||||
IN char *name,
|
||||
IN const char *name,
|
||||
OUT IXML_Attr ** rtAttr )
|
||||
{
|
||||
IXML_Attr *attrNode = NULL;
|
||||
@@ -427,7 +427,7 @@ ixmlDocument_createAttributeEx( IN IXML_Document * doc,
|
||||
================================================================*/
|
||||
IXML_Attr *
|
||||
ixmlDocument_createAttribute( IN IXML_Document * doc,
|
||||
IN char *name )
|
||||
IN const char *name )
|
||||
{
|
||||
IXML_Attr *attrNode = NULL;
|
||||
|
||||
@@ -451,8 +451,8 @@ ixmlDocument_createAttribute( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlDocument_createAttributeNSEx( IN IXML_Document * doc,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString qualifiedName,
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString qualifiedName,
|
||||
OUT IXML_Attr ** rtAttr )
|
||||
{
|
||||
IXML_Attr *attrNode = NULL;
|
||||
@@ -507,8 +507,8 @@ ixmlDocument_createAttributeNSEx( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
IXML_Attr *
|
||||
ixmlDocument_createAttributeNS( IN IXML_Document * doc,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString qualifiedName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString qualifiedName )
|
||||
{
|
||||
IXML_Attr *attrNode = NULL;
|
||||
|
||||
@@ -531,7 +531,7 @@ ixmlDocument_createAttributeNS( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlDocument_createCDATASectionEx( IN IXML_Document * doc,
|
||||
IN DOMString data,
|
||||
IN const DOMString data,
|
||||
OUT IXML_CDATASection ** rtCD )
|
||||
{
|
||||
int errCode = IXML_SUCCESS;
|
||||
@@ -588,7 +588,7 @@ ixmlDocument_createCDATASectionEx( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
IXML_CDATASection *
|
||||
ixmlDocument_createCDATASection( IN IXML_Document * doc,
|
||||
IN DOMString data )
|
||||
IN const DOMString data )
|
||||
{
|
||||
|
||||
IXML_CDATASection *cDSectionNode = NULL;
|
||||
@@ -613,8 +613,8 @@ ixmlDocument_createCDATASection( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlDocument_createElementNSEx( IN IXML_Document * doc,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString qualifiedName,
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString qualifiedName,
|
||||
OUT IXML_Element ** rtElement )
|
||||
{
|
||||
|
||||
@@ -673,8 +673,8 @@ ixmlDocument_createElementNSEx( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
IXML_Element *
|
||||
ixmlDocument_createElementNS( IN IXML_Document * doc,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString qualifiedName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString qualifiedName )
|
||||
{
|
||||
IXML_Element *newElement = NULL;
|
||||
|
||||
@@ -698,7 +698,7 @@ ixmlDocument_createElementNS( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
IXML_NodeList *
|
||||
ixmlDocument_getElementsByTagName( IN IXML_Document * doc,
|
||||
IN char *tagName )
|
||||
IN const char *tagName )
|
||||
{
|
||||
IXML_NodeList *returnNodeList = NULL;
|
||||
|
||||
@@ -728,8 +728,8 @@ ixmlDocument_getElementsByTagName( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
IXML_NodeList *
|
||||
ixmlDocument_getElementsByTagNameNS( IN IXML_Document * doc,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString localName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString localName )
|
||||
{
|
||||
IXML_NodeList *returnNodeList = NULL;
|
||||
|
||||
@@ -756,7 +756,7 @@ ixmlDocument_getElementsByTagNameNS( IN IXML_Document * doc,
|
||||
*=================================================================*/
|
||||
IXML_Element *
|
||||
ixmlDocument_getElementById( IN IXML_Document * doc,
|
||||
IN DOMString tagName )
|
||||
IN const DOMString tagName )
|
||||
{
|
||||
IXML_Element *rtElement = NULL;
|
||||
IXML_Node *nodeptr = ( IXML_Node * ) doc;
|
||||
|
@@ -71,7 +71,7 @@ ixmlElement_getTagName( IN IXML_Element * element )
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlElement_setTagName( IN IXML_Element * element,
|
||||
IN char *tagName )
|
||||
IN const char *tagName )
|
||||
{
|
||||
int rc = IXML_SUCCESS;
|
||||
|
||||
@@ -104,9 +104,9 @@ ixmlElement_setTagName( IN IXML_Element * element,
|
||||
* does not have a specified value.
|
||||
*
|
||||
*=================================================================*/
|
||||
DOMString
|
||||
const DOMString
|
||||
ixmlElement_getAttribute( IN IXML_Element * element,
|
||||
IN DOMString name )
|
||||
IN const DOMString name )
|
||||
{
|
||||
IXML_Node *attrNode;
|
||||
|
||||
@@ -142,8 +142,8 @@ ixmlElement_getAttribute( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlElement_setAttribute( IN IXML_Element * element,
|
||||
IN char *name,
|
||||
IN char *value )
|
||||
IN const char *name,
|
||||
IN const char *value )
|
||||
{
|
||||
IXML_Node *attrNode;
|
||||
IXML_Attr *newAttrNode;
|
||||
@@ -221,7 +221,7 @@ ixmlElement_setAttribute( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlElement_removeAttribute( IN IXML_Element * element,
|
||||
IN char *name )
|
||||
IN const char *name )
|
||||
{
|
||||
|
||||
IXML_Node *attrNode;
|
||||
@@ -262,7 +262,7 @@ ixmlElement_removeAttribute( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
IXML_Attr *
|
||||
ixmlElement_getAttributeNode( IN IXML_Element * element,
|
||||
IN char *name )
|
||||
IN const char *name )
|
||||
{
|
||||
|
||||
IXML_Node *attrNode;
|
||||
@@ -483,7 +483,7 @@ ixmlElement_removeAttributeNode( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
IXML_NodeList *
|
||||
ixmlElement_getElementsByTagName( IN IXML_Element * element,
|
||||
IN char *tagName )
|
||||
IN const char *tagName )
|
||||
{
|
||||
IXML_NodeList *returnNodeList = NULL;
|
||||
|
||||
@@ -508,10 +508,10 @@ ixmlElement_getElementsByTagName( IN IXML_Element * element,
|
||||
* not have the specified value.
|
||||
*
|
||||
*=================================================================*/
|
||||
DOMString
|
||||
const DOMString
|
||||
ixmlElement_getAttributeNS( IN IXML_Element * element,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString localName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString localName )
|
||||
{
|
||||
IXML_Node *attrNode;
|
||||
|
||||
@@ -553,9 +553,9 @@ ixmlElement_getAttributeNS( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlElement_setAttributeNS( IN IXML_Element * element,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString qualifiedName,
|
||||
IN DOMString value )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString qualifiedName,
|
||||
IN const DOMString value )
|
||||
{
|
||||
IXML_Node *attrNode = NULL;
|
||||
IXML_Node newAttrNode;
|
||||
@@ -672,8 +672,8 @@ ixmlElement_setAttributeNS( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlElement_removeAttributeNS( IN IXML_Element * element,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString localName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString localName )
|
||||
{
|
||||
IXML_Node *attrNode;
|
||||
|
||||
@@ -719,8 +719,8 @@ ixmlElement_removeAttributeNS( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
IXML_Attr *
|
||||
ixmlElement_getAttributeNodeNS( IN IXML_Element * element,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString localName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString localName )
|
||||
{
|
||||
|
||||
IXML_Node *attrNode;
|
||||
@@ -861,8 +861,8 @@ ixmlElement_setAttributeNodeNS( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
IXML_NodeList *
|
||||
ixmlElement_getElementsByTagNameNS( IN IXML_Element * element,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString localName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString localName )
|
||||
{
|
||||
IXML_Node *node = ( IXML_Node * ) element;
|
||||
IXML_NodeList *nodeList = NULL;
|
||||
@@ -892,7 +892,7 @@ ixmlElement_getElementsByTagNameNS( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
BOOL
|
||||
ixmlElement_hasAttribute( IN IXML_Element * element,
|
||||
IN DOMString name )
|
||||
IN const DOMString name )
|
||||
{
|
||||
|
||||
IXML_Node *attrNode;
|
||||
@@ -930,8 +930,8 @@ ixmlElement_hasAttribute( IN IXML_Element * element,
|
||||
*=================================================================*/
|
||||
BOOL
|
||||
ixmlElement_hasAttributeNS( IN IXML_Element * element,
|
||||
IN DOMString namespaceURI,
|
||||
IN DOMString localName )
|
||||
IN const DOMString namespaceURI,
|
||||
IN const DOMString localName )
|
||||
{
|
||||
|
||||
IXML_Node *attrNode;
|
||||
|
@@ -88,8 +88,8 @@ typedef struct _Parser
|
||||
|
||||
|
||||
|
||||
int Parser_LoadDocument( IXML_Document **retDoc, char * xmlFile, BOOL file);
|
||||
BOOL Parser_isValidXmlName( DOMString name);
|
||||
int Parser_LoadDocument( IXML_Document **retDoc, const char * xmlFile, BOOL file);
|
||||
BOOL Parser_isValidXmlName( const DOMString name);
|
||||
int Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr);
|
||||
void Parser_freeNodeContent( IXML_Node *IXML_Nodeptr);
|
||||
|
||||
@@ -98,7 +98,7 @@ void Parser_setErrorChar( char c );
|
||||
void ixmlAttr_free(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);
|
||||
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);
|
||||
BOOL ixmlNode_compare(IXML_Node *srcIXML_Node, IXML_Node *destIXML_Node);
|
||||
|
||||
void ixmlNode_getElementsByTagName( IXML_Node *n, char *tagname, IXML_NodeList **list);
|
||||
void ixmlNode_getElementsByTagNameNS( IXML_Node *IXML_Node, char *namespaceURI,
|
||||
char *localName, IXML_NodeList **list);
|
||||
void ixmlNode_getElementsByTagName( IXML_Node *n, const char *tagname, IXML_NodeList **list);
|
||||
void ixmlNode_getElementsByTagNameNS( IXML_Node *IXML_Node, const char *namespaceURI,
|
||||
const char *localName, IXML_NodeList **list);
|
||||
|
||||
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);
|
||||
int ixmlNodeList_addToNodeList(IXML_NodeList **nList, IXML_Node *add);
|
||||
|
@@ -39,7 +39,7 @@
|
||||
*=================================================================*/
|
||||
static void
|
||||
copy_with_escape( INOUT ixml_membuf * buf,
|
||||
IN char *p )
|
||||
IN const char *p )
|
||||
{
|
||||
int i;
|
||||
int plen;
|
||||
@@ -87,13 +87,13 @@ void
|
||||
ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr,
|
||||
IN ixml_membuf * buf )
|
||||
{
|
||||
char *nodeName = NULL;
|
||||
char *nodeValue = NULL;
|
||||
const char *nodeName = NULL;
|
||||
const char *nodeValue = NULL;
|
||||
IXML_Node *child = NULL,
|
||||
*sibling = NULL;
|
||||
|
||||
if( nodeptr != NULL ) {
|
||||
nodeName = ( char * )ixmlNode_getNodeName( nodeptr );
|
||||
nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
|
||||
nodeValue = ixmlNode_getNodeValue( nodeptr );
|
||||
|
||||
switch ( ixmlNode_getNodeType( nodeptr ) ) {
|
||||
@@ -103,14 +103,16 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr,
|
||||
break;
|
||||
|
||||
case eCDATA_SECTION_NODE:
|
||||
ixml_membuf_append_str( buf, "<![CDATA[" );
|
||||
ixml_membuf_append_str( buf, nodeValue );
|
||||
ixml_membuf_append_str( buf, "]]>" );
|
||||
break;
|
||||
|
||||
case ePROCESSING_INSTRUCTION_NODE:
|
||||
ixml_membuf_append_str( buf, "<?" );
|
||||
ixml_membuf_append_str( buf, nodeName );
|
||||
ixml_membuf_append_str( buf, " " );
|
||||
ixml_membuf_append_str( buf, nodeValue );
|
||||
copy_with_escape( buf, nodeValue );
|
||||
ixml_membuf_append_str( buf, "?>\n" );
|
||||
break;
|
||||
|
||||
@@ -122,10 +124,9 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr,
|
||||
case eATTRIBUTE_NODE:
|
||||
ixml_membuf_append_str( buf, nodeName );
|
||||
ixml_membuf_append_str( buf, "=\"" );
|
||||
if( nodeValue != NULL ) {
|
||||
ixml_membuf_append_str( buf, nodeValue );
|
||||
}
|
||||
copy_with_escape( buf, nodeValue );
|
||||
ixml_membuf_append_str( buf, "\"" );
|
||||
|
||||
if( nodeptr->nextSibling != NULL ) {
|
||||
ixml_membuf_append_str( buf, " " );
|
||||
ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf );
|
||||
@@ -145,7 +146,7 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr,
|
||||
if( ( child != NULL )
|
||||
&& ( ixmlNode_getNodeType( child ) ==
|
||||
eELEMENT_NODE ) ) {
|
||||
ixml_membuf_append_str( buf, ">\n" );
|
||||
ixml_membuf_append_str( buf, ">\r\n" );
|
||||
} else {
|
||||
ixml_membuf_append_str( buf, ">" );
|
||||
}
|
||||
@@ -163,7 +164,7 @@ ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr,
|
||||
&& ixmlNode_getNodeType( sibling ) == eTEXT_NODE ) {
|
||||
ixml_membuf_append_str( buf, ">" );
|
||||
} else {
|
||||
ixml_membuf_append_str( buf, ">\n" );
|
||||
ixml_membuf_append_str( buf, ">\r\n" );
|
||||
}
|
||||
ixmlPrintDomTreeRecursive( ixmlNode_getNextSibling
|
||||
( nodeptr ), buf );
|
||||
@@ -187,15 +188,15 @@ void
|
||||
ixmlPrintDomTree( IN IXML_Node * nodeptr,
|
||||
IN ixml_membuf * buf )
|
||||
{
|
||||
char *nodeName = NULL;
|
||||
char *nodeValue = NULL;
|
||||
const char *nodeName = NULL;
|
||||
const char *nodeValue = NULL;
|
||||
IXML_Node *child = NULL;
|
||||
|
||||
if( ( nodeptr == NULL ) || ( buf == NULL ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
nodeName = ( char * )ixmlNode_getNodeName( nodeptr );
|
||||
nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
|
||||
nodeValue = ixmlNode_getNodeValue( nodeptr );
|
||||
|
||||
switch ( ixmlNode_getNodeType( nodeptr ) ) {
|
||||
@@ -210,7 +211,7 @@ ixmlPrintDomTree( IN IXML_Node * nodeptr,
|
||||
case eATTRIBUTE_NODE:
|
||||
ixml_membuf_append_str( buf, nodeName );
|
||||
ixml_membuf_append_str( buf, "=\"" );
|
||||
ixml_membuf_append_str( buf, nodeValue );
|
||||
copy_with_escape( buf, nodeValue );
|
||||
ixml_membuf_append_str( buf, "\"" );
|
||||
break;
|
||||
|
||||
@@ -226,7 +227,7 @@ ixmlPrintDomTree( IN IXML_Node * nodeptr,
|
||||
child = ixmlNode_getFirstChild( nodeptr );
|
||||
if( ( child != NULL )
|
||||
&& ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) {
|
||||
ixml_membuf_append_str( buf, ">\n" );
|
||||
ixml_membuf_append_str( buf, ">\r\n" );
|
||||
} else {
|
||||
ixml_membuf_append_str( buf, ">" );
|
||||
}
|
||||
@@ -238,7 +239,7 @@ ixmlPrintDomTree( IN IXML_Node * nodeptr,
|
||||
// Done with children. Output the end tag.
|
||||
ixml_membuf_append_str( buf, "</" );
|
||||
ixml_membuf_append_str( buf, nodeName );
|
||||
ixml_membuf_append_str( buf, ">\n" );
|
||||
ixml_membuf_append_str( buf, ">\r\n" );
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -258,15 +259,15 @@ void
|
||||
ixmlDomTreetoString( IN IXML_Node * nodeptr,
|
||||
IN ixml_membuf * buf )
|
||||
{
|
||||
char *nodeName = NULL;
|
||||
char *nodeValue = NULL;
|
||||
const char *nodeName = NULL;
|
||||
const char *nodeValue = NULL;
|
||||
IXML_Node *child = NULL;
|
||||
|
||||
if( ( nodeptr == NULL ) || ( buf == NULL ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
nodeName = ( char * )ixmlNode_getNodeName( nodeptr );
|
||||
nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
|
||||
nodeValue = ixmlNode_getNodeValue( nodeptr );
|
||||
|
||||
switch ( ixmlNode_getNodeType( nodeptr ) ) {
|
||||
@@ -281,7 +282,7 @@ ixmlDomTreetoString( IN IXML_Node * nodeptr,
|
||||
case eATTRIBUTE_NODE:
|
||||
ixml_membuf_append_str( buf, nodeName );
|
||||
ixml_membuf_append_str( buf, "=\"" );
|
||||
ixml_membuf_append_str( buf, nodeValue );
|
||||
copy_with_escape( buf, nodeValue );
|
||||
ixml_membuf_append_str( buf, "\"" );
|
||||
break;
|
||||
|
||||
@@ -324,7 +325,7 @@ ixmlDomTreetoString( IN IXML_Node * nodeptr,
|
||||
*
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlLoadDocumentEx( IN char *xmlFile,
|
||||
ixmlLoadDocumentEx( IN const char *xmlFile,
|
||||
IXML_Document ** doc )
|
||||
{
|
||||
|
||||
@@ -342,7 +343,7 @@ ixmlLoadDocumentEx( IN char *xmlFile,
|
||||
*
|
||||
*=================================================================*/
|
||||
IXML_Document *
|
||||
ixmlLoadDocument( IN char *xmlFile )
|
||||
ixmlLoadDocument( IN const char *xmlFile )
|
||||
{
|
||||
|
||||
IXML_Document *doc = NULL;
|
||||
@@ -371,7 +372,7 @@ ixmlPrintDocument(IXML_Document *doc)
|
||||
}
|
||||
|
||||
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 );
|
||||
return buf->buf;
|
||||
|
||||
@@ -420,7 +421,7 @@ ixmlDocumenttoString(IXML_Document *doc)
|
||||
}
|
||||
|
||||
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 );
|
||||
return buf->buf;
|
||||
|
||||
@@ -469,7 +470,7 @@ ixmlRelaxParser(char errorChar)
|
||||
*
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlParseBufferEx( IN char *buffer,
|
||||
ixmlParseBufferEx( IN const char *buffer,
|
||||
IXML_Document ** retDoc )
|
||||
{
|
||||
|
||||
@@ -477,7 +478,7 @@ ixmlParseBufferEx( IN char *buffer,
|
||||
return IXML_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if( strlen( buffer ) == 0 ) {
|
||||
if( buffer[0] == '\0' ) {
|
||||
return IXML_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -491,7 +492,7 @@ ixmlParseBufferEx( IN char *buffer,
|
||||
*
|
||||
*=================================================================*/
|
||||
IXML_Document *
|
||||
ixmlParseBuffer( IN char *buffer )
|
||||
ixmlParseBuffer( IN const char *buffer )
|
||||
{
|
||||
IXML_Document *doc = NULL;
|
||||
|
||||
|
@@ -232,15 +232,30 @@ static BOOL Parser_ElementPrefixDefined( Parser * myParser,
|
||||
IXML_Node * newNode,
|
||||
char **nsURI );
|
||||
static int Parser_setElementNamespace( IXML_Element * newElement,
|
||||
char *nsURI );
|
||||
const char *nsURI );
|
||||
static int Parser_parseDocument( IXML_Document ** retDoc,
|
||||
Parser * domParser );
|
||||
static BOOL Parser_hasDefaultNamespace( Parser * xmlParser,
|
||||
IXML_Node * newNode,
|
||||
char **nsURI );
|
||||
static int Parser_getChar( IN char *src,
|
||||
static int Parser_getChar( IN const char *src,
|
||||
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
|
||||
* will determine whether character c is in the table of tbl
|
||||
@@ -312,9 +327,9 @@ Parser_isNameChar( IN int c,
|
||||
*
|
||||
*===============================================================================*/
|
||||
BOOL
|
||||
Parser_isValidXmlName( IN DOMString name )
|
||||
Parser_isValidXmlName( IN const DOMString name )
|
||||
{
|
||||
char *pstr = NULL;
|
||||
const char *pstr = NULL;
|
||||
int i = 0,
|
||||
nameLen = 0;
|
||||
|
||||
@@ -325,7 +340,7 @@ Parser_isValidXmlName( IN DOMString name )
|
||||
pstr = name;
|
||||
if( Parser_isNameChar( *pstr, FALSE ) == TRUE ) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -419,11 +434,11 @@ Parser_intToUTF8( IN int c,
|
||||
*
|
||||
*===============================================================================*/
|
||||
static int
|
||||
Parser_UTF8ToInt( IN char *ss,
|
||||
Parser_UTF8ToInt( IN const char *ss,
|
||||
OUT int *len )
|
||||
{
|
||||
|
||||
unsigned char *s = ( unsigned char * )ss;
|
||||
const unsigned char *s = ( const unsigned char * )ss;
|
||||
int c = *s;
|
||||
|
||||
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 ) );
|
||||
// the element member includes both prefix and name
|
||||
|
||||
pNewStackElement->element = strdup( newElement->nodeName );
|
||||
pNewStackElement->element = safe_strdup( newElement->nodeName );
|
||||
if( pNewStackElement->element == NULL ) {
|
||||
free( pNewStackElement );
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
|
||||
if( newElement->prefix != 0 ) {
|
||||
pNewStackElement->prefix = strdup( newElement->prefix );
|
||||
pNewStackElement->prefix = safe_strdup( newElement->prefix );
|
||||
if( pNewStackElement->prefix == NULL ) {
|
||||
Parser_freeElementStackItem( pNewStackElement );
|
||||
free( pNewStackElement );
|
||||
@@ -542,7 +557,7 @@ Parser_pushElement( IN Parser * xmlParser,
|
||||
|
||||
if( newElement->namespaceURI != 0 ) {
|
||||
pNewStackElement->namespaceUri =
|
||||
strdup( newElement->namespaceURI );
|
||||
safe_strdup( newElement->namespaceURI );
|
||||
if( pNewStackElement->namespaceUri == NULL ) {
|
||||
Parser_freeElementStackItem( pNewStackElement );
|
||||
free( pNewStackElement );
|
||||
@@ -602,7 +617,7 @@ Parser_popElement( IN Parser * xmlParser )
|
||||
*=================================================================*/
|
||||
static int
|
||||
Parser_readFileOrBuffer( IN Parser * xmlParser,
|
||||
IN char *xmlFileName,
|
||||
IN const char *xmlFileName,
|
||||
IN BOOL file )
|
||||
{
|
||||
int fileSize = 0;
|
||||
@@ -634,7 +649,7 @@ Parser_readFileOrBuffer( IN Parser * xmlParser,
|
||||
fclose( xmlFilePtr );
|
||||
}
|
||||
} else {
|
||||
xmlParser->dataBuffer = strdup( xmlFileName );
|
||||
xmlParser->dataBuffer = safe_strdup( xmlFileName );
|
||||
if( xmlParser->dataBuffer == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -651,7 +666,7 @@ Parser_readFileOrBuffer( IN Parser * xmlParser,
|
||||
*=================================================================*/
|
||||
int
|
||||
Parser_LoadDocument( OUT IXML_Document ** retDoc,
|
||||
IN char *xmlFileName,
|
||||
IN const char *xmlFileName,
|
||||
IN BOOL file )
|
||||
{
|
||||
int rc = IXML_SUCCESS;
|
||||
@@ -1117,10 +1132,10 @@ Parser_skipWhiteSpaces( IN Parser * xmlParser )
|
||||
*
|
||||
*===============================================================================*/
|
||||
static int
|
||||
Parser_getChar( IN char *src,
|
||||
Parser_getChar( IN const char *src,
|
||||
INOUT int *cLen )
|
||||
{
|
||||
char *pnum;
|
||||
const char *pnum;
|
||||
int sum;
|
||||
char c;
|
||||
int i;
|
||||
@@ -1213,13 +1228,13 @@ fail_entity:
|
||||
*===============================================================================*/
|
||||
static int
|
||||
Parser_copyToken( IN Parser * xmlParser,
|
||||
IN char *src,
|
||||
IN const char *src,
|
||||
IN int len )
|
||||
{
|
||||
int i,
|
||||
c,
|
||||
cl;
|
||||
char *psrc,
|
||||
const char *psrc,
|
||||
*pend;
|
||||
utf8char uch;
|
||||
|
||||
@@ -1563,7 +1578,7 @@ Parser_getNextToken( IN Parser * xmlParser )
|
||||
*===============================================================================*/
|
||||
static char *
|
||||
Parser_getNameSpace( IN Parser * xmlParser,
|
||||
IN char *prefix )
|
||||
IN const char *prefix )
|
||||
{
|
||||
IXML_ElementStack *pCur;
|
||||
IXML_NamespaceURI *pNsUri;
|
||||
@@ -1597,7 +1612,7 @@ Parser_addNamespace( IN Parser * xmlParser )
|
||||
{
|
||||
IXML_Node *pNode;
|
||||
IXML_ElementStack *pCur;
|
||||
char *namespaceUri;
|
||||
const char *namespaceUri;
|
||||
|
||||
pNode = xmlParser->pNeedPrefixNode;
|
||||
pCur = xmlParser->pCurElement;
|
||||
@@ -1610,7 +1625,7 @@ Parser_addNamespace( IN Parser * xmlParser )
|
||||
// it would be wrong that pNode->namespace != NULL.
|
||||
assert( pNode->namespaceURI == NULL );
|
||||
|
||||
pNode->namespaceURI = strdup( pCur->namespaceUri );
|
||||
pNode->namespaceURI = safe_strdup( pCur->namespaceUri );
|
||||
if( pNode->namespaceURI == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -1626,7 +1641,7 @@ Parser_addNamespace( IN Parser * xmlParser )
|
||||
|
||||
namespaceUri = Parser_getNameSpace( xmlParser, pCur->prefix );
|
||||
if( namespaceUri != NULL ) {
|
||||
pNode->namespaceURI = strdup( namespaceUri );
|
||||
pNode->namespaceURI = safe_strdup( namespaceUri );
|
||||
if( pNode->namespaceURI == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -1661,7 +1676,7 @@ Parser_setNodePrefixAndLocalName( IN IXML_Node * node )
|
||||
pStrPrefix = strchr( node->nodeName, ':' );
|
||||
if( pStrPrefix == NULL ) {
|
||||
node->prefix = NULL;
|
||||
node->localName = strdup( node->nodeName );
|
||||
node->localName = safe_strdup( node->nodeName );
|
||||
if( node->localName == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -1678,7 +1693,7 @@ Parser_setNodePrefixAndLocalName( IN IXML_Node * node )
|
||||
memset( node->prefix, 0, nPrefix + 1 );
|
||||
strncpy( node->prefix, node->nodeName, nPrefix );
|
||||
|
||||
node->localName = strdup( pLocalName );
|
||||
node->localName = safe_strdup( pLocalName );
|
||||
if( node->localName == NULL ) {
|
||||
free( node->prefix );
|
||||
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
|
||||
if(newNode->nodeValue){
|
||||
pCur->namespaceUri = strdup( newNode->nodeValue );
|
||||
pCur->namespaceUri = safe_strdup( newNode->nodeValue );
|
||||
if( pCur->namespaceUri == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -1738,7 +1753,7 @@ Parser_xmlNamespace( IN Parser * xmlParser,
|
||||
|
||||
if( ( pCur->prefix != NULL )
|
||||
&& ( strcmp( pCur->prefix, newNode->localName ) == 0 ) ) {
|
||||
pCur->namespaceUri = strdup( newNode->nodeValue );
|
||||
pCur->namespaceUri = safe_strdup( newNode->nodeValue );
|
||||
if( pCur->namespaceUri == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -1765,13 +1780,13 @@ Parser_xmlNamespace( IN Parser * xmlParser,
|
||||
}
|
||||
memset( pNewNs, 0, sizeof( IXML_NamespaceURI ) );
|
||||
|
||||
pNewNs->prefix = strdup( newNode->localName );
|
||||
pNewNs->prefix = safe_strdup( newNode->localName );
|
||||
if( pNewNs->prefix == NULL ) {
|
||||
free( pNewNs );
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
|
||||
pNewNs->nsURI = strdup( newNode->nodeValue );
|
||||
pNewNs->nsURI = safe_strdup( newNode->nodeValue );
|
||||
if( pNewNs->nsURI == NULL ) {
|
||||
Parser_freeNsURI( pNewNs );
|
||||
free( pNewNs );
|
||||
@@ -1789,7 +1804,7 @@ Parser_xmlNamespace( IN Parser * xmlParser,
|
||||
free( pNs->nsURI );
|
||||
}
|
||||
|
||||
pNs->nsURI = strdup( newNode->nodeValue );
|
||||
pNs->nsURI = safe_strdup( newNode->nodeValue );
|
||||
if( pNs->nsURI == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -1826,7 +1841,7 @@ Parser_processSTag( IN Parser * xmlParser,
|
||||
|
||||
pCurToken = ( xmlParser->tokenBuf ).buf;
|
||||
if( pCurToken != NULL ) {
|
||||
node->nodeName = strdup( pCurToken );
|
||||
node->nodeName = safe_strdup( pCurToken );
|
||||
if( node->nodeName == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -1977,7 +1992,7 @@ Parser_processCDSect( IN char **pSrc,
|
||||
strncpy( node->nodeValue, pCDataStart, tokenLength );
|
||||
node->nodeValue[tokenLength] = '\0';
|
||||
|
||||
node->nodeName = strdup( CDATANODENAME );
|
||||
node->nodeName = safe_strdup( CDATANODENAME );
|
||||
if( node->nodeName == NULL ) {
|
||||
// no need to free node->nodeValue at all, bacause node contents
|
||||
// will be freed by the main loop.
|
||||
@@ -2002,13 +2017,13 @@ Parser_processCDSect( IN char **pSrc,
|
||||
*===============================================================================*/
|
||||
static int
|
||||
Parser_setElementNamespace( IN IXML_Element * newElement,
|
||||
IN char *nsURI )
|
||||
IN const char *nsURI )
|
||||
{
|
||||
if( newElement != NULL ) {
|
||||
if( newElement->n.namespaceURI != NULL ) {
|
||||
return IXML_SYNTAX_ERR;
|
||||
} else {
|
||||
( newElement->n ).namespaceURI = strdup( nsURI );
|
||||
( newElement->n ).namespaceURI = safe_strdup( nsURI );
|
||||
if( ( newElement->n ).namespaceURI == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -2107,7 +2122,7 @@ Parser_processContent( IN Parser * xmlParser,
|
||||
|
||||
pCurToken = ( xmlParser->tokenBuf ).buf;
|
||||
if( pCurToken != NULL ) {
|
||||
node->nodeValue = strdup( pCurToken );
|
||||
node->nodeValue = safe_strdup( pCurToken );
|
||||
if( node->nodeValue == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -2115,7 +2130,7 @@ Parser_processContent( IN Parser * xmlParser,
|
||||
return IXML_SYNTAX_ERR;
|
||||
}
|
||||
|
||||
node->nodeName = strdup( TEXTNODENAME );
|
||||
node->nodeName = safe_strdup( TEXTNODENAME );
|
||||
if( node->nodeName == NULL ) {
|
||||
return IXML_SYNTAX_ERR;
|
||||
}
|
||||
@@ -2152,7 +2167,7 @@ Parser_processETag( IN Parser * xmlParser,
|
||||
if( pCurToken == NULL ) {
|
||||
return IXML_SYNTAX_ERR;
|
||||
}
|
||||
node->nodeName = strdup( pCurToken );
|
||||
node->nodeName = safe_strdup( pCurToken );
|
||||
if( node->nodeName == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -2320,7 +2335,7 @@ Parser_processAttribute( IN Parser * xmlParser,
|
||||
return IXML_SYNTAX_ERR;
|
||||
}
|
||||
// copy in the attribute name
|
||||
node->nodeName = strdup( pCurToken );
|
||||
node->nodeName = safe_strdup( pCurToken );
|
||||
if( node->nodeName == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -2373,7 +2388,7 @@ Parser_processAttribute( IN Parser * xmlParser,
|
||||
|
||||
pCurToken = ( xmlParser->tokenBuf ).buf;
|
||||
if( pCurToken != NULL ) { // attribute has value, like a="c"
|
||||
node->nodeValue = strdup( pCurToken );
|
||||
node->nodeValue = safe_strdup( pCurToken );
|
||||
if( node->nodeValue == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
@@ -2456,7 +2471,7 @@ Parser_getNextNode( IN Parser * xmlParser,
|
||||
goto ErrorHandler;
|
||||
}
|
||||
|
||||
node->nodeName = strdup( lastElement );
|
||||
node->nodeName = safe_strdup( lastElement );
|
||||
if( node->nodeName == NULL ) {
|
||||
return IXML_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@
|
||||
*=================================================================*/
|
||||
unsigned long
|
||||
ixmlNamedNodeMap_getItemNumber( IN IXML_NamedNodeMap * nnMap,
|
||||
IN char *name )
|
||||
IN const char *name )
|
||||
{
|
||||
IXML_Node *tempNode;
|
||||
unsigned long returnItemNo = 0;
|
||||
@@ -92,7 +92,7 @@ ixmlNamedNodeMap_init( IN IXML_NamedNodeMap * nnMap )
|
||||
*=================================================================*/
|
||||
IXML_Node *
|
||||
ixmlNamedNodeMap_getNamedItem( IN IXML_NamedNodeMap * nnMap,
|
||||
IN char *name )
|
||||
IN const char *name )
|
||||
{
|
||||
long index;
|
||||
|
||||
|
@@ -175,7 +175,7 @@ ixmlNode_getLocalName( IN IXML_Node * nodeptr )
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlNode_setNamespaceURI( IN IXML_Node * nodeptr,
|
||||
IN char *namespaceURI )
|
||||
IN const char *namespaceURI )
|
||||
{
|
||||
|
||||
if( nodeptr == NULL ) {
|
||||
@@ -207,7 +207,7 @@ ixmlNode_setNamespaceURI( IN IXML_Node * nodeptr,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlNode_setPrefix( IN IXML_Node * nodeptr,
|
||||
IN char *prefix )
|
||||
IN const char *prefix )
|
||||
{
|
||||
|
||||
if( nodeptr == NULL ) {
|
||||
@@ -240,7 +240,7 @@ ixmlNode_setPrefix( IN IXML_Node * nodeptr,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlNode_setLocalName( IN IXML_Node * nodeptr,
|
||||
IN char *localName )
|
||||
IN const char *localName )
|
||||
{
|
||||
|
||||
assert( nodeptr != NULL );
|
||||
@@ -288,10 +288,10 @@ ixmlNode_getNamespaceURI( IN IXML_Node * nodeptr )
|
||||
* the prefix of the node.
|
||||
*
|
||||
*=================================================================*/
|
||||
DOMString
|
||||
const DOMString
|
||||
ixmlNode_getPrefix( IN IXML_Node * nodeptr )
|
||||
{
|
||||
DOMString prefix = NULL;
|
||||
const DOMString prefix = NULL;
|
||||
|
||||
if( nodeptr != NULL ) {
|
||||
prefix = nodeptr->prefix;
|
||||
@@ -309,7 +309,7 @@ ixmlNode_getPrefix( IN IXML_Node * nodeptr )
|
||||
* the nodeValue of the node.
|
||||
*
|
||||
*=================================================================*/
|
||||
DOMString
|
||||
const DOMString
|
||||
ixmlNode_getNodeValue( IN IXML_Node * nodeptr )
|
||||
{
|
||||
|
||||
@@ -330,7 +330,7 @@ ixmlNode_getNodeValue( IN IXML_Node * nodeptr )
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlNode_setNodeValue( IN IXML_Node * nodeptr,
|
||||
IN char *newNodeValue )
|
||||
IN const char *newNodeValue )
|
||||
{
|
||||
int rc = IXML_SUCCESS;
|
||||
|
||||
@@ -1425,7 +1425,7 @@ ixmlNode_hasAttributes( IXML_Node * nodeptr )
|
||||
*=================================================================*/
|
||||
void
|
||||
ixmlNode_getElementsByTagNameRecursive( IN IXML_Node * n,
|
||||
IN char *tagname,
|
||||
IN const char *tagname,
|
||||
OUT IXML_NodeList ** list )
|
||||
{
|
||||
const char *name;
|
||||
@@ -1457,7 +1457,7 @@ ixmlNode_getElementsByTagNameRecursive( IN IXML_Node * n,
|
||||
*=================================================================*/
|
||||
void
|
||||
ixmlNode_getElementsByTagName( IN IXML_Node * n,
|
||||
IN char *tagname,
|
||||
IN const char *tagname,
|
||||
OUT IXML_NodeList ** list )
|
||||
{
|
||||
const char *name;
|
||||
@@ -1484,8 +1484,8 @@ ixmlNode_getElementsByTagName( IN IXML_Node * n,
|
||||
*=================================================================*/
|
||||
void
|
||||
ixmlNode_getElementsByTagNameNSRecursive( IN IXML_Node * n,
|
||||
IN char *namespaceURI,
|
||||
IN char *localName,
|
||||
IN const char *namespaceURI,
|
||||
IN const char *localName,
|
||||
OUT IXML_NodeList ** list )
|
||||
{
|
||||
const DOMString nsURI;
|
||||
@@ -1525,8 +1525,8 @@ ixmlNode_getElementsByTagNameNSRecursive( IN IXML_Node * n,
|
||||
*=================================================================*/
|
||||
void
|
||||
ixmlNode_getElementsByTagNameNS( IN IXML_Node * n,
|
||||
IN char *namespaceURI,
|
||||
IN char *localName,
|
||||
IN const char *namespaceURI,
|
||||
IN const char *localName,
|
||||
OUT IXML_NodeList ** list )
|
||||
{
|
||||
const DOMString nsURI;
|
||||
@@ -1560,7 +1560,7 @@ ixmlNode_getElementsByTagNameNS( IN IXML_Node * n,
|
||||
*=================================================================*/
|
||||
int
|
||||
ixmlNode_setNodeName( IN IXML_Node * node,
|
||||
IN DOMString qualifiedName )
|
||||
IN const DOMString qualifiedName )
|
||||
{
|
||||
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
|
||||
Name: libupnp
|
||||
Release: 1%{?dist}
|
||||
License: BSD
|
||||
Group: System Environment/Libraries
|
||||
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)
|
||||
|
||||
%define docdir %{_docdir}/%{name}-%{version}-%{release}
|
||||
%define docdeveldir %{_docdir}/%{name}-devel-%{version}-%{release}
|
||||
%define docdeveldir %{_docdir}/%{name}-devel-%{version}
|
||||
|
||||
%description
|
||||
The Universal Plug and Play (UPnP) SDK for Linux provides
|
||||
@@ -29,7 +28,7 @@ the UPnP SDK libraries.
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
%configure --with-docdir=%{docdir}/
|
||||
%configure --with-documentation
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
@@ -78,6 +77,9 @@ make install DESTDIR=$RPM_BUILD_ROOT
|
||||
rm -rf %{buildroot}
|
||||
|
||||
%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
|
||||
- Update to version 1.4.1
|
||||
|
||||
@@ -117,3 +119,4 @@ rm -rf %{buildroot}
|
||||
* Thu Dec 22 2005 Eric Tanguy 1.2.1a-1
|
||||
- Modify spec file from
|
||||
http://rpm.pbone.net/index.php3/stat/4/idpl/2378737/com/libupnp-1.2.1a_DSM320-3.i386.rpm.html
|
||||
|
||||
|
@@ -61,32 +61,33 @@ typedef enum priority {LOW_PRIORITY,
|
||||
#define DEFAULT_JOBS_PER_THREAD 10 //default jobs per thread used by TPAttrInit
|
||||
#define DEFAULT_STARVATION_TIME 500 //default starvation time used by TPAttrInit
|
||||
#define DEFAULT_IDLE_TIME 10 * 1000 //default idle time used by TPAttrInit
|
||||
#define DEFAULT_FREE_ROUTINE NULL //default free routine used TPJobInit
|
||||
#define DEFAULT_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
|
||||
|
||||
|
||||
//Statistics
|
||||
//Statistics
|
||||
#ifdef WIN32 // todo: check why STATSONLY fails during compilation
|
||||
#undef STATS
|
||||
#endif
|
||||
|
||||
#ifdef STATS
|
||||
#define STATSONLY(x) x
|
||||
#define STATSONLY(x) x
|
||||
#else
|
||||
#define STATSONLY(x)
|
||||
#define STATSONLY(x)
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define DEBUG 1
|
||||
#define DEBUG 1
|
||||
#endif
|
||||
|
||||
//DEBUGGING
|
||||
#ifndef WIN32
|
||||
#ifdef DEBUG
|
||||
#define DBGONLY(x) x
|
||||
#define DBGONLY(x) x
|
||||
#else
|
||||
#define DBGONLY(x)
|
||||
#define DBGONLY(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -97,7 +98,7 @@ typedef enum priority {LOW_PRIORITY,
|
||||
#include "ithread.h"
|
||||
#include <errno.h>
|
||||
#include <sys/timeb.h>
|
||||
#define EXPORT
|
||||
#define EXPORT
|
||||
typedef int PolicyType;
|
||||
#define DEFAULT_POLICY SCHED_OTHER
|
||||
#define DEFAULT_SCHED_PARAM 0 //default priority
|
||||
@@ -114,28 +115,30 @@ typedef void (*free_routine)(void *arg);
|
||||
* Name: ThreadPoolAttr
|
||||
*
|
||||
* Description:
|
||||
* Attributes for thread pool. Used to set and change parameters of
|
||||
* Attributes for thread pool. Used to set and change parameters of
|
||||
* thread pool
|
||||
*****************************************************************************/
|
||||
typedef struct THREADPOOLATTR
|
||||
{
|
||||
int minThreads; //minThreads, ThreadPool will always maintain at least
|
||||
//this many threads
|
||||
|
||||
int maxThreads; //maxThreads, ThreadPool will never have more than this
|
||||
//number of threads
|
||||
|
||||
int maxIdleTime; //maxIdleTime (in milliseconds)
|
||||
// this is the maximum time a thread will remain idle
|
||||
// before dying
|
||||
int minThreads; // minThreads, ThreadPool will always maintain at least
|
||||
// this many threads
|
||||
|
||||
int jobsPerThread; //jobs per thread to maintain
|
||||
|
||||
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
|
||||
int maxThreads; // maxThreads, ThreadPool will never have more than this
|
||||
// number of threads
|
||||
|
||||
int maxIdleTime; // maxIdleTime (in milliseconds)
|
||||
// this is the maximum time a thread will remain idle
|
||||
// before dying
|
||||
|
||||
int jobsPerThread; // jobs per thread to maintain
|
||||
|
||||
int maxJobsTotal; // maximum number of jobs that can be queued totally.
|
||||
|
||||
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;
|
||||
|
||||
@@ -152,7 +155,7 @@ typedef struct THREADPOOLJOB
|
||||
free_routine free_func; //free function
|
||||
struct timeb requestTime; //time of request
|
||||
int priority; //priority of request
|
||||
int jobId; //id
|
||||
int jobId; //id
|
||||
} ThreadPoolJob;
|
||||
|
||||
/****************************************************************************
|
||||
@@ -168,20 +171,20 @@ typedef struct TPOOLSTATS
|
||||
{
|
||||
double totalTimeHQ; //total time spent by all jobs in high priority Q
|
||||
int totalJobsHQ; //total jobs in HQ run so far
|
||||
double avgWaitHQ; //average wait in HQ
|
||||
double avgWaitHQ; //average wait in HQ
|
||||
double totalTimeMQ; //total time spent by all jobs in med priority Q
|
||||
int totalJobsMQ; //total jobs in MQ run so far
|
||||
double avgWaitMQ; //average wait in MQ
|
||||
double totalTimeLQ; //total time spent by all jobs in low priority Q
|
||||
int totalJobsLQ; //total jobs in LQ run so far
|
||||
double avgWaitLQ; //average wait in LQ
|
||||
double avgWaitLQ; //average wait in LQ
|
||||
double totalWorkTime; //total time spent working for all threads
|
||||
double totalIdleTime; //total time spent idle for all threads
|
||||
int workerThreads; //number of current workerThreads
|
||||
int idleThreads; //number of current idle threads
|
||||
int persistentThreads; //number of persistent threads
|
||||
int totalThreads; //total number of current threads
|
||||
int maxThreads; //max threads so far
|
||||
int maxThreads; //max threads so far
|
||||
int currentJobsHQ; // current jobs in Q
|
||||
int currentJobsLQ; //current jobs in Q
|
||||
int currentJobsMQ; //current jobs in Q
|
||||
@@ -521,6 +524,19 @@ int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime);
|
||||
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
|
||||
*
|
||||
|
@@ -34,9 +34,7 @@
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef STATS
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Function: CmpThreadPoolJob
|
||||
@@ -906,6 +904,7 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default:
|
||||
int rc = EOUTOFMEM;
|
||||
|
||||
int tempId = -1;
|
||||
int totalJobs;
|
||||
|
||||
ThreadPoolJob *temp = NULL;
|
||||
|
||||
@@ -922,6 +921,13 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default:
|
||||
|| ( job->priority == MED_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 )
|
||||
jobId = &tempId;
|
||||
|
||||
@@ -1267,6 +1273,7 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default:
|
||||
attr->minThreads = DEFAULT_MIN_THREADS;
|
||||
attr->schedPolicy = DEFAULT_POLICY;
|
||||
attr->starvationTime = DEFAULT_STARVATION_TIME;
|
||||
attr->maxJobsTotal = DEFAULT_MAX_JOBS_TOTAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1518,6 +1525,29 @@ tp->stats.totalJobsLQ++; tp->stats.totalTimeLQ += diff; break; default:
|
||||
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
|
||||
*
|
||||
|
@@ -132,8 +132,7 @@ upnp_tv_ctrlpt_SOURCES = \
|
||||
sample/tvctrlpt/upnp_tv_ctrlpt.h \
|
||||
sample/tvctrlpt/linux/upnp_tv_ctrlpt_main.c
|
||||
|
||||
if WITH_DOCDIR
|
||||
docdir = @DOCDIR@
|
||||
if WITH_DOCUMENTATION
|
||||
examplesdir = $(docdir)/examples
|
||||
examples_DATA = $(upnp_tv_ctrlpt_SOURCES) $(upnp_tv_device_SOURCES)
|
||||
endif
|
||||
|
@@ -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>
|
||||
#ifdef __FreeBSD__
|
||||
#include <time.h>
|
||||
@@ -57,6 +65,12 @@
|
||||
#else
|
||||
#define EXPORT_SPEC
|
||||
#endif
|
||||
#ifdef UPNP_USE_MSVCPP // define some things the M$ VC++ doesn't knows
|
||||
typedef __int64 int64_t;
|
||||
#endif
|
||||
#ifdef UPNP_USE_BCBPP // define some things Borland Builder doesn't knows
|
||||
typedef __int64 int64_t;
|
||||
#endif
|
||||
#else
|
||||
#define EXPORT_SPEC
|
||||
#endif
|
||||
@@ -65,6 +79,7 @@
|
||||
#define UpnpCloseSocket close
|
||||
#else
|
||||
#define UpnpCloseSocket closesocket
|
||||
#define fseeko fseek
|
||||
#endif
|
||||
#define UPNP_SOCKETERROR -1
|
||||
#define UPNP_INVALID_SOCKET -1
|
||||
@@ -79,6 +94,8 @@
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define NUM_HANDLE 200
|
||||
#define LINE_SIZE 180
|
||||
#define NAME_SIZE 256
|
||||
@@ -875,7 +892,7 @@ struct File_Info
|
||||
/** 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
|
||||
* a read call. */
|
||||
int file_length;
|
||||
off_t file_length;
|
||||
|
||||
/** The time at which the contents of the file was modified;
|
||||
* The time system is always local (not GMT). */
|
||||
@@ -969,7 +986,7 @@ struct UpnpVirtualDirCallbacks
|
||||
int (*seek) (
|
||||
IN UpnpWebFileHandle fileHnd, /** The handle of the file to move the
|
||||
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
|
||||
negative values move backward. Note
|
||||
that this must be positive if the
|
||||
@@ -2707,4 +2724,3 @@ EXPORT_SPEC void UpnpFree(
|
||||
//@} The API
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -1974,9 +1974,7 @@ TvDeviceStart( char *ip_address,
|
||||
ip_address = UpnpGetServerIpAddress( );
|
||||
}
|
||||
|
||||
if( port == 0 ) {
|
||||
port = UpnpGetServerPort( );
|
||||
}
|
||||
|
||||
SampleUtil_Print( "UPnP Initialized\n \t ipaddress= %s port = %d\n",
|
||||
ip_address, port );
|
||||
|
@@ -244,6 +244,7 @@ int UpnpInit( IN const char *HostIP,
|
||||
TPAttrSetMinThreads( &attr, MIN_THREADS );
|
||||
TPAttrSetJobsPerThread( &attr, JOBS_PER_THREAD );
|
||||
TPAttrSetIdleTime( &attr, THREAD_IDLE_TIME );
|
||||
TPAttrSetMaxJobsTotal( &attr, MAX_JOBS_TOTAL );
|
||||
|
||||
if( ThreadPoolInit( &gSendThreadPool, &attr ) != UPNP_E_SUCCESS ) {
|
||||
UpnpSdkInit = 0;
|
||||
@@ -955,7 +956,7 @@ GetDescDocumentAndURL( IN Upnp_DescType descriptionType,
|
||||
char aliasStr[LINE_SIZE];
|
||||
char *temp_str = NULL;
|
||||
FILE *fp = NULL;
|
||||
unsigned fileLen;
|
||||
off_t fileLen;
|
||||
unsigned num_read;
|
||||
time_t last_modified;
|
||||
struct stat file_info;
|
||||
@@ -3339,19 +3340,20 @@ UpnpDownloadXmlDoc( const char *url,
|
||||
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" ) ) ) {
|
||||
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 );
|
||||
DBGONLY( UpnpPrintf( UPNP_CRITICAL, API, __FILE__, __LINE__,
|
||||
"Not text/xml\n" );
|
||||
)
|
||||
return UPNP_E_INVALID_DESC;
|
||||
return UPNP_E_INVALID_DESC;
|
||||
#endif
|
||||
}
|
||||
// end of TODO Do not check this
|
||||
|
||||
ret_code = ixmlParseBufferEx( xml_buf, xmlDoc );
|
||||
free( xml_buf );
|
||||
@@ -3711,8 +3713,6 @@ FreeHandle( int Upnp_Handle )
|
||||
|
||||
} /****************** End of FreeHandle *********************/
|
||||
|
||||
// **DBG****************************************************
|
||||
DBGONLY(
|
||||
|
||||
/**************************************************************************
|
||||
* Function: PrintHandleInfo
|
||||
@@ -3726,56 +3726,61 @@ DBGONLY(
|
||||
* Return Values: int
|
||||
* UPNP_E_SUCCESS if successful else return appropriate error
|
||||
***************************************************************************/
|
||||
int PrintHandleInfo( IN UpnpClient_Handle Hnd ) {
|
||||
struct Handle_Info * HndInfo; if( HandleTable[Hnd] != NULL ) {
|
||||
HndInfo = HandleTable[Hnd];
|
||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"Printing information for Handle_%d\n",
|
||||
Hnd );
|
||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"HType_%d\n", HndInfo->HType );
|
||||
DEVICEONLY(
|
||||
if( HndInfo->HType !=
|
||||
HND_CLIENT ) UpnpPrintf( UPNP_ALL, API, __FILE__,
|
||||
__LINE__, "DescURL_%s\n",
|
||||
HndInfo->DescURL ); )
|
||||
)
|
||||
}
|
||||
else
|
||||
{
|
||||
return UPNP_E_INVALID_HANDLE;}
|
||||
int PrintHandleInfo( IN UpnpClient_Handle Hnd )
|
||||
{
|
||||
struct Handle_Info * HndInfo;
|
||||
if (HandleTable[Hnd] != NULL) {
|
||||
HndInfo = HandleTable[Hnd];
|
||||
DBGONLY(
|
||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"Printing information for Handle_%d\n", Hnd);
|
||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"HType_%d\n", HndInfo->HType);
|
||||
DEVICEONLY(
|
||||
if(HndInfo->HType != HND_CLIENT)
|
||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"DescURL_%s\n", HndInfo->DescURL );
|
||||
)
|
||||
)
|
||||
} else {
|
||||
return UPNP_E_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
return UPNP_E_SUCCESS;
|
||||
}
|
||||
|
||||
return UPNP_E_SUCCESS;}
|
||||
/****************** End of PrintHandleInfo *********************/
|
||||
|
||||
void printNodes( IXML_Node * tmpRoot, int depth ) {
|
||||
int i;
|
||||
IXML_NodeList * NodeList1;
|
||||
IXML_Node * ChildNode1;
|
||||
unsigned short NodeType;
|
||||
DOMString NodeValue;
|
||||
const DOMString NodeName;
|
||||
NodeList1 = ixmlNode_getChildNodes( tmpRoot );
|
||||
for( i = 0; i < 100; i++ ) {
|
||||
ChildNode1 = ixmlNodeList_item( NodeList1, i );
|
||||
if( ChildNode1 == NULL ) {
|
||||
break;}
|
||||
void printNodes( IXML_Node * tmpRoot, int depth )
|
||||
{
|
||||
int i;
|
||||
IXML_NodeList *NodeList1;
|
||||
IXML_Node *ChildNode1;
|
||||
unsigned short NodeType;
|
||||
const DOMString NodeValue;
|
||||
const DOMString NodeName;
|
||||
NodeList1 = ixmlNode_getChildNodes(tmpRoot);
|
||||
for (i = 0; i < 100; ++i) {
|
||||
ChildNode1 = ixmlNodeList_item(NodeList1, i);
|
||||
if (ChildNode1 == NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
printNodes(ChildNode1, depth+1);
|
||||
NodeType = ixmlNode_getNodeType(ChildNode1);
|
||||
NodeValue = ixmlNode_getNodeValue(ChildNode1);
|
||||
NodeName = ixmlNode_getNodeName(ChildNode1);
|
||||
DBGONLY(
|
||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"DEPTH-%2d-IXML_Node Type %d, "
|
||||
"IXML_Node Name: %s, IXML_Node Value: %s\n",
|
||||
depth, NodeType, NodeName, NodeValue);
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
printNodes( ChildNode1, depth + 1 );
|
||||
NodeType = ixmlNode_getNodeType( ChildNode1 );
|
||||
NodeValue = ixmlNode_getNodeValue( ChildNode1 );
|
||||
NodeName = ixmlNode_getNodeName( ChildNode1 );
|
||||
DBGONLY( UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"DEPTH-%2d-IXML_Node Type %d, "
|
||||
"IXML_Node Name: %s, IXML_Node Value: %s\n",
|
||||
depth, NodeType, NodeName, NodeValue ); )
|
||||
}
|
||||
|
||||
}
|
||||
/****************** End of printNodes *********************/
|
||||
|
||||
) // dbgonly
|
||||
|
||||
//********************************************************
|
||||
//* Name: getlocalhostname
|
||||
//* Description: Function to get local IP address
|
||||
|
@@ -196,11 +196,12 @@ addToAction( IN int response,
|
||||
|
||||
if( response ) {
|
||||
sprintf( ActBuff,
|
||||
"<u:%sResponse xmlns:u=\"%s\"></u:%sResponse>",
|
||||
ActionName, ServType, ActionName );
|
||||
"<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>",
|
||||
ActionName, ServType, ActionName );
|
||||
} else {
|
||||
sprintf( ActBuff, "<u:%s xmlns:u=\"%s\"></u:%s>",
|
||||
ActionName, ServType, ActionName );
|
||||
sprintf( ActBuff,
|
||||
"<u:%s xmlns:u=\"%s\">\r\n</u:%s>",
|
||||
ActionName, ServType, ActionName );
|
||||
}
|
||||
|
||||
rc = ixmlParseBufferEx( ActBuff, ActionDoc );
|
||||
@@ -274,11 +275,13 @@ makeAction( IN int response,
|
||||
}
|
||||
|
||||
if( response ) {
|
||||
sprintf( ActBuff, "<u:%sResponse xmlns:u=\"%s\"></u:%sResponse>",
|
||||
ActionName, ServType, ActionName );
|
||||
sprintf( ActBuff,
|
||||
"<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>",
|
||||
ActionName, ServType, ActionName );
|
||||
} else {
|
||||
sprintf( ActBuff, "<u:%s xmlns:u=\"%s\"></u:%s>",
|
||||
ActionName, ServType, ActionName );
|
||||
sprintf( ActBuff,
|
||||
"<u:%s xmlns:u=\"%s\">\r\n</u:%s>",
|
||||
ActionName, ServType, ActionName );
|
||||
}
|
||||
|
||||
if( ixmlParseBufferEx( ActBuff, &ActionDoc ) != IXML_SUCCESS ) {
|
||||
|
@@ -219,10 +219,11 @@ gena_unsubscribe( IN char *url,
|
||||
// make request msg
|
||||
membuffer_init( &request );
|
||||
request.size_inc = 30;
|
||||
return_code = http_MakeMessage( &request, 1, 1,
|
||||
"q" "ssc" "U" "c",
|
||||
HTTPMETHOD_UNSUBSCRIBE, &dest_url,
|
||||
"SID: ", sid );
|
||||
return_code = http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"q" "ssc" "Uc",
|
||||
HTTPMETHOD_UNSUBSCRIBE, &dest_url,
|
||||
"SID: ", sid );
|
||||
|
||||
//Not able to make the message so destroy the existing buffer
|
||||
if( return_code != 0 ) {
|
||||
@@ -305,20 +306,21 @@ gena_subscribe( IN char *url,
|
||||
request.size_inc = 30;
|
||||
if( renewal_sid ) {
|
||||
// renew subscription
|
||||
return_code = http_MakeMessage( &request, 1, 1,
|
||||
"q" "ssc" "ssc" "c",
|
||||
HTTPMETHOD_SUBSCRIBE, &dest_url,
|
||||
"SID: ", renewal_sid,
|
||||
"TIMEOUT: Second-", timeout_str );
|
||||
return_code = http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"q" "ssc" "sscc",
|
||||
HTTPMETHOD_SUBSCRIBE, &dest_url,
|
||||
"SID: ", renewal_sid,
|
||||
"TIMEOUT: Second-", timeout_str );
|
||||
} else {
|
||||
// subscribe
|
||||
return_code = http_MakeMessage( &request, 1, 1,
|
||||
"q" "sssdsscc",
|
||||
HTTPMETHOD_SUBSCRIBE, &dest_url,
|
||||
"CALLBACK: <http://", LOCAL_HOST,
|
||||
":", LOCAL_PORT,
|
||||
"/>\r\n" "NT: upnp:event\r\n"
|
||||
"TIMEOUT: Second-", timeout_str );
|
||||
return_code = http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"q" "sssdsc" "sc" "sscc",
|
||||
HTTPMETHOD_SUBSCRIBE, &dest_url,
|
||||
"CALLBACK: <http://", LOCAL_HOST, ":", LOCAL_PORT, "/>",
|
||||
"NT: upnp:event",
|
||||
"TIMEOUT: Second-", timeout_str );
|
||||
}
|
||||
if( return_code != 0 ) {
|
||||
return return_code;
|
||||
|
@@ -219,9 +219,11 @@ notify_send_and_recv( IN uri_type * destination_url,
|
||||
}
|
||||
// make start line and HOST header
|
||||
membuffer_init( &start_msg );
|
||||
if( http_MakeMessage( &start_msg, 1, 1,
|
||||
"q" "s",
|
||||
HTTPMETHOD_NOTIFY, &url, mid_msg->buf ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
&start_msg, 1, 1,
|
||||
"q" "s",
|
||||
HTTPMETHOD_NOTIFY, &url,
|
||||
mid_msg->buf ) != 0 ) {
|
||||
membuffer_destroy( &start_msg );
|
||||
sock_destroy( &info, SD_BOTH );
|
||||
return UPNP_E_OUTOF_MEMORY;
|
||||
@@ -296,11 +298,12 @@ genaNotify( IN char *headers,
|
||||
|
||||
// make 'end' msg (the part that won't vary with the destination)
|
||||
endmsg.size_inc = 30;
|
||||
if( http_MakeMessage( &mid_msg, 1, 1,
|
||||
"s" "ssc" "sdcc",
|
||||
headers,
|
||||
"SID: ", sub->sid,
|
||||
"SEQ: ", sub->ToSendEventKey ) != 0 ) {
|
||||
if( http_MakeMessage(
|
||||
&mid_msg, 1, 1,
|
||||
"s" "ssc" "sdcc",
|
||||
headers,
|
||||
"SID: ", sub->sid,
|
||||
"SEQ: ", sub->ToSendEventKey ) != 0 ) {
|
||||
membuffer_destroy( &mid_msg );
|
||||
return UPNP_E_OUTOF_MEMORY;
|
||||
}
|
||||
@@ -571,7 +574,7 @@ genaInitNotify( IN UpnpDevice_Handle device_handle,
|
||||
}
|
||||
|
||||
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 );
|
||||
|
||||
//schedule thread for initial notification
|
||||
@@ -1165,10 +1168,14 @@ respond_ok( IN SOCKINFO * info,
|
||||
|
||||
membuffer_init( &response );
|
||||
response.size_inc = 30;
|
||||
if( http_MakeMessage( &response, major, minor,
|
||||
"R" "D" "S" "N" "Xc" "ssc" "sc" "c",
|
||||
HTTP_OK, 0, X_USER_AGENT,
|
||||
"SID: ", sub->sid, timeout_str ) != 0 ) {
|
||||
if( http_MakeMessage(
|
||||
&response, major, minor,
|
||||
"R" "D" "S" "N" "Xc" "ssc" "scc",
|
||||
HTTP_OK,
|
||||
(off_t)0,
|
||||
X_USER_AGENT,
|
||||
"SID: ", sub->sid,
|
||||
timeout_str ) != 0 ) {
|
||||
membuffer_destroy( &response );
|
||||
error_respond( info, HTTP_INTERNAL_SERVER_ERROR, request );
|
||||
return UPNP_E_OUTOF_MEMORY;
|
||||
|
@@ -45,7 +45,7 @@
|
||||
#else
|
||||
#include <winsock2.h>
|
||||
|
||||
#define socklen_t int
|
||||
typedef int socklen_t;
|
||||
#define EAFNOSUPPORT 97
|
||||
#endif
|
||||
#include "unixutil.h"
|
||||
@@ -651,6 +651,11 @@ get_miniserver_sockets( MiniServerSockArray * out,
|
||||
sizeof( struct sockaddr_in )
|
||||
);
|
||||
if( sockError == UPNP_SOCKETERROR ) {
|
||||
#ifdef WIN32
|
||||
errCode = WSAGetLastError();
|
||||
#else
|
||||
errCode = errno;
|
||||
#endif
|
||||
if( errno == EADDRINUSE )
|
||||
errCode = 1;
|
||||
} else
|
||||
|
@@ -39,6 +39,11 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#ifndef UPNP_USE_BCBPP
|
||||
#ifndef UPNP_USE_MSVCPP
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#include <arpa/inet.h>
|
||||
@@ -306,8 +311,8 @@ http_SendMessage( IN SOCKINFO * info,
|
||||
char *filename = NULL;
|
||||
FILE *Fp;
|
||||
int num_read,
|
||||
num_written,
|
||||
amount_to_be_read = 0;
|
||||
num_written;
|
||||
off_t amount_to_be_read = 0;
|
||||
va_list argp;
|
||||
char *file_buf = NULL,
|
||||
*ChunkBuf = NULL;
|
||||
@@ -367,7 +372,7 @@ http_SendMessage( IN SOCKINFO * info,
|
||||
return UPNP_E_FILE_READ_ERROR;
|
||||
}
|
||||
} else if( Instr && Instr->IsRangeActive ) {
|
||||
if( fseek( Fp, Instr->RangeOffset, SEEK_CUR ) != 0 ) {
|
||||
if( fseeko( Fp, Instr->RangeOffset, SEEK_CUR ) != 0 ) {
|
||||
free( ChunkBuf );
|
||||
return UPNP_E_FILE_READ_ERROR;
|
||||
}
|
||||
@@ -637,13 +642,14 @@ http_Download( IN const char *url_str,
|
||||
*temp = '/';
|
||||
DBGONLY( UpnpPrintf
|
||||
( 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",
|
||||
HTTPMETHOD_GET, url.pathquery.buff,
|
||||
url.pathquery.size, "HOST: ", hoststr,
|
||||
hostlen );
|
||||
ret_code = http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"QsbcDCUc",
|
||||
HTTPMETHOD_GET, url.pathquery.buff, url.pathquery.size,
|
||||
"HOST: ", hoststr, hostlen );
|
||||
if( ret_code != 0 ) {
|
||||
DBGONLY( UpnpPrintf
|
||||
( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||
@@ -707,7 +713,7 @@ http_Download( IN const char *url_str,
|
||||
|
||||
// save mem for body only
|
||||
*document = realloc( msg_start, *doc_length + 1 ); //LEAK_FIX_MK
|
||||
//*document = Realloc( msg_start,msg_length, *doc_length + 1 );//LEAK_FIX_MK
|
||||
// *document = Realloc( msg_start,msg_length, *doc_length + 1 );//LEAK_FIX_MK
|
||||
|
||||
// shrink can't fail
|
||||
assert( ( int )msg_length > *doc_length );
|
||||
@@ -796,21 +802,27 @@ MakePostMessage( const char *url_str,
|
||||
)
|
||||
|
||||
if( contentLength >= 0 ) {
|
||||
ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUTNc",
|
||||
HTTPMETHOD_POST, url->pathquery.buff,
|
||||
url->pathquery.size, "HOST: ",
|
||||
hoststr, hostlen, contentType,
|
||||
contentLength );
|
||||
ret_code = http_MakeMessage(
|
||||
request, 1, 1,
|
||||
"QsbcDCUTNc",
|
||||
HTTPMETHOD_POST, url->pathquery.buff, url->pathquery.size,
|
||||
"HOST: ", hoststr, hostlen,
|
||||
contentType,
|
||||
(off_t)contentLength );
|
||||
} else if( contentLength == UPNP_USING_CHUNKED ) {
|
||||
ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUTKc",
|
||||
HTTPMETHOD_POST, url->pathquery.buff,
|
||||
url->pathquery.size, "HOST: ",
|
||||
hoststr, hostlen, contentType );
|
||||
ret_code = http_MakeMessage(
|
||||
request, 1, 1,
|
||||
"QsbcDCUTKc",
|
||||
HTTPMETHOD_POST, url->pathquery.buff, url->pathquery.size,
|
||||
"HOST: ", hoststr, hostlen,
|
||||
contentType );
|
||||
} else if( contentLength == UPNP_UNTIL_CLOSE ) {
|
||||
ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUTc",
|
||||
HTTPMETHOD_POST, url->pathquery.buff,
|
||||
url->pathquery.size, "HOST: ",
|
||||
hoststr, hostlen, contentType );
|
||||
ret_code = http_MakeMessage(
|
||||
request, 1, 1,
|
||||
"QsbcDCUTc",
|
||||
HTTPMETHOD_POST, url->pathquery.buff, url->pathquery.size,
|
||||
"HOST: ", hoststr, hostlen,
|
||||
contentType );
|
||||
} else {
|
||||
ret_code = UPNP_E_INVALID_PARAM;
|
||||
}
|
||||
@@ -1131,9 +1143,11 @@ MakeGetMessage( const char *url_str,
|
||||
querylen = url->pathquery.size;
|
||||
}
|
||||
|
||||
ret_code = http_MakeMessage( request, 1, 1, "QsbcDCUc",
|
||||
HTTPMETHOD_GET, querystr, querylen,
|
||||
"HOST: ", hoststr, hostlen );
|
||||
ret_code = http_MakeMessage(
|
||||
request, 1, 1,
|
||||
"QsbcDCUc",
|
||||
HTTPMETHOD_GET, querystr, querylen,
|
||||
"HOST: ", hoststr, hostlen );
|
||||
|
||||
if( ret_code != 0 ) {
|
||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||
@@ -1729,8 +1743,11 @@ http_SendStatusResponse( IN SOCKINFO * info,
|
||||
membuffer_init( &membuf );
|
||||
membuf.size_inc = 70;
|
||||
|
||||
ret = http_MakeMessage( &membuf, response_major, response_minor, "RSCB", http_status_code, // response start line
|
||||
http_status_code ); // body
|
||||
ret = http_MakeMessage(
|
||||
&membuf, response_major, response_minor,
|
||||
"RSCB",
|
||||
http_status_code, // response start line
|
||||
http_status_code ); // body
|
||||
if( ret == 0 ) {
|
||||
timeout = HTTP_DEFAULT_TIMEOUT;
|
||||
ret = http_SendMessage( info, &timeout, "b",
|
||||
@@ -1757,28 +1774,30 @@ http_SendStatusResponse( IN SOCKINFO * info,
|
||||
* specified in the input parameters.
|
||||
*
|
||||
* 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
|
||||
* 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
|
||||
* 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
|
||||
* 'q': arg1 = http_method_t, arg2 = (uri_type *) // request start line and HOST header
|
||||
* 'Q': arg1 = http_method_t; arg2 = char* url;
|
||||
* arg3 = int url_length // start line of request
|
||||
* 'R': arg = int status_code // adds a response start line
|
||||
* 'B': arg = int status_code
|
||||
* appends content-length, content-type and HTML body for given code
|
||||
* 'S': (no args) appends HTTP SERVER: header
|
||||
* 's': arg = const char* C_string
|
||||
* 'T': arg = char * content_type; format e.g: "text/html";
|
||||
* content-type header
|
||||
* --- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld@users.sourceforge.net>
|
||||
* 'X': arg = const char useragent; "redsonic" HTTP X-User-Agent: useragent
|
||||
* --- PATCH END ---
|
||||
* 't': arg = time_t * gmt_time // appends time in RFC 1123 fmt
|
||||
* 'U': (no args) appends HTTP USER-AGENT: header
|
||||
* 'X': arg = const char useragent; "redsonic" HTTP X-User-Agent: useragent
|
||||
*
|
||||
* Return : int;
|
||||
* 0 - On Success
|
||||
@@ -1797,6 +1816,7 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
char c;
|
||||
char *s = NULL;
|
||||
int num;
|
||||
off_t bignum;
|
||||
size_t length;
|
||||
time_t *loc_time;
|
||||
time_t curr_time;
|
||||
@@ -1884,6 +1904,16 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
}
|
||||
}
|
||||
|
||||
else if( c == 'h' ) // off_t
|
||||
{
|
||||
bignum = ( off_t )va_arg( argp, off_t );
|
||||
|
||||
sprintf( tempbuf, "%lld", (int64_t)bignum );
|
||||
if( membuffer_append( buf, tempbuf, strlen( tempbuf ) ) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
|
||||
else if( c == 't' || c == 'D' ) // date
|
||||
{
|
||||
if( c == 'D' ) {
|
||||
@@ -1925,12 +1955,13 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
|
||||
else if( c == 'N' ) {
|
||||
// content-length header
|
||||
num = ( int )va_arg( argp, int );
|
||||
bignum = ( off_t )va_arg( argp, off_t );
|
||||
|
||||
assert( num >= 0 );
|
||||
if( http_MakeMessage
|
||||
( buf, http_major_version, http_minor_version, "sdc",
|
||||
"CONTENT-LENGTH: ", num ) != 0 ) {
|
||||
assert( bignum >= 0 );
|
||||
if (http_MakeMessage(
|
||||
buf, http_major_version, http_minor_version,
|
||||
"shc",
|
||||
"CONTENT-LENGTH: ", bignum ) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
@@ -1940,14 +1971,14 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
|
||||
temp_str = ( c == 'S' ) ? "SERVER: " : "USER-AGENT: ";
|
||||
get_sdk_info( tempbuf );
|
||||
if( http_MakeMessage
|
||||
( buf, http_major_version, http_minor_version, "ss",
|
||||
temp_str, tempbuf ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
buf, http_major_version, http_minor_version,
|
||||
"ss",
|
||||
temp_str, tempbuf ) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
|
||||
/* --- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld@users.sourceforge.net> */
|
||||
else if( c == 'X' ) // C string
|
||||
{
|
||||
s = ( char * )va_arg( argp, char * );
|
||||
@@ -1962,9 +1993,6 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
}
|
||||
}
|
||||
|
||||
/* --- PATCH END --- */
|
||||
|
||||
|
||||
else if( c == 'R' ) {
|
||||
// response start line
|
||||
// e.g.: 'HTTP/1.1 200 OK'
|
||||
@@ -1979,9 +2007,11 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
|
||||
// str
|
||||
status_msg = http_get_code_text( status_code );
|
||||
if( http_MakeMessage
|
||||
( buf, http_major_version, http_minor_version, "ssc",
|
||||
tempbuf, status_msg ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
buf, http_major_version, http_minor_version,
|
||||
"ssc",
|
||||
tempbuf,
|
||||
status_msg ) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
@@ -1996,11 +2026,14 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
"<html><body><h1>",
|
||||
status_code, http_get_code_text( status_code ),
|
||||
"</h1></body></html>" );
|
||||
num = strlen( tempbuf );
|
||||
bignum = strlen( tempbuf );
|
||||
|
||||
if( http_MakeMessage( buf, http_major_version, http_minor_version, "NTcs", num, // content-length
|
||||
"text/html", // content-type
|
||||
tempbuf ) != 0 ) // body
|
||||
if (http_MakeMessage(
|
||||
buf, http_major_version, http_minor_version,
|
||||
"NTcs",
|
||||
bignum, // content-length
|
||||
"text/html", // content-type
|
||||
tempbuf ) != 0 ) // body
|
||||
{
|
||||
goto error_handler;
|
||||
}
|
||||
@@ -2009,17 +2042,18 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
else if( c == 'Q' ) {
|
||||
// request start line
|
||||
// GET /foo/bar.html HTTP/1.1\r\n
|
||||
//
|
||||
|
||||
method = ( http_method_t ) va_arg( argp, http_method_t );
|
||||
method_str = method_to_str( method );
|
||||
url_str = ( const char * )va_arg( argp, const char * );
|
||||
num = ( int )va_arg( argp, int ); // length of url_str
|
||||
|
||||
if( http_MakeMessage( buf, http_major_version, http_minor_version, "ssbsdsdc", method_str, // method
|
||||
" ", url_str, num, // url
|
||||
" HTTP/", http_major_version, ".",
|
||||
http_minor_version ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
buf, http_major_version, http_minor_version,
|
||||
"ssbsdsdc",
|
||||
method_str, // method
|
||||
" ", url_str, num, // url
|
||||
" HTTP/", http_major_version, ".", http_minor_version ) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
@@ -2036,10 +2070,11 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
goto error_handler;
|
||||
}
|
||||
|
||||
if( http_MakeMessage
|
||||
( buf, http_major_version, http_minor_version, "Q" "sbc",
|
||||
method, url.pathquery.buff, url.pathquery.size, "HOST: ",
|
||||
url.hostport.text.buff, url.hostport.text.size ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
buf, http_major_version, http_minor_version,
|
||||
"Q" "sbc",
|
||||
method, url.pathquery.buff, url.pathquery.size,
|
||||
"HOST: ", url.hostport.text.buff, url.hostport.text.size ) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
@@ -2048,9 +2083,10 @@ http_MakeMessage( INOUT membuffer * buf,
|
||||
// content type header
|
||||
temp_str = ( const char * )va_arg( argp, const char * ); // type/subtype format
|
||||
|
||||
if( http_MakeMessage
|
||||
( buf, http_major_version, http_minor_version, "ssc",
|
||||
"CONTENT-TYPE: ", temp_str ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
buf, http_major_version, http_minor_version,
|
||||
"ssc",
|
||||
"CONTENT-TYPE: ", temp_str ) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
@@ -2174,16 +2210,13 @@ MakeGetMessageEx( const char *url_str,
|
||||
hostlen );
|
||||
)
|
||||
|
||||
errCode = http_MakeMessage( request,
|
||||
1,
|
||||
1,
|
||||
"QsbcGDCUc",
|
||||
HTTPMETHOD_GET,
|
||||
url->pathquery.buff,
|
||||
url->pathquery.size,
|
||||
"HOST: ",
|
||||
hoststr,
|
||||
hostlen, pRangeSpecifier );
|
||||
errCode = http_MakeMessage(
|
||||
request, 1, 1,
|
||||
"QsbcGDCUc",
|
||||
HTTPMETHOD_GET,
|
||||
url->pathquery.buff, url->pathquery.size,
|
||||
"HOST: ", hoststr, hostlen,
|
||||
pRangeSpecifier );
|
||||
|
||||
if( errCode != 0 ) {
|
||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||
|
@@ -37,6 +37,11 @@
|
||||
#include "config.h"
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#ifndef UPNP_USE_BCBPP
|
||||
#ifndef UPNP_USE_MSVCPP
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#endif
|
||||
#include "util.h"
|
||||
#include "strintmap.h"
|
||||
#include "membuffer.h"
|
||||
@@ -632,8 +637,8 @@ get_file_info( IN const char *filename,
|
||||
rc = get_content_type( filename, &info->content_type );
|
||||
|
||||
DBGONLY( UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
|
||||
"file info: %s, length: %d, last_mod=%s readable=%d\n",
|
||||
filename, info->file_length,
|
||||
"file info: %s, length: %lld, last_mod=%s readable=%d\n",
|
||||
filename, (long long)info->file_length,
|
||||
asctime( gmtime( &info->last_modified ) ),
|
||||
info->is_readable ); )
|
||||
|
||||
@@ -871,8 +876,8 @@ StrTok( char **Src,
|
||||
************************************************************************/
|
||||
int
|
||||
GetNextRange( char **SrcRangeStr,
|
||||
int *FirstByte,
|
||||
int *LastByte )
|
||||
off_t *FirstByte,
|
||||
off_t *LastByte )
|
||||
{
|
||||
char *Ptr,
|
||||
*Tok;
|
||||
@@ -936,11 +941,11 @@ GetNextRange( char **SrcRangeStr,
|
||||
************************************************************************/
|
||||
int
|
||||
CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier,
|
||||
long FileLength,
|
||||
off_t FileLength,
|
||||
OUT struct SendInstruction *Instr )
|
||||
{
|
||||
|
||||
int FirstByte,
|
||||
off_t FirstByte,
|
||||
LastByte;
|
||||
char *RangeInput,
|
||||
*Ptr;
|
||||
@@ -984,28 +989,36 @@ CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier,
|
||||
|
||||
Instr->RangeOffset = FirstByte;
|
||||
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",
|
||||
(int64_t)FirstByte,
|
||||
(int64_t)LastByte,
|
||||
(int64_t)FileLength ); //Data between two range.
|
||||
} else if( FirstByte >= 0 && LastByte == -1
|
||||
&& FirstByte < FileLength ) {
|
||||
Instr->RangeOffset = FirstByte;
|
||||
Instr->ReadSendSize = FileLength - FirstByte;
|
||||
sprintf( Instr->RangeHeader,
|
||||
"CONTENT-RANGE: bytes %d-%ld/%ld\r\n", FirstByte,
|
||||
FileLength - 1, FileLength );
|
||||
"CONTENT-RANGE: bytes %lld-%lld/%lld\r\n",
|
||||
(int64_t)FirstByte,
|
||||
(int64_t)(FileLength - 1),
|
||||
(int64_t)FileLength );
|
||||
} else if( FirstByte == -1 && LastByte > 0 ) {
|
||||
if( LastByte >= FileLength ) {
|
||||
Instr->RangeOffset = 0;
|
||||
Instr->ReadSendSize = FileLength;
|
||||
sprintf( Instr->RangeHeader,
|
||||
"CONTENT-RANGE: bytes 0-%ld/%ld\r\n",
|
||||
FileLength - 1, FileLength );
|
||||
"CONTENT-RANGE: bytes 0-%lld/%lld\r\n",
|
||||
(int64_t)(FileLength - 1),
|
||||
(int64_t)FileLength );
|
||||
} else {
|
||||
Instr->RangeOffset = FileLength - LastByte;
|
||||
Instr->ReadSendSize = LastByte;
|
||||
sprintf( Instr->RangeHeader,
|
||||
"CONTENT-RANGE: bytes %ld-%ld/%ld\r\n",
|
||||
FileLength - LastByte + 1, FileLength,
|
||||
FileLength );
|
||||
"CONTENT-RANGE: bytes %lld-%lld/%lld\r\n",
|
||||
(int64_t)(FileLength - LastByte + 1),
|
||||
(int64_t)FileLength,
|
||||
(int64_t)FileLength );
|
||||
}
|
||||
} else {
|
||||
free( RangeInput );
|
||||
@@ -1042,7 +1055,7 @@ CreateHTTPRangeResponseHeader( char *ByteRangeSpecifier,
|
||||
int
|
||||
CheckOtherHTTPHeaders( IN http_message_t * Req,
|
||||
OUT struct SendInstruction *RespInstr,
|
||||
int FileSize )
|
||||
off_t FileSize )
|
||||
{
|
||||
http_header_t *header;
|
||||
ListNode *node;
|
||||
@@ -1184,7 +1197,6 @@ process_request( IN http_message_t * req,
|
||||
int code;
|
||||
int err_code;
|
||||
|
||||
//membuffer content_type;
|
||||
char *request_doc;
|
||||
struct File_Info finfo;
|
||||
xboolean using_alias;
|
||||
@@ -1208,7 +1220,6 @@ process_request( IN http_message_t * req,
|
||||
// init
|
||||
request_doc = NULL;
|
||||
finfo.content_type = NULL;
|
||||
//membuffer_init( &content_type );
|
||||
alias_grabbed = FALSE;
|
||||
err_code = HTTP_INTERNAL_SERVER_ERROR; // default error
|
||||
using_virtual_dir = FALSE;
|
||||
@@ -1362,7 +1373,7 @@ process_request( IN http_message_t * req,
|
||||
|
||||
RespInstr->ReadSendSize = finfo.file_length;
|
||||
|
||||
//Check other header field.
|
||||
// Check other header field.
|
||||
if( ( err_code =
|
||||
CheckOtherHTTPHeaders( req, RespInstr,
|
||||
finfo.file_length ) ) != HTTP_OK ) {
|
||||
@@ -1376,85 +1387,80 @@ process_request( IN http_message_t * req,
|
||||
}
|
||||
|
||||
if( RespInstr->IsRangeActive && RespInstr->IsChunkActive ) {
|
||||
|
||||
/* - PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net>
|
||||
* added X-User-Agent header
|
||||
*/
|
||||
|
||||
//Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
//Transfer-Encoding: chunked
|
||||
// K means add chunky header ang G means range header.
|
||||
if( http_MakeMessage( headers, resp_major, resp_minor, "RTGKDstcSXcCc", HTTP_PARTIAL_CONTENT, // status code
|
||||
// RespInstr->ReadSendSize,// content length
|
||||
finfo.content_type,
|
||||
// content_type.buf, // content type
|
||||
RespInstr, // Range
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
// Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
// Transfer-Encoding: chunked
|
||||
if (http_MakeMessage(
|
||||
headers, resp_major, resp_minor,
|
||||
"R" "T" "GKD" "s" "tcS" "XcCc",
|
||||
HTTP_PARTIAL_CONTENT, // status code
|
||||
finfo.content_type, // content type
|
||||
RespInstr, // range info
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
} else if( RespInstr->IsRangeActive && !RespInstr->IsChunkActive ) {
|
||||
|
||||
//Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
//Transfer-Encoding: chunked
|
||||
// K means add chunky header ang G means range header.
|
||||
if( http_MakeMessage( headers, resp_major, resp_minor, "RNTGDstcSXcCc", HTTP_PARTIAL_CONTENT, // status code
|
||||
RespInstr->ReadSendSize, // content length
|
||||
finfo.content_type,
|
||||
//content_type.buf, // content type
|
||||
RespInstr, //Range Info
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
// Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
// Transfer-Encoding: chunked
|
||||
if (http_MakeMessage(
|
||||
headers, resp_major, resp_minor,
|
||||
"R" "N" "T" "GD" "s" "tcS" "XcCc",
|
||||
HTTP_PARTIAL_CONTENT, // status code
|
||||
RespInstr->ReadSendSize, // content length
|
||||
finfo.content_type, // content type
|
||||
RespInstr, // range info
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
|
||||
} else if( !RespInstr->IsRangeActive && RespInstr->IsChunkActive ) {
|
||||
|
||||
//Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
//Transfer-Encoding: chunked
|
||||
// K means add chunky header ang G means range header.
|
||||
if( http_MakeMessage( headers, resp_major, resp_minor, "RKTDstcSXcCc", HTTP_OK, // status code
|
||||
//RespInstr->ReadSendSize,// content length
|
||||
finfo.content_type,
|
||||
// content_type.buf, // content type
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
// Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
// Transfer-Encoding: chunked
|
||||
if (http_MakeMessage(
|
||||
headers, resp_major, resp_minor,
|
||||
"RK" "TD" "s" "tcS" "XcCc",
|
||||
HTTP_OK, // status code
|
||||
finfo.content_type, // content type
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
|
||||
} else {
|
||||
if( RespInstr->ReadSendSize >= 0 ) {
|
||||
//Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
//Transfer-Encoding: chunked
|
||||
// K means add chunky header ang G means range header.
|
||||
if( http_MakeMessage( headers, resp_major, resp_minor, "RNTDstcSXcCc", HTTP_OK, // status code
|
||||
RespInstr->ReadSendSize, // content length
|
||||
finfo.content_type,
|
||||
//content_type.buf, // content type
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
} else { // !RespInstr->IsRangeActive && !RespInstr->IsChunkActive
|
||||
if (RespInstr->ReadSendSize >= 0) {
|
||||
// Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
// Transfer-Encoding: chunked
|
||||
if (http_MakeMessage(
|
||||
headers, resp_major, resp_minor,
|
||||
"R" "N" "TD" "s" "tcS" "XcCc",
|
||||
HTTP_OK, // status code
|
||||
RespInstr->ReadSendSize, // content length
|
||||
finfo.content_type, // content type
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
} else {
|
||||
//Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
//Transfer-Encoding: chunked
|
||||
// K means add chunky header ang G means range header.
|
||||
if( http_MakeMessage( headers, resp_major, resp_minor, "RTDstcSXcCc", HTTP_OK, // status code
|
||||
//RespInstr->ReadSendSize,// content length
|
||||
finfo.content_type,
|
||||
//content_type.buf, // content type
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
// Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT
|
||||
// Transfer-Encoding: chunked
|
||||
if (http_MakeMessage(
|
||||
headers, resp_major, resp_minor,
|
||||
"R" "TD" "s" "tcS" "XcCc",
|
||||
HTTP_OK, // status code
|
||||
finfo.content_type, // content type
|
||||
"LAST-MODIFIED: ",
|
||||
&finfo.last_modified,
|
||||
X_USER_AGENT) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* -- PATCH END -- */
|
||||
|
||||
if( req->method == HTTPMETHOD_HEAD ) {
|
||||
*rtype = RESP_HEADERS;
|
||||
@@ -1468,8 +1474,8 @@ process_request( IN http_message_t * req,
|
||||
*rtype = RESP_FILEDOC;
|
||||
}
|
||||
|
||||
//simple get http 0.9 as specified in http 1.0
|
||||
//don't send headers
|
||||
// simple get http 0.9 as specified in http 1.0
|
||||
// don't send headers
|
||||
if( req->method == HTTPMETHOD_SIMPLEGET ) {
|
||||
membuffer_destroy( headers );
|
||||
}
|
||||
@@ -1479,7 +1485,6 @@ process_request( IN http_message_t * req,
|
||||
error_handler:
|
||||
free( request_doc );
|
||||
ixmlFreeDOMString( finfo.content_type );
|
||||
// membuffer_destroy( &content_type );
|
||||
if( err_code != UPNP_E_SUCCESS && alias_grabbed ) {
|
||||
alias_release( alias );
|
||||
}
|
||||
@@ -1738,12 +1743,12 @@ web_server_callback( IN http_parser_t * parser,
|
||||
&RespInstr );
|
||||
//Send response.
|
||||
|
||||
/* - PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net>
|
||||
* added X-User-Agent header
|
||||
*/
|
||||
http_MakeMessage( &headers, 1, 1, "RTDSXcCc", ret,
|
||||
"text/html", X_USER_AGENT );
|
||||
/* - PATCH END --- */
|
||||
http_MakeMessage(
|
||||
&headers, 1, 1,
|
||||
"RTDSXcCc",
|
||||
ret,
|
||||
"text/html",
|
||||
X_USER_AGENT );
|
||||
|
||||
http_SendMessage( info, &timeout, "b", headers.buf,
|
||||
headers.length );
|
||||
|
@@ -125,7 +125,7 @@ is_unreserved( char in )
|
||||
* Note :
|
||||
************************************************************************/
|
||||
int
|
||||
is_escaped( char *in )
|
||||
is_escaped( const char *in )
|
||||
{
|
||||
|
||||
if( ( in[0] == '%' ) && ( isxdigit( in[1] ) ) && isxdigit( in[2] ) ) {
|
||||
@@ -204,7 +204,7 @@ replace_escaped( char *in,
|
||||
* Note :
|
||||
************************************************************************/
|
||||
int
|
||||
parse_uric( char *in,
|
||||
parse_uric( const char *in,
|
||||
int max,
|
||||
token * out )
|
||||
{
|
||||
@@ -496,12 +496,12 @@ token_cmp( token * in1,
|
||||
************************************************************************/
|
||||
int
|
||||
parse_port( int max,
|
||||
char *port,
|
||||
const char *port,
|
||||
unsigned short *out )
|
||||
{
|
||||
|
||||
char *finger = port;
|
||||
char *max_ptr = finger + max;
|
||||
const char *finger = port;
|
||||
const char *max_ptr = finger + max;
|
||||
unsigned short temp = 0;
|
||||
|
||||
while( ( finger < max_ptr ) && ( isdigit( *finger ) ) ) {
|
||||
@@ -533,7 +533,7 @@ parse_port( int max,
|
||||
* Note :
|
||||
************************************************************************/
|
||||
int
|
||||
parse_hostport( char *in,
|
||||
parse_hostport( const char *in,
|
||||
int max,
|
||||
hostport_type * out )
|
||||
{
|
||||
@@ -681,7 +681,7 @@ parse_hostport( char *in,
|
||||
* Note :
|
||||
************************************************************************/
|
||||
int
|
||||
parse_scheme( char *in,
|
||||
parse_scheme( const char *in,
|
||||
int max,
|
||||
token * out )
|
||||
{
|
||||
@@ -994,7 +994,7 @@ resolve_rel_url( char *base_url,
|
||||
* Note :
|
||||
************************************************************************/
|
||||
int
|
||||
parse_uri( char *in,
|
||||
parse_uri( const char *in,
|
||||
int max,
|
||||
uri_type * out )
|
||||
{
|
||||
@@ -1074,8 +1074,8 @@ parse_uri_and_unescape( char *in,
|
||||
if( ( ret = parse_uri( in, max, out ) ) != HTTP_SUCCESS )
|
||||
return ret;
|
||||
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 )
|
||||
remove_escaped_chars( out->fragment.buff, &out->fragment.size );
|
||||
remove_escaped_chars( (char *)out->fragment.buff, &out->fragment.size );
|
||||
return HTTP_SUCCESS;
|
||||
}
|
||||
|
@@ -398,7 +398,7 @@ FindServiceEventURLPath( service_table * table,
|
||||
************************************************************************/
|
||||
service_info *
|
||||
FindServiceControlURLPath( service_table * table,
|
||||
char *controlURLPath )
|
||||
const char *controlURLPath )
|
||||
{
|
||||
service_info *finger = NULL;
|
||||
uri_type parsed_url;
|
||||
@@ -664,7 +664,7 @@ DOMString
|
||||
getElementValue( IXML_Node * node )
|
||||
{
|
||||
IXML_Node *child = ( IXML_Node * ) ixmlNode_getFirstChild( node );
|
||||
DOMString temp = NULL;
|
||||
const DOMString temp = NULL;
|
||||
|
||||
if( ( child != 0 ) && ( ixmlNode_getNodeType( child ) == eTEXT_NODE ) ) {
|
||||
temp = ixmlNode_getNodeValue( child );
|
||||
|
@@ -331,9 +331,10 @@ membuffer_assign( INOUT membuffer * m,
|
||||
return return_code;
|
||||
}
|
||||
// copy
|
||||
memcpy( m->buf, buf, buf_len );
|
||||
m->buf[buf_len] = 0; // null-terminate
|
||||
|
||||
if( buf_len ) {
|
||||
memcpy( m->buf, buf, buf_len );
|
||||
m->buf[buf_len] = 0; // null-terminate
|
||||
}
|
||||
m->length = buf_len;
|
||||
|
||||
return 0;
|
||||
|
@@ -95,6 +95,17 @@
|
||||
#define MAX_THREADS 12
|
||||
//@}
|
||||
|
||||
/** @name MAX_JOBS_TOTAL
|
||||
* The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs
|
||||
* that can be queued. If this limit is reached further jobs will be thrown
|
||||
* to avoid memory exhaustion. The default value 100.
|
||||
* (Added by Axis.)
|
||||
*/
|
||||
|
||||
//@{
|
||||
#define MAX_JOBS_TOTAL 100
|
||||
//@}
|
||||
|
||||
/** @name DEFAULT_SOAP_CONTENT_LENGTH
|
||||
* SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.
|
||||
* This prevents devices that have a misbehaving web server to send
|
||||
|
@@ -475,6 +475,7 @@ int http_SendStatusResponse( IN SOCKINFO *info, IN int http_status_code,
|
||||
* memory ptr
|
||||
* 'c': (no args) appends CRLF "\r\n"
|
||||
* '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
|
||||
* 'D': (no args) appends HTTP DATE: header
|
||||
* 'S': (no args) appends HTTP SERVER: header
|
||||
|
@@ -7,7 +7,7 @@
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#define socklen_t int
|
||||
typedef int socklen_t;
|
||||
#define EAFNOSUPPORT 97
|
||||
|
||||
/*
|
||||
|
@@ -246,7 +246,7 @@ service_info * FindServiceEventURLPath( service_table *table,
|
||||
* Note :
|
||||
************************************************************************/
|
||||
service_info * FindServiceControlURLPath( service_table *table,
|
||||
char * controlURLPath);
|
||||
const char * controlURLPath);
|
||||
|
||||
/************************************************************************
|
||||
* Function : printService
|
||||
|
@@ -80,7 +80,7 @@ typedef enum SsdpCmdType{SSDP_ERROR=-1,
|
||||
#define SSDP_IP "239.255.255.250"
|
||||
#define SSDP_PORT 1900
|
||||
#define NUM_TRY 3
|
||||
#define NUM_COPY 2
|
||||
#define NUM_COPY 1
|
||||
#define THREAD_LIMIT 50
|
||||
#define COMMAND_LEN 300
|
||||
|
||||
|
@@ -40,7 +40,7 @@
|
||||
#else
|
||||
#define XINLINE
|
||||
|
||||
#define socklen_t int
|
||||
typedef int socklen_t;
|
||||
#define EAFNOSUPPORT 97
|
||||
#endif
|
||||
|
||||
|
@@ -86,7 +86,7 @@ enum uriType { absolute, relative };
|
||||
/* Buffer used in parsinghttp messages, urls, etc. generally this simply
|
||||
* holds a pointer into a larger array */
|
||||
typedef struct TOKEN {
|
||||
char * buff;
|
||||
const char *buff;
|
||||
int size;
|
||||
} token;
|
||||
|
||||
@@ -276,7 +276,7 @@ int token_cmp( token *in1, token *in2);
|
||||
*
|
||||
* 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
|
||||
@@ -296,7 +296,7 @@ int parse_port(int max, char * port, unsigned short int * out);
|
||||
*
|
||||
* 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
|
||||
@@ -391,7 +391,7 @@ char * resolve_rel_url( char * base_url, char * rel_url);
|
||||
*
|
||||
* 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
|
||||
|
@@ -48,8 +48,8 @@ struct SendInstruction
|
||||
int IsRangeActive;
|
||||
int IsTrailers;
|
||||
char RangeHeader[200];
|
||||
long RangeOffset;
|
||||
long ReadSendSize; // Read from local source and send on the network.
|
||||
off_t RangeOffset;
|
||||
off_t ReadSendSize; // Read from local source and send on the network.
|
||||
long RecvWriteSize; // Recv from the network and write into local file.
|
||||
|
||||
//Later few more member could be added depending on the requirement.
|
||||
|
@@ -28,7 +28,7 @@
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#define socklen_t int
|
||||
typedef int socklen_t;
|
||||
#define EAFNOSUPPORT 97
|
||||
/*
|
||||
* 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
|
||||
****************************************************************************/
|
||||
static DOMString
|
||||
static const DOMString
|
||||
get_node_value( IN IXML_Node * node )
|
||||
{
|
||||
IXML_Node *text_node = NULL;
|
||||
DOMString text_value = NULL;
|
||||
const DOMString text_value = NULL;
|
||||
|
||||
text_node = ixmlNode_getFirstChild( node );
|
||||
if( text_node == NULL ) {
|
||||
@@ -246,18 +246,19 @@ get_node_value( IN IXML_Node * node )
|
||||
****************************************************************************/
|
||||
static XINLINE int
|
||||
get_host_and_path( IN char *ctrl_url,
|
||||
OUT memptr * host,
|
||||
OUT memptr * path,
|
||||
OUT const memptr *host,
|
||||
OUT const memptr *path,
|
||||
OUT uri_type * url )
|
||||
{
|
||||
if( parse_uri( ctrl_url, strlen( ctrl_url ), url ) != HTTP_SUCCESS ) {
|
||||
return -1;
|
||||
}
|
||||
host->buf = url->hostport.text.buff;
|
||||
host->length = url->hostport.text.size;
|
||||
// This is done to ensure that the buffer is kept const
|
||||
((memptr *)host)->buf = (char *)url->hostport.text.buff;
|
||||
((memptr *)host)->length = url->hostport.text.size;
|
||||
|
||||
path->buf = url->pathquery.buff;
|
||||
path->length = url->pathquery.size;
|
||||
((memptr *)path)->buf = (char *)url->pathquery.buff;
|
||||
((memptr *)path)->length = url->pathquery.size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -414,12 +415,12 @@ get_response_value( IN http_message_t * hmsg,
|
||||
IXML_Node *error_node = NULL;
|
||||
IXML_Document *doc = NULL;
|
||||
char *node_str = NULL;
|
||||
char *temp_str = NULL;
|
||||
const char *temp_str = NULL;
|
||||
DOMString error_node_str = NULL;
|
||||
int err_code;
|
||||
xboolean done = FALSE;
|
||||
char *names[5];
|
||||
DOMString nodeValue;
|
||||
const DOMString nodeValue;
|
||||
|
||||
err_code = UPNP_E_BAD_RESPONSE; // default error
|
||||
|
||||
@@ -601,12 +602,15 @@ SoapSendAction( IN char *action_url,
|
||||
char *upnp_error_str;
|
||||
xboolean got_response = FALSE;
|
||||
|
||||
off_t content_length;
|
||||
char *xml_start =
|
||||
// "<?xml version=\"1.0\"?>\n" required??
|
||||
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n"
|
||||
"<s:Envelope "
|
||||
"xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n"
|
||||
"<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_end_len;
|
||||
int action_str_len;
|
||||
@@ -644,18 +648,23 @@ SoapSendAction( IN char *action_url,
|
||||
url.hostport.text.size,
|
||||
url.hostport.text.buff ); )
|
||||
|
||||
xml_start_len = strlen( xml_start );
|
||||
xml_start_len = strlen( xml_start );
|
||||
xml_end_len = strlen( xml_end );
|
||||
action_str_len = strlen( action_str );
|
||||
|
||||
// make request msg
|
||||
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
|
||||
ContentTypeHeader,
|
||||
"SOAPACTION: \"", service_type, "#", name.buf,
|
||||
name.length, "\"\r\n", xml_start, xml_start_len,
|
||||
action_str, action_str_len, xml_end,
|
||||
xml_end_len ) != 0 ) {
|
||||
content_length = xml_start_len + action_str_len + xml_end_len;
|
||||
if (http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"q" "N" "s" "sssbsc" "Uc" "b" "b" "b",
|
||||
SOAPMETHOD_POST, &url,
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -736,20 +745,26 @@ SoapSendActionEx( IN char *action_url,
|
||||
xboolean got_response = FALSE;
|
||||
|
||||
char *xml_start =
|
||||
// "<?xml version=\"1.0\"?>\n" required??
|
||||
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n";
|
||||
char *xml_body_start = "<s:Body>";
|
||||
char *xml_end = "</s:Body>\n" "</s:Envelope>\n";
|
||||
"<s:Envelope "
|
||||
"xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n";
|
||||
char *xml_header_start =
|
||||
"<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_end_len;
|
||||
char *xml_header_start = "<s:Header>\n";
|
||||
char *xml_header_end = "</s:Header>\n";
|
||||
int xml_header_start_len;
|
||||
int xml_header_end_len;
|
||||
int xml_header_str_len;
|
||||
int action_str_len;
|
||||
int xml_header_end_len;
|
||||
int xml_body_start_len;
|
||||
int action_str_len;
|
||||
int xml_end_len;
|
||||
off_t content_length;
|
||||
|
||||
*response_node = NULL; // init
|
||||
|
||||
@@ -789,7 +804,7 @@ SoapSendActionEx( IN char *action_url,
|
||||
url.hostport.text.size,
|
||||
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_end_len = strlen( xml_end );
|
||||
action_str_len = strlen( action_str );
|
||||
@@ -800,17 +815,24 @@ SoapSendActionEx( IN char *action_url,
|
||||
|
||||
// make request msg
|
||||
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
|
||||
ContentTypeHeader,
|
||||
"SOAPACTION: \"", service_type, "#", name.buf,
|
||||
name.length, "\"\r\n",
|
||||
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 ) {
|
||||
content_length =
|
||||
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;
|
||||
if (http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"q" "N" "s" "sssbsc" "Uc" "bbbbbbb",
|
||||
SOAPMETHOD_POST, &url,
|
||||
content_length,
|
||||
ContentTypeHeader,
|
||||
"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;
|
||||
}
|
||||
|
||||
@@ -873,24 +895,28 @@ SoapGetServiceVarStatus( IN char *action_url,
|
||||
IN char *var_name,
|
||||
OUT char **var_value )
|
||||
{
|
||||
memptr host; // value for HOST header
|
||||
memptr path; // ctrl path in first line in msg
|
||||
const memptr host; // value for HOST header
|
||||
const memptr path; // ctrl path in first line in msg
|
||||
uri_type url;
|
||||
membuffer request;
|
||||
int ret_code;
|
||||
http_parser_t response;
|
||||
int upnp_error_code;
|
||||
|
||||
off_t content_length;
|
||||
char *xml_start =
|
||||
// "<?xml version=\"1.0\"?>\n" required??
|
||||
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n"
|
||||
"<s:Body>\n"
|
||||
"<u:QueryStateVariable xmlns:u=\"urn:schemas-upnp-org:control-1-0\">\n"
|
||||
"<s:Envelope "
|
||||
"xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n"
|
||||
"<s:Body>\r\n"
|
||||
"<u:QueryStateVariable xmlns:u=\"urn:schemas-upnp-org:control-1-0\">\r\n"
|
||||
"<u:varName>";
|
||||
|
||||
char *xml_end = "</u:varName>\n"
|
||||
"</u:QueryStateVariable>\n" "</s:Body>\n" "</s:Envelope>\n";
|
||||
char *xml_end =
|
||||
"</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
|
||||
|
||||
@@ -902,11 +928,16 @@ SoapGetServiceVarStatus( IN char *action_url,
|
||||
}
|
||||
// make headers
|
||||
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
|
||||
ContentTypeHeader,
|
||||
"SOAPACTION: \"urn:schemas"
|
||||
"-upnp-org:control-1-0#QueryStateVariable\"\r\n",
|
||||
xml_start, var_name, xml_end ) != 0 ) {
|
||||
content_length = strlen( xml_start ) + strlen( var_name ) + strlen( xml_end );
|
||||
if (http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"Q" "sbc" "N" "s" "s" "Ucc" "sss",
|
||||
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;
|
||||
}
|
||||
// send msg and get reply
|
||||
|
@@ -189,7 +189,7 @@ send_error_response( IN SOCKINFO * info,
|
||||
IN const char *err_msg,
|
||||
IN http_message_t * hmsg )
|
||||
{
|
||||
int content_length;
|
||||
off_t content_length;
|
||||
int timeout_secs = SOAP_TIMEOUT;
|
||||
int major,
|
||||
minor;
|
||||
@@ -228,20 +228,19 @@ send_error_response( IN SOCKINFO * info,
|
||||
|
||||
// make headers
|
||||
membuffer_init( &headers );
|
||||
/* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */
|
||||
if( http_MakeMessage( &headers, major, minor,
|
||||
"RNsDsSXc" "sssss",
|
||||
500,
|
||||
content_length,
|
||||
ContentTypeHeader,
|
||||
"EXT:\r\n",
|
||||
X_USER_AGENT,
|
||||
start_body, err_code_str, mid_body, err_msg,
|
||||
end_body ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
&headers, major, minor,
|
||||
"RNsDsSXcc" "sssss",
|
||||
500,
|
||||
content_length,
|
||||
ContentTypeHeader,
|
||||
"EXT:\r\n",
|
||||
X_USER_AGENT,
|
||||
start_body, err_code_str, mid_body, err_msg,
|
||||
end_body ) != 0 ) {
|
||||
membuffer_destroy( &headers );
|
||||
return; // out of mem
|
||||
}
|
||||
/*-- PATCH END - */
|
||||
// send err msg
|
||||
http_SendMessage( info, &timeout_secs, "b",
|
||||
headers.buf, headers.length );
|
||||
@@ -268,12 +267,11 @@ send_var_query_response( IN SOCKINFO * info,
|
||||
IN const char *var_value,
|
||||
IN http_message_t * hmsg )
|
||||
{
|
||||
int content_length;
|
||||
off_t content_length;
|
||||
int timeout_secs = SOAP_TIMEOUT;
|
||||
int major,
|
||||
minor;
|
||||
int major;
|
||||
int minor;
|
||||
const char *start_body =
|
||||
// "<?xml version=\"1.0\"?>\n" required??
|
||||
"<s:Envelope "
|
||||
"xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n"
|
||||
@@ -297,19 +295,18 @@ send_var_query_response( IN SOCKINFO * info,
|
||||
// make headers
|
||||
membuffer_init( &response );
|
||||
|
||||
/* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */
|
||||
if( http_MakeMessage( &response, major, minor,
|
||||
"RNsDsSXcc" "sss",
|
||||
HTTP_OK,
|
||||
content_length,
|
||||
ContentTypeHeader,
|
||||
"EXT:\r\n",
|
||||
X_USER_AGENT,
|
||||
start_body, var_value, end_body ) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
&response, major, minor,
|
||||
"RNsDsSXcc" "sss",
|
||||
HTTP_OK,
|
||||
content_length,
|
||||
ContentTypeHeader,
|
||||
"EXT:\r\n",
|
||||
X_USER_AGENT,
|
||||
start_body, var_value, end_body ) != 0 ) {
|
||||
membuffer_destroy( &response );
|
||||
return; // out of mem
|
||||
}
|
||||
/* -- PATCH END - */
|
||||
|
||||
// send msg
|
||||
http_SendMessage( info, &timeout_secs, "b",
|
||||
@@ -603,13 +600,13 @@ get_device_info( IN http_message_t * request,
|
||||
service_info *serv_info;
|
||||
char save_char;
|
||||
int ret_code = -1; // error by default
|
||||
char *control_url;
|
||||
const char *control_url;
|
||||
char *actionName = NULL;
|
||||
|
||||
// null-terminate pathquery of url
|
||||
control_url = request->uri.pathquery.buff;
|
||||
save_char = control_url[request->uri.pathquery.size];
|
||||
control_url[request->uri.pathquery.size] = '\0';
|
||||
((char *)control_url)[request->uri.pathquery.size] = '\0';
|
||||
|
||||
HandleLock( );
|
||||
|
||||
@@ -666,7 +663,7 @@ get_device_info( IN http_message_t * request,
|
||||
ret_code = 0;
|
||||
|
||||
error_handler:
|
||||
control_url[request->uri.pathquery.size] = save_char; // restore
|
||||
((char *)control_url)[request->uri.pathquery.size] = save_char; // restore
|
||||
HandleUnlock( );
|
||||
return ret_code;
|
||||
}
|
||||
@@ -695,7 +692,7 @@ send_action_response( IN SOCKINFO * info,
|
||||
int major,
|
||||
minor;
|
||||
int err_code;
|
||||
int content_length;
|
||||
off_t content_length;
|
||||
int ret_code;
|
||||
int timeout_secs = SOAP_TIMEOUT;
|
||||
static char *start_body =
|
||||
@@ -717,17 +714,22 @@ send_action_response( IN SOCKINFO * info,
|
||||
goto error_handler;
|
||||
}
|
||||
|
||||
content_length = strlen( start_body ) + strlen( xml_response ) +
|
||||
content_length =
|
||||
strlen( start_body ) +
|
||||
strlen( xml_response ) +
|
||||
strlen( end_body );
|
||||
|
||||
// make headers
|
||||
/* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */
|
||||
if( http_MakeMessage( &headers, major, minor, "RNsDsSXcc", HTTP_OK, // status code
|
||||
content_length, ContentTypeHeader, "EXT:\r\n", X_USER_AGENT // EXT header
|
||||
) != 0 ) {
|
||||
if (http_MakeMessage(
|
||||
&headers, major, minor,
|
||||
"RNsDsSXcc",
|
||||
HTTP_OK, // status code
|
||||
content_length,
|
||||
ContentTypeHeader,
|
||||
"EXT:\r\n",
|
||||
X_USER_AGENT) != 0 ) {
|
||||
goto error_handler;
|
||||
}
|
||||
/* -- PATCH END - */
|
||||
|
||||
// send whole msg
|
||||
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 *VarNode = NULL;
|
||||
const DOMString StNodeName = NULL;
|
||||
DOMString Temp = NULL;
|
||||
const DOMString Temp = NULL;
|
||||
int ret_val = -1;
|
||||
|
||||
// Got the Envelop node here
|
||||
|
@@ -234,7 +234,17 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr,
|
||||
|
||||
for( Index = 0; Index < NumPacket; Index++ ) {
|
||||
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;
|
||||
while( NumCopy < NUM_COPY ) {
|
||||
DBGONLY( UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||
@@ -295,16 +305,16 @@ CreateServicePacket( IN int msg_type,
|
||||
*packet = NULL;
|
||||
|
||||
if( msg_type == MSGTYPE_REPLY ) {
|
||||
/* -- PATCH START - Sergey 'Jin' Bostandzhyan <jin_eld at users.sourceforge.net> */
|
||||
ret_code = http_MakeMessage( &buf, 1, 1,
|
||||
"R" "sdc" "D" "s" "ssc" "S" "Xc" "ssc"
|
||||
"ssc" "c", HTTP_OK,
|
||||
"CACHE-CONTROL: max-age=", duration,
|
||||
"EXT:\r\n", "LOCATION: ", location,
|
||||
X_USER_AGENT,
|
||||
"ST: ", nt, "USN: ", usn );
|
||||
/* -- PATCH END - */
|
||||
|
||||
ret_code = http_MakeMessage(
|
||||
&buf, 1, 1,
|
||||
"R" "sdc" "D" "sc" "ssc" "S" "Xc" "ssc" "sscc",
|
||||
HTTP_OK,
|
||||
"CACHE-CONTROL: max-age=", duration,
|
||||
"EXT:",
|
||||
"LOCATION: ", location,
|
||||
X_USER_AGENT,
|
||||
"ST: ", nt,
|
||||
"USN: ", usn);
|
||||
if( ret_code != 0 ) {
|
||||
return;
|
||||
}
|
||||
@@ -320,15 +330,17 @@ CreateServicePacket( IN int msg_type,
|
||||
// NOTE: The CACHE-CONTROL and LOCATION headers are not present in
|
||||
// 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( &buf, 1, 1,
|
||||
"Q" "sssdc" "sdc" "ssc" "ssc" "ssc"
|
||||
"S" "Xc" "ssc" "c", HTTPMETHOD_NOTIFY, "*",
|
||||
1, "HOST: ", SSDP_IP, ":", SSDP_PORT,
|
||||
"CACHE-CONTROL: max-age=", duration,
|
||||
"LOCATION: ", location, "NT: ", nt,
|
||||
"NTS: ", nts, X_USER_AGENT, "USN: ", usn );
|
||||
/* -- PATCH END - */
|
||||
ret_code = http_MakeMessage(
|
||||
&buf, 1, 1,
|
||||
"Q" "sssdc" "sdc" "ssc" "ssc" "ssc" "S" "Xc" "sscc",
|
||||
HTTPMETHOD_NOTIFY, "*",
|
||||
1, "HOST: ", SSDP_IP, ":", SSDP_PORT,
|
||||
"CACHE-CONTROL: max-age=", duration,
|
||||
"LOCATION: ", location,
|
||||
"NT: ", nt,
|
||||
"NTS: ", nts,
|
||||
X_USER_AGENT,
|
||||
"USN: ", usn );
|
||||
if( ret_code != 0 ) {
|
||||
return;
|
||||
}
|
||||
|
@@ -112,7 +112,7 @@ CLIENTONLY( SOCKET gSsdpReqSocket = 0;
|
||||
IXML_Node *tmpNode = NULL;
|
||||
IXML_Node *tmpNode2 = NULL;
|
||||
IXML_Node *textNode = NULL;
|
||||
DOMString tmpStr;
|
||||
const DOMString tmpStr;
|
||||
char SERVER[200];
|
||||
|
||||
DBGONLY( const DOMString dbgStr;
|
||||
@@ -922,6 +922,7 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
||||
struct ip_mreq ssdpMcastAddr;
|
||||
struct sockaddr_in ssdpAddr;
|
||||
int option = 1;
|
||||
struct in_addr addr;
|
||||
|
||||
CLIENTONLY( if( ( ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ) )
|
||||
== UPNP_INVALID_SOCKET ) {
|
||||
@@ -997,7 +998,7 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
||||
}
|
||||
|
||||
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 );
|
||||
if( setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
|
||||
( char * )&ssdpMcastAddr,
|
||||
@@ -1012,6 +1013,17 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
||||
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
||||
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.
|
||||
setsockopt( ssdpSock, IPPROTO_IP,
|
||||
IP_MULTICAST_TTL, &ttl, sizeof( ttl ) );
|
||||
|
@@ -213,7 +213,7 @@ config_description_doc( INOUT IXML_Document * doc,
|
||||
IXML_Node *rootNode = NULL;
|
||||
IXML_Node *urlbase_node = NULL;
|
||||
char *urlBaseStr = "URLBase";
|
||||
DOMString domStr = NULL;
|
||||
const DOMString domStr = NULL;
|
||||
uri_type uri;
|
||||
int err_code;
|
||||
int len;
|
||||
|
Reference in New Issue
Block a user