Compare commits

..

8 Commits

Author SHA1 Message Date
Marcelo Roberto Jimenez
671c42c392 Fixes unmerged changes from trunk@307 to tags/release-1.6.4. This has happened
due to improper handling of ISO-8859-1/UTF-8 by some software in the middle of
the process. My fault.


git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/tags/release-1.6.4@315 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2008-02-03 02:25:36 +00:00
Marcelo Roberto Jimenez
b7388f5b16 Creation of the tag for release-1.6.4.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/tags/release-1.6.4@307 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2008-01-27 02:20:39 +00:00
Marcelo Roberto Jimenez
1eeaf99b83 Merge of trunk into branch-1.6.x.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@306 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2008-01-27 02:13:08 +00:00
Marcelo Roberto Jimenez
f6dd5062fe Merge of trunk into branch-1.6.x.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@284 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2007-12-27 02:14:02 +00:00
Marcelo Roberto Jimenez
7d4a610b93 Merge of head into branch-1.6.x.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@265 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2007-12-10 23:18:38 +00:00
Marcelo Roberto Jimenez
0a074d1989 Merge of trunk into branch 1.6.x.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@263 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2007-12-10 22:56:56 +00:00
Marcelo Roberto Jimenez
0475a46680 Merge of current trunk to branch 1.6.x.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@251 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2007-11-19 14:15:45 +00:00
Marcelo Roberto Jimenez
2a76749682 Creating branch 1.6.x.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@210 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2007-06-23 14:23:29 +00:00
144 changed files with 25692 additions and 33131 deletions

853
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -31,7 +31,7 @@ PROJECT_NAME = libUPnP
# This could be handy for archiving the generated documentation or # This could be handy for archiving the generated documentation or
# if some version control system is used. # if some version control system is used.
PROJECT_NUMBER = 1.8.0 PROJECT_NUMBER = 1.4.7
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put. # base path where the generated documentation will be put.
@@ -91,7 +91,7 @@ ABBREVIATE_BRIEF =
# Doxygen will generate a detailed section even if there is only a brief # Doxygen will generate a detailed section even if there is only a brief
# description. # description.
ALWAYS_DETAILED_SEC = YES ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those # inherited members of a class in the documentation of that class as if those
@@ -290,7 +290,7 @@ HIDE_IN_BODY_DOCS = NO
# to NO (the default) then the documentation will be excluded. # to NO (the default) then the documentation will be excluded.
# Set it to YES to include the internal documentation. # Set it to YES to include the internal documentation.
INTERNAL_DOCS = YES INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
# file names in lower-case letters. If set to YES upper-case letters are also # file names in lower-case letters. If set to YES upper-case letters are also
@@ -462,7 +462,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories # directories like "/usr/src/myproject". Separate the files or directories
# with spaces. # with spaces.
INPUT = upnp ixml threadutil INPUT = ./upnp ./ixml ./threadutil
# This tag can be used to specify the character encoding of the source files that # This tag can be used to specify the character encoding of the source files that
# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
@@ -995,7 +995,7 @@ ENABLE_PREPROCESSING = YES
# compilation will be performed. Macro expansion can be done in a controlled # compilation will be performed. Macro expansion can be done in a controlled
# way by setting EXPAND_ONLY_PREDEF to YES. # way by setting EXPAND_ONLY_PREDEF to YES.
MACRO_EXPANSION = YES MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
# then the macro expansion is limited to the macros specified with the # then the macro expansion is limited to the macros specified with the
@@ -1029,7 +1029,7 @@ INCLUDE_FILE_PATTERNS =
# undefined via #undef or recursively expanded use the := operator # undefined via #undef or recursively expanded use the := operator
# instead of the = operator. # instead of the = operator.
PREDEFINED = DEBUG UPNP_HAVE_TOOLS INCLUDE_DEVICE_APIS INCLUDE_CLIENT_APIS EXCLUDE_GENA=0 EXCLUDE_DOM=0 PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded. # this tag can be used to specify a list of macro names that should be expanded.

View File

@@ -16,7 +16,6 @@ SUBDIRS = \
EXTRA_DIST = \ EXTRA_DIST = \
Doxyfile \
libupnp.pc.in \ libupnp.pc.in \
LICENSE \ LICENSE \
THANKS \ THANKS \
@@ -28,22 +27,7 @@ EXTRA_DIST = \
build/inc/autoconfig.h \ build/inc/autoconfig.h \
build/inc/config.h \ build/inc/config.h \
build/inc/upnpconfig.h \ build/inc/upnpconfig.h \
build/msvc/inttypes.h \ build/msvc/inttypes.h
build/msvc/stdint.h \
build/vc8/ixml.vcproj \
build/vc8/libupnp.sln \
build/vc8/libupnp.vcproj \
build/vc8/threadutil.vcproj \
build/vc8/tvcombo.vcproj \
build/vc8/tvctrlpt.vcproj \
build/vc8/tvdevice.vcproj \
build/vc9/ixml.vcproj \
build/vc9/libupnp.sln \
build/vc9/libupnp.vcproj \
build/vc9/threadutil.vcproj \
build/vc9/tvcombo.vcproj \
build/vc9/tvctrlpt.vcproj \
build/vc9/tvdevice.vcproj
# This variable must have 'exec' in its name, in order to be installed # This variable must have 'exec' in its name, in order to be installed

12
THANKS
View File

@@ -7,18 +7,11 @@ Here is a list of these people. Help us keep it complete and
exempt of errors. exempt of errors.
- Alex (afaucher) - Alex (afaucher)
- Andre Sodermans (wienerschnitzel)
- Anthony Viallard (homer242)
- Apostolos Syropoulos
- Arno Willig - Arno Willig
- Bob Ciora - Bob Ciora
- Carlo Parata
- Chaos - Chaos
- Charles Nepveu (cnepveu)
- Chris Pickel - Chris Pickel
- Chuck Thomason (cyt4)
- Craig Nelson - Craig Nelson
- David Blanchet
- David Maass - David Maass
- Emil Ljungdahl - Emil Ljungdahl
- Erik Johansson - Erik Johansson
@@ -37,19 +30,16 @@ exempt of errors.
- Keith Brindley - Keith Brindley
- Leuk_He - Leuk_He
- Loigu - Loigu
- Luke Kim (nereusuj) - Luke Kim
- Marcelo Roberto Jimenez (mroberto) - Marcelo Roberto Jimenez (mroberto)
- Markus Strobl - Markus Strobl
- Nektarios K. Papadopoulos (npapadop) - Nektarios K. Papadopoulos (npapadop)
- Nicholas Kraft
- Nick Leverton (leveret)
- Oskar Liljeblad - Oskar Liljeblad
- Michael (oxygenic) - Michael (oxygenic)
- Paul Vixie - Paul Vixie
- Peter Hartley - Peter Hartley
- Rene Hexel - Rene Hexel
- Robert Gingher (robsbox) - Robert Gingher (robsbox)
- Ronan Menard
- Siva Chandran - Siva Chandran
- Stéphane Corthésy - Stéphane Corthésy
- Steve Bresson - Steve Bresson

11
TODO
View File

@@ -18,13 +18,12 @@ http://sourceforge.net/tracker/?group_id=7189&atid=307189
- make API clean for large files and 64 bits - make API clean for large files and 64 bits
- Why is NUM_HANDLE defined to 200 when we can register only:
A) One client(1)
B) An IPv4 and IPv6 device (2)
NUM_HANDLE should be 3
- A sane way to implement the virtual directory callback initialization and checking To Be Decided
against NULL pointers. =============
- IPV6 support ?

View File

@@ -82,14 +82,11 @@
/* Define to 1 if you have the `vprintf' function. */ /* Define to 1 if you have the `vprintf' function. */
#define HAVE_VPRINTF 1 #define HAVE_VPRINTF 1
/* Define to 1 if you have the <ws2tcpip.h> header file. */
/* #undef HAVE_WS2TCPIP_H */
/* Define to 1 to prevent compilation of assert() */ /* Define to 1 to prevent compilation of assert() */
/* #undef NDEBUG */ #define NDEBUG 1
/* Define to 1 to prevent some debug code */ /* Define to 1 to prevent some debug code */
/* #undef NO_DEBUG */ #define NO_DEBUG 1
/* Define to 1 if your C compiler doesn't accept -c and -o together. */ /* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */ /* #undef NO_MINUS_C_MINUS_O */
@@ -104,13 +101,13 @@
#define PACKAGE_NAME "libupnp" #define PACKAGE_NAME "libupnp"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "libupnp 1.8.0" #define PACKAGE_STRING "libupnp 1.4.7"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libupnp" #define PACKAGE_TARNAME "libupnp"
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "1.8.0" #define PACKAGE_VERSION "1.4.7"
/* Define to necessary symbol if this constant uses a non-standard name on /* Define to necessary symbol if this constant uses a non-standard name on
your system. */ your system. */
@@ -123,7 +120,7 @@
#define UPNP_HAVE_CLIENT 1 #define UPNP_HAVE_CLIENT 1
/* see upnpconfig.h */ /* see upnpconfig.h */
#define UPNP_HAVE_DEBUG 1 /* #undef UPNP_HAVE_DEBUG */
/* see upnpconfig.h */ /* see upnpconfig.h */
#define UPNP_HAVE_DEVICE 1 #define UPNP_HAVE_DEVICE 1
@@ -134,23 +131,20 @@
/* see upnpconfig.h */ /* see upnpconfig.h */
#define UPNP_HAVE_WEBSERVER 1 #define UPNP_HAVE_WEBSERVER 1
/* Do not use pthread_rwlock_t */
#define UPNP_USE_RWLOCK 1
/* see upnpconfig.h */ /* see upnpconfig.h */
#define UPNP_VERSION_MAJOR 1 #define UPNP_VERSION_MAJOR 1
/* see upnpconfig.h */ /* see upnpconfig.h */
#define UPNP_VERSION_MINOR 8 #define UPNP_VERSION_MINOR 4
/* see upnpconfig.h */ /* see upnpconfig.h */
#define UPNP_VERSION_PATCH 0 #define UPNP_VERSION_PATCH 7
/* see upnpconfig.h */ /* see upnpconfig.h */
#define UPNP_VERSION_STRING "1.8.0" #define UPNP_VERSION_STRING "1.4.7"
/* Version number of package */ /* Version number of package */
#define VERSION "1.8.0" #define VERSION "1.4.7"
/* File Offset size */ /* File Offset size */
#define _FILE_OFFSET_BITS 64 #define _FILE_OFFSET_BITS 64
@@ -170,5 +164,5 @@
/* Define to `unsigned int' if <sys/types.h> does not define. */ /* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */ /* #undef size_t */
/* Type for storing the length of struct sockaddr */ /* Substitute for socklen_t */
/* #undef socklen_t */ /* #undef socklen_t */

View File

@@ -1,102 +1,86 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef INTERNAL_CONFIG_H #ifndef INTERNAL_CONFIG_H
#define INTERNAL_CONFIG_H #define INTERNAL_CONFIG_H
#include "autoconfig.h" #include "autoconfig.h"
/*! /** @name Compile time configuration options
* \name Compile time configuration options
*
* The Linux SDK for UPnP Devices contains some compile-time parameters * The Linux SDK for UPnP Devices contains some compile-time parameters
* that effect the behavior of the SDK. All configuration options are * that effect the behavior of the SDK. All configuration options are
* located in {\tt src/inc/config.h}. * located in {\tt src/inc/config.h}.
*
* @{
*/ */
//@{
/*! /** @name THREAD_IDLE_TIME
* \name THREAD_IDLE_TIME
*
* The {\tt THREAD_IDLE_TIME} constant determines when a thread will be * The {\tt THREAD_IDLE_TIME} constant determines when a thread will be
* removed from the thread pool and returned to the operating system. When * removed from the thread pool and returned to the operating system. When
* a thread in the thread pool has been idle for this number of milliseconds * a thread in the thread pool has been idle for this number of milliseconds
* the thread will be released from the thread pool. The default value is * the thread will be released from the thread pool. The default value is
* 5000 milliseconds (5 seconds). * 5000 milliseconds (5 seconds).
*
* @{
*/ */
//@{
#define THREAD_IDLE_TIME 5000 #define THREAD_IDLE_TIME 5000
/* @} */ //@}
/** @name JOBS_PER_THREAD
/*!
* \name JOBS_PER_THREAD
*
* The {\tt JOBS_PER_THREAD} constant determines when a new thread will be * The {\tt JOBS_PER_THREAD} constant determines when a new thread will be
* allocated to the thread pool inside the SDK. The thread pool will * allocated to the thread pool inside the SDK. The thread pool will
* try and maintain this jobs/thread ratio. When the jobs/thread ratio * try and maintain this jobs/thread ratio. When the jobs/thread ratio
* becomes greater than this, then a new thread (up to the max) will be * becomes greater than this, then a new thread (up to the max) will be
* allocated to the thread pool. The default ratio is 10 jobs/thread. * allocated to the thread pool. The default ratio is 10 jobs/thread.
*
* @{
*/ */
//@{
#define JOBS_PER_THREAD 10 #define JOBS_PER_THREAD 10
/* @} */ //@}
/** @name MIN_THREADS
/*!
* \name MIN_THREADS
*
* The {\tt MIN_THREADS} constant defines the minimum number of threads the * The {\tt MIN_THREADS} constant defines the minimum number of threads the
* thread pool inside the SDK will create. The thread pool will * thread pool inside the SDK will create. The thread pool will
* always have this number of threads. These threads are used * always have this number of threads. These threads are used
* for both callbacks into applications built on top of the SDK and also * for both callbacks into applications built on top of the SDK and also
* for making connections to other control points and devices. This number * for making connections to other control points and devices. This number
* includes persistent threads. The default value is two threads. * includes persistent threads. The default value is two threads.
*
* @{
*/ */
//@{
#define MIN_THREADS 2 #define MIN_THREADS 2
/* @} */ //@}
/** @name MAX_THREADS
/*!
* \name MAX_THREADS
*
* The {\tt MAX_THREADS} constant defines the maximum number of threads the * The {\tt MAX_THREADS} constant defines the maximum number of threads the
* thread pool inside the SDK will create. These threads are used * thread pool inside the SDK will create. These threads are used
* for both callbacks into applications built on top of the library and also * for both callbacks into applications built on top of the library and also
@@ -105,79 +89,60 @@
* necessary for correct operation. This value can be increased for greater * necessary for correct operation. This value can be increased for greater
* performance in operation at the expense of greater memory overhead. The * performance in operation at the expense of greater memory overhead. The
* default value is 12. * default value is 12.
*
* @{
*/ */
//@{
#define MAX_THREADS 12 #define MAX_THREADS 12
/* @} */ //@}
/** @name MAX_JOBS_TOTAL
/*! \name MAX_JOBS_TOTAL
*
* The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs * The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs
* that can be queued. If this limit is reached further jobs will be thrown * that can be queued. If this limit is reached further jobs will be thrown
* to avoid memory exhaustion. The default value 100. * to avoid memory exhaustion. The default value 100.
* (Added by Axis.) * (Added by Axis.)
*
* @{
*/ */
//@{
#define MAX_JOBS_TOTAL 100 #define MAX_JOBS_TOTAL 100
/* @} */ //@}
/** @name DEFAULT_SOAP_CONTENT_LENGTH
/*!
* \name DEFAULT_SOAP_CONTENT_LENGTH
*
* SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes. * SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.
* This prevents devices that have a misbehaving web server to send * This prevents devices that have a misbehaving web server to send
* a large amount of data to the control point causing it to crash. * a large amount of data to the control point causing it to crash.
* This can be adjusted dynamically with {\tt UpnpSetMaxContentLength}. * This can be adjusted dynamically with {\tt UpnpSetMaxContentLength}.
*
* @{
*/ */
//@{
#define DEFAULT_SOAP_CONTENT_LENGTH 16000 #define DEFAULT_SOAP_CONTENT_LENGTH 16000
/* @} */ //@}
/** @name NUM_SSDP_COPY
/*!
* \name NUM_SSDP_COPY
*
* This configuration parameter determines how many copies of each SSDP * This configuration parameter determines how many copies of each SSDP
* advertisement and search packets will be sent. By default it will send two * advertisement and search packets will be sent. By default it will send two
* copies of every packet. * copies of every packet.
*
* @{
*/ */
//@{
#define NUM_SSDP_COPY 2 #define NUM_SSDP_COPY 2
/* @} */ //@}
/** @name SSDP_PAUSE
/*!
* \name SSDP_PAUSE
*
* This configuration parameter determines the pause between identical SSDP * This configuration parameter determines the pause between identical SSDP
* advertisement and search packets. The pause is measured in milliseconds * advertisement and search packets. The pause is measured in milliseconds
* and defaults to 100. * and defaults to 100.
*
* @{
*/ */
//@{
#define SSDP_PAUSE 100 #define SSDP_PAUSE 100
/* @} */ //@}
/*! /** @name WEB_SERVER_BUF_SIZE
* \name WEB_SERVER_BUF_SIZE
*
* This configuration parameter sets the maximum buffer size for the * This configuration parameter sets the maximum buffer size for the
* webserver. The default value is 1MB. * webserver. The default value is 1MB.
*
* @{
*/ */
//@{
#define WEB_SERVER_BUF_SIZE (1024*1024) #define WEB_SERVER_BUF_SIZE (1024*1024)
/* @} */ //@}
/*! /** @name AUTO_RENEW_TIME
* \name AUTO_RENEW_TIME
*
* The {\tt AUTO_RENEW_TIME} is the time, in seconds, before a subscription * The {\tt AUTO_RENEW_TIME} is the time, in seconds, before a subscription
* expires that the SDK automatically resubscribes. The default * expires that the SDK automatically resubscribes. The default
* value is 10 seconds. Setting this value too low can result in the * value is 10 seconds. Setting this value too low can result in the
@@ -185,87 +150,71 @@
* subscription to timeout. In order to avoid continually resubscribing * subscription to timeout. In order to avoid continually resubscribing
* the minimum subscription time is five seconds more than the auto renew * the minimum subscription time is five seconds more than the auto renew
* time. * time.
*
* @{
*/ */
#define AUTO_RENEW_TIME 10
/* @} */
/*! //@{
* \name CP_MINIMUM_SUBSCRIPTION_TIME #define AUTO_RENEW_TIME 10
* //@}
/** @name CP_MINIMUM_SUBSCRIPTION_TIME
* The {\tt CP_MINIMUM_SUBSCRIPTION_TIME} is the minimum subscription time * The {\tt CP_MINIMUM_SUBSCRIPTION_TIME} is the minimum subscription time
* allowed for a control point using the SDK. Subscribing for less than * allowed for a control point using the SDK. Subscribing for less than
* this time automatically results in a subscription for this amount. The * this time automatically results in a subscription for this amount. The
* default value is 5 seconds more than the {\tt AUTO_RENEW_TIME}, or 15 * default value is 5 seconds more than the {\tt AUTO_RENEW_TIME}, or 15
* seconds. * seconds.
*
* @{
*/ */
//@{
#define CP_MINIMUM_SUBSCRIPTION_TIME (AUTO_RENEW_TIME + 5) #define CP_MINIMUM_SUBSCRIPTION_TIME (AUTO_RENEW_TIME + 5)
/* @} */ //@}
/** @name MAX_SEARCH_TIME
/*!
* \name MAX_SEARCH_TIME
*
* The {\tt MAX_SEARCH_TIME} is the maximum time * The {\tt MAX_SEARCH_TIME} is the maximum time
* allowed for an SSDP search by a control point. Searching for greater than * allowed for an SSDP search by a control point. Searching for greater than
* this time automatically results in a search for this amount. The default * this time automatically results in a search for this amount. The default
* value is 80 seconds. * value is 80 seconds.
*
* @{
*/ */
//@{
#define MAX_SEARCH_TIME 80 #define MAX_SEARCH_TIME 80
/* @} */ //@}
/** @name MIN_SEARCH_TIME
/*!
* \name MIN_SEARCH_TIME
*
* The {\tt MIN_SEARCH_TIME} is the minimumm time * The {\tt MIN_SEARCH_TIME} is the minimumm time
* allowed for an SSDP search by a control point. Searching for less than * allowed for an SSDP search by a control point. Searching for less than
* this time automatically results in a search for this amount. The default * this time automatically results in a search for this amount. The default
* value is 2 seconds. * value is 2 seconds.
*
* @{
*/ */
//@{
#define MIN_SEARCH_TIME 2 #define MIN_SEARCH_TIME 2
/* @} */ //@}
/*! /** @name AUTO_ADVERTISEMENT_TIME
* \name AUTO_ADVERTISEMENT_TIME
*
* The {\tt AUTO_ADVERTISEMENT_TIME} is the time, in seconds, before an * The {\tt AUTO_ADVERTISEMENT_TIME} is the time, in seconds, before an
* device advertisements expires before a renewed advertisement is sent. * device advertisements expires before a renewed advertisement is sent.
* The default time is 30 seconds. * The default time is 30 seconds.
*
* @{
*/ */
//@{
#define AUTO_ADVERTISEMENT_TIME 30 #define AUTO_ADVERTISEMENT_TIME 30
/* @} */ //@}
/** @name SSDP_PACKET_DISTRIBUTE
/*!
* \name SSDP_PACKET_DISTRIBUTE
*
* The {\tt SSDP_PACKET_DISTRIBUTE} enables the SSDP packets to be sent * The {\tt SSDP_PACKET_DISTRIBUTE} enables the SSDP packets to be sent
* at an interval equal to half of the expiration time of SSDP packets * at an interval equal to half of the expiration time of SSDP packets
* minus the AUTO_ADVERTISEMENT_TIME. This is used to increase * minus the AUTO_ADVERTISEMENT_TIME. This is used to increase
* the probability of SSDP packets reaching to control points. * the probability of SSDP packets reaching to control points.
* It is recommended that this flag be turned on for embedded wireless * It is recommended that this flag be turned on for embedded wireless
* devices. * devices.
*
* @{
*/ */
//@{
#define SSDP_PACKET_DISTRIBUTE 1 #define SSDP_PACKET_DISTRIBUTE 1
/* @} */ //@}
/** @name Module Exclusion
/*!
* \name Module Exclusion
*
* Depending on the requirements, the user can selectively discard any of * Depending on the requirements, the user can selectively discard any of
* the major modules like SOAP, GENA, SSDP or the Internal web server. By * the major modules like SOAP, GENA, SSDP or the Internal web server. By
* default everything is included inside the SDK. By setting any of * default everything is included inside the SDK. By setting any of
@@ -281,8 +230,9 @@
* \item {\tt EXCLUDE_JNI[0,1]} * \item {\tt EXCLUDE_JNI[0,1]}
* \end{itemize} * \end{itemize}
* *
* @{
*/ */
//@{
#define EXCLUDE_SSDP 0 #define EXCLUDE_SSDP 0
#define EXCLUDE_SOAP 0 #define EXCLUDE_SOAP 0
#define EXCLUDE_GENA 0 #define EXCLUDE_GENA 0
@@ -294,28 +244,24 @@
#else #else
# define EXCLUDE_JNI 1 # define EXCLUDE_JNI 1
#endif #endif
/* @} */ //@}
/*! /** @name DEBUG_TARGET
* \name DEBUG_TARGET
*
* The user has the option to redirect the library output debug messages * The user has the option to redirect the library output debug messages
* to either the screen or to a log file. All the output messages with * to either the screen or to a log file. All the output messages with
* debug level 0 will go to {\tt upnp.err} and messages with debug level * debug level 0 will go to {\tt upnp.err} and messages with debug level
* greater than zero will be redirected to {\tt upnp.out}. * greater than zero will be redirected to {\tt upnp.out}.
*
* @{
*/ */
//@{
#define DEBUG_TARGET 1 #define DEBUG_TARGET 1
/* @} */ //@}
/*! /** @name Other debugging features
* \name Other debugging features The UPnP SDK contains other features to aid in debugging:
* see <upnp/inc/upnpdebug.h>
* The UPnP SDK contains other features to aid in debugging:
* see <upnp/inc/upnpdebug.h>
*/ */
#define DEBUG_ALL 1 #define DEBUG_ALL 1
@@ -328,44 +274,36 @@
#define DEBUG_HTTP 0 #define DEBUG_HTTP 0
#define DEBUG_API 0 #define DEBUG_API 0
//@} // Compile time configuration options
/*
* @} Compile time configuration options
*/
/*************************************************************************** /***************************************************************************
* Do not change, Internal purpose only!!! * Do not change, Internal purpose only!!!
***************************************************************************/ ***************************************************************************/
/*! //@{
* @{
*/
/* /*
* Set additional defines based on requested configuration * Set additional defines based on requested configuration
*/ */
// configure --enable-client
/* configure --enable-client */
#if UPNP_HAVE_CLIENT #if UPNP_HAVE_CLIENT
# define INCLUDE_CLIENT_APIS 1 # define INCLUDE_CLIENT_APIS 1
#endif #endif
// configure --enable-device
/* configure --enable-device */
#if UPNP_HAVE_DEVICE #if UPNP_HAVE_DEVICE
# define INCLUDE_DEVICE_APIS 1 # define INCLUDE_DEVICE_APIS 1
#endif #endif
// configure --enable-webserver --enable-device
/* configure --enable-webserver --enable-device */
#if UPNP_HAVE_WEBSERVER #if UPNP_HAVE_WEBSERVER
# define INTERNAL_WEB_SERVER 1 # define INTERNAL_WEB_SERVER 1
#endif #endif
#undef EXCLUDE_WEB_SERVER #undef EXCLUDE_WEB_SERVER
#undef EXCLUDE_MINISERVER #undef EXCLUDE_MINISERVER
#ifdef INTERNAL_WEB_SERVER #ifdef INTERNAL_WEB_SERVER
@@ -376,7 +314,6 @@
# define EXCLUDE_MINISERVER 1 # define EXCLUDE_MINISERVER 1
#endif #endif
#if EXCLUDE_GENA == 1 && EXCLUDE_SOAP == 1 && EXCLUDE_WEB_SERVER == 1 #if EXCLUDE_GENA == 1 && EXCLUDE_SOAP == 1 && EXCLUDE_WEB_SERVER == 1
# undef EXCLUDE_MINISERVER # undef EXCLUDE_MINISERVER
# define EXCLUDE_MINISERVER 1 # define EXCLUDE_MINISERVER 1
@@ -385,7 +322,6 @@
# endif # endif
#endif #endif
#if EXCLUDE_GENA == 0 || EXCLUDE_SOAP == 0 || EXCLUDE_WEB_SERVER == 0 #if EXCLUDE_GENA == 0 || EXCLUDE_SOAP == 0 || EXCLUDE_WEB_SERVER == 0
# undef EXCLUDE_MINISERVER # undef EXCLUDE_MINISERVER
# define EXCLUDE_MINISERVER 0 # define EXCLUDE_MINISERVER 0
@@ -395,17 +331,13 @@
#endif #endif
#ifdef INCLUDE_CLIENT_APIS #ifdef INCLUDE_CLIENT_APIS
# define CLIENTONLY(x) x # define CLIENTONLY(x) x
#else /* INCLUDE_CLIENT_APIS */ #else
# define CLIENTONLY(x) # define CLIENTONLY(x)
#endif /* INCLUDE_CLIENT_APIS */ #endif
//@}
/* #endif
* @}
*/
#endif /* INTERNAL_CONFIG_H */

View File

@@ -1,35 +1,35 @@
/* upnp/inc/upnpconfig.h. Generated from upnpconfig.h.in by configure. */ /* upnp/inc/upnpconfig.h. Generated from upnpconfig.h.in by configure. */
/* -*- C -*- */ // -*- C -*-
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2006 R<>mi Turboult <r3mi@users.sourceforge.net> // Copyright (c) 2006 R<>mi Turboult <r3mi@users.sourceforge.net>
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* * Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* * Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef UPNP_CONFIG_H #ifndef UPNP_CONFIG_H
#define UPNP_CONFIG_H #define UPNP_CONFIG_H
@@ -40,16 +40,16 @@
***************************************************************************/ ***************************************************************************/
/** The library version (string) e.g. "1.3.0" */ /** The library version (string) e.g. "1.3.0" */
#define UPNP_VERSION_STRING "1.8.0" #define UPNP_VERSION_STRING "1.4.7"
/** Major version of the library */ /** Major version of the library */
#define UPNP_VERSION_MAJOR 1 #define UPNP_VERSION_MAJOR 1
/** Minor version of the library */ /** Minor version of the library */
#define UPNP_VERSION_MINOR 8 #define UPNP_VERSION_MINOR 4
/** Patch version of the library */ /** Patch version of the library */
#define UPNP_VERSION_PATCH 0 #define UPNP_VERSION_PATCH 7
/** The library version (numeric) e.g. 10300 means version 1.3.0 */ /** The library version (numeric) e.g. 10300 means version 1.3.0 */
#define UPNP_VERSION \ #define UPNP_VERSION \
@@ -69,7 +69,7 @@
/** Defined to 1 if the library has been compiled with DEBUG enabled /** Defined to 1 if the library has been compiled with DEBUG enabled
* (i.e. configure --enable-debug) : <upnp/upnpdebug.h> file is available */ * (i.e. configure --enable-debug) : <upnp/upnpdebug.h> file is available */
#define UPNP_HAVE_DEBUG 1 /* #undef UPNP_HAVE_DEBUG */
/** Defined to 1 if the library has been compiled with client API enabled /** Defined to 1 if the library has been compiled with client API enabled
@@ -92,5 +92,6 @@
#define UPNP_HAVE_TOOLS 1 #define UPNP_HAVE_TOOLS 1
#endif /* UPNP_CONFIG_H */ #endif // UPNP_CONFIG_H

View File

@@ -1,222 +0,0 @@
// ISO C9x compliant stdint.h for Microsoft Visual Studio
// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
//
// Copyright (c) 2006 Alexander Chemeris
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. The name of the author may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _MSC_VER // [
#error "Use this header only with Microsoft Visual C++ compilers!"
#endif // _MSC_VER ]
#ifndef _MSC_STDINT_H_ // [
#define _MSC_STDINT_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include <limits.h>
// For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}'
// or compiler give many errors like this:
// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
#if (_MSC_VER < 1300) && defined(__cplusplus)
extern "C++" {
#endif
# include <wchar.h>
#if (_MSC_VER < 1300) && defined(__cplusplus)
}
#endif
// 7.18.1 Integer types
// 7.18.1.1 Exact-width integer types
typedef __int8 int8_t;
typedef __int16 int16_t;
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
// 7.18.1.2 Minimum-width integer types
typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
typedef int64_t int_least64_t;
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
typedef uint64_t uint_least64_t;
// 7.18.1.3 Fastest minimum-width integer types
typedef int8_t int_fast8_t;
typedef int16_t int_fast16_t;
typedef int32_t int_fast32_t;
typedef int64_t int_fast64_t;
typedef uint8_t uint_fast8_t;
typedef uint16_t uint_fast16_t;
typedef uint32_t uint_fast32_t;
typedef uint64_t uint_fast64_t;
// 7.18.1.4 Integer types capable of holding object pointers
#ifdef _WIN64 // [
typedef __int64 intptr_t;
typedef unsigned __int64 uintptr_t;
#else // _WIN64 ][
typedef int intptr_t;
typedef unsigned int uintptr_t;
#endif // _WIN64 ]
// 7.18.1.5 Greatest-width integer types
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
// 7.18.2 Limits of specified-width integer types
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
// 7.18.2.1 Limits of exact-width integer types
#define INT8_MIN ((int8_t)_I8_MIN)
#define INT8_MAX _I8_MAX
#define INT16_MIN ((int16_t)_I16_MIN)
#define INT16_MAX _I16_MAX
#define INT32_MIN ((int32_t)_I32_MIN)
#define INT32_MAX _I32_MAX
#define INT64_MIN ((int64_t)_I64_MIN)
#define INT64_MAX _I64_MAX
#define UINT8_MAX _UI8_MAX
#define UINT16_MAX _UI16_MAX
#define UINT32_MAX _UI32_MAX
#define UINT64_MAX _UI64_MAX
// 7.18.2.2 Limits of minimum-width integer types
#define INT_LEAST8_MIN INT8_MIN
#define INT_LEAST8_MAX INT8_MAX
#define INT_LEAST16_MIN INT16_MIN
#define INT_LEAST16_MAX INT16_MAX
#define INT_LEAST32_MIN INT32_MIN
#define INT_LEAST32_MAX INT32_MAX
#define INT_LEAST64_MIN INT64_MIN
#define INT_LEAST64_MAX INT64_MAX
#define UINT_LEAST8_MAX UINT8_MAX
#define UINT_LEAST16_MAX UINT16_MAX
#define UINT_LEAST32_MAX UINT32_MAX
#define UINT_LEAST64_MAX UINT64_MAX
// 7.18.2.3 Limits of fastest minimum-width integer types
#define INT_FAST8_MIN INT8_MIN
#define INT_FAST8_MAX INT8_MAX
#define INT_FAST16_MIN INT16_MIN
#define INT_FAST16_MAX INT16_MAX
#define INT_FAST32_MIN INT32_MIN
#define INT_FAST32_MAX INT32_MAX
#define INT_FAST64_MIN INT64_MIN
#define INT_FAST64_MAX INT64_MAX
#define UINT_FAST8_MAX UINT8_MAX
#define UINT_FAST16_MAX UINT16_MAX
#define UINT_FAST32_MAX UINT32_MAX
#define UINT_FAST64_MAX UINT64_MAX
// 7.18.2.4 Limits of integer types capable of holding object pointers
#ifdef _WIN64 // [
# define INTPTR_MIN INT64_MIN
# define INTPTR_MAX INT64_MAX
# define UINTPTR_MAX UINT64_MAX
#else // _WIN64 ][
# define INTPTR_MIN INT32_MIN
# define INTPTR_MAX INT32_MAX
# define UINTPTR_MAX UINT32_MAX
#endif // _WIN64 ]
// 7.18.2.5 Limits of greatest-width integer types
#define INTMAX_MIN INT64_MIN
#define INTMAX_MAX INT64_MAX
#define UINTMAX_MAX UINT64_MAX
// 7.18.3 Limits of other integer types
#ifdef _WIN64 // [
# define PTRDIFF_MIN _I64_MIN
# define PTRDIFF_MAX _I64_MAX
#else // _WIN64 ][
# define PTRDIFF_MIN _I32_MIN
# define PTRDIFF_MAX _I32_MAX
#endif // _WIN64 ]
#define SIG_ATOMIC_MIN INT_MIN
#define SIG_ATOMIC_MAX INT_MAX
#ifndef SIZE_MAX // [
# ifdef _WIN64 // [
# define SIZE_MAX _UI64_MAX
# else // _WIN64 ][
# define SIZE_MAX _UI32_MAX
# endif // _WIN64 ]
#endif // SIZE_MAX ]
// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
#ifndef WCHAR_MIN // [
# define WCHAR_MIN 0
#endif // WCHAR_MIN ]
#ifndef WCHAR_MAX // [
# define WCHAR_MAX _UI16_MAX
#endif // WCHAR_MAX ]
#define WINT_MIN 0
#define WINT_MAX _UI16_MAX
#endif // __STDC_LIMIT_MACROS ]
// 7.18.4 Limits of other integer types
#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
// 7.18.4.1 Macros for minimum-width integer constants
#define INT8_C(val) val##i8
#define INT16_C(val) val##i16
#define INT32_C(val) val##i32
#define INT64_C(val) val##i64
#define UINT8_C(val) val##ui8
#define UINT16_C(val) val##ui16
#define UINT32_C(val) val##ui32
#define UINT64_C(val) val##ui64
// 7.18.4.2 Macros for greatest-width integer constants
#define INTMAX_C INT64_C
#define UINTMAX_C UINT64_C
#endif // __STDC_CONSTANT_MACROS ]
#endif // _MSC_STDINT_H_ ]

View File

@@ -1,217 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="ixml"
ProjectGUID="{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}"
RootNamespace="ixml"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="4"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc;..\..\upnp\inc"
PreprocessorDefinitions="WIN32;DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="4"
UseOfMFC="0"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc"
PreprocessorDefinitions="WIN32;IXML_INLINE="
RuntimeLibrary="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\ixml\src\attr.c"
>
</File>
<File
RelativePath="..\..\ixml\src\document.c"
>
</File>
<File
RelativePath="..\..\ixml\src\element.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixml.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmldebug.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlmembuf.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlparser.c"
>
</File>
<File
RelativePath="..\..\ixml\src\namedNodeMap.c"
>
</File>
<File
RelativePath="..\..\ixml\src\node.c"
>
</File>
<File
RelativePath="..\..\ixml\src\nodeList.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\ixml\inc\ixml.h"
>
</File>
<File
RelativePath="..\..\ixml\inc\ixmldebug.h"
>
</File>
<File
RelativePath="..\..\ixml\src\inc\ixmlmembuf.h"
>
</File>
<File
RelativePath="..\..\ixml\src\inc\ixmlparser.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,65 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libupnp", "libupnp.vcproj", "{6227F51A-1498-4C4A-B213-F6FDED605125}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "threadutil", "threadutil.vcproj", "{24884928-0501-4CF2-BC8A-180AFC23B2AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ixml", "ixml.vcproj", "{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvdevice", "tvdevice.vcproj", "{F592B023-E1F3-4A1E-841E-662DEE497435}"
ProjectSection(ProjectDependencies) = postProject
{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125}
{24884928-0501-4CF2-BC8A-180AFC23B2AF} = {24884928-0501-4CF2-BC8A-180AFC23B2AF}
{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} = {AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvctrlpt", "tvctrlpt.vcproj", "{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}"
ProjectSection(ProjectDependencies) = postProject
{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} = {AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}
{24884928-0501-4CF2-BC8A-180AFC23B2AF} = {24884928-0501-4CF2-BC8A-180AFC23B2AF}
{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvcombo", "tvcombo.vcproj", "{B5D74697-F615-4DCB-AA8B-935F6372F01C}"
ProjectSection(ProjectDependencies) = postProject
{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125}
{24884928-0501-4CF2-BC8A-180AFC23B2AF} = {24884928-0501-4CF2-BC8A-180AFC23B2AF}
{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427} = {AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.ActiveCfg = Debug|Win32
{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.Build.0 = Debug|Win32
{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.ActiveCfg = Release|Win32
{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.Build.0 = Release|Win32
{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Debug|Win32.ActiveCfg = Debug|Win32
{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Debug|Win32.Build.0 = Debug|Win32
{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Release|Win32.ActiveCfg = Release|Win32
{24884928-0501-4CF2-BC8A-180AFC23B2AF}.Release|Win32.Build.0 = Release|Win32
{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Debug|Win32.ActiveCfg = Debug|Win32
{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Debug|Win32.Build.0 = Debug|Win32
{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Release|Win32.ActiveCfg = Release|Win32
{AD489FAF-9CDD-411B-BFE9-1B9C6C16D427}.Release|Win32.Build.0 = Release|Win32
{F592B023-E1F3-4A1E-841E-662DEE497435}.Debug|Win32.ActiveCfg = Debug|Win32
{F592B023-E1F3-4A1E-841E-662DEE497435}.Debug|Win32.Build.0 = Debug|Win32
{F592B023-E1F3-4A1E-841E-662DEE497435}.Release|Win32.ActiveCfg = Release|Win32
{F592B023-E1F3-4A1E-841E-662DEE497435}.Release|Win32.Build.0 = Release|Win32
{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Debug|Win32.ActiveCfg = Debug|Win32
{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Debug|Win32.Build.0 = Debug|Win32
{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Release|Win32.ActiveCfg = Release|Win32
{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}.Release|Win32.Build.0 = Release|Win32
{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Debug|Win32.ActiveCfg = Debug|Win32
{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Debug|Win32.Build.0 = Debug|Win32
{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Release|Win32.ActiveCfg = Release|Win32
{B5D74697-F615-4DCB-AA8B-935F6372F01C}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,654 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="libupnp"
ProjectGUID="{6227F51A-1498-4C4A-B213-F6FDED605125}"
RootNamespace="libupnp"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Release/libupnp.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\pthreads\include;..\..\ixml\src\inc;..\..\ixml\inc;..\..\threadutil\inc;..\..\upnp\inc;..\..\upnp\src\inc;..\inc;..\msvc"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\Release/libupnp.pch"
AssemblerListingLocation="$(OutDir)\"
ObjectFile="$(OutDir)\"
ProgramDataBaseFileName="$(OutDir)\"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1031"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbc32.lib odbccp32.lib ..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib iphlpapi.lib"
OutputFile="$(OutDir)\libupnp.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
ProgramDatabaseFile=".\Release/libupnp.pdb"
ImportLibrary=".\Release/libupnp.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Release/libupnp.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/libupnp.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\pthreads\include;..\..\ixml\src\inc;..\..\ixml\inc;..\..\threadutil\inc;..\..\upnp\inc;..\..\upnp\src\inc;..\inc;..\msvc"
PreprocessorDefinitions="DEBUG;WIN32;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile="$(OutDir)\libupnp.pch"
AssemblerListingLocation="$(OutDir)\"
ObjectFile="$(OutDir)\"
ProgramDataBaseFileName="$(OutDir)\"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1031"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib iphlpapi.lib ixml.lib"
OutputFile="$(OutDir)\libupnp.dll"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="$(OutDir)\..\ixml"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\libupnp.pdb"
ImportLibrary="$(OutDir)\libupnp.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile="$(OutDir)\libupnp.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="sources"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
RelativePath="..\..\upnp\src\api\ActionComplete.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\ActionRequest.c"
>
</File>
<File
RelativePath="..\..\ixml\src\attr.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\client_table\client_table.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\Discovery.c"
>
</File>
<File
RelativePath="..\..\ixml\src\document.c"
>
</File>
<File
RelativePath="..\..\ixml\src\element.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\Event.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\EventSubscribe.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\FileInfo.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\FreeList.c"
>
</File>
<File
RelativePath="..\..\upnp\src\gena\gena_callback2.c"
>
</File>
<File
RelativePath="..\..\upnp\src\gena\gena_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\src\gena\gena_device.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\httpparser.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\httpreadwrite.c"
>
</File>
<File
RelativePath="..\..\upnp\src\inet_pton.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixml.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlmembuf.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlparser.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\LinkedList.c"
>
</File>
<File
RelativePath="..\..\upnp\src\uuid\md5.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\membuffer.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\miniserver\miniserver.c"
>
</File>
<File
RelativePath="..\..\ixml\src\namedNodeMap.c"
>
</File>
<File
RelativePath="..\..\ixml\src\node.c"
>
</File>
<File
RelativePath="..\..\ixml\src\nodeList.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\parsetools.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\service_table\service_table.c"
>
</File>
<File
RelativePath="..\..\upnp\src\soap\soap_common.c"
>
</File>
<File
RelativePath="..\..\upnp\src\soap\soap_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\src\soap\soap_device.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\sock.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_device.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_server.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\statcodes.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\StateVarComplete.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\StateVarRequest.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\strintmap.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\SubscriptionRequest.c"
>
</File>
<File
RelativePath="..\..\upnp\src\uuid\sysdep.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\ThreadPool.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\TimerThread.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\upnp_timeout.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\upnpapi.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\upnpdebug.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\UpnpString.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\upnptools.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\uri\uri.c"
>
</File>
<File
RelativePath="..\..\upnp\src\urlconfig\urlconfig.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\util.c"
>
</File>
<File
RelativePath="..\..\upnp\src\uuid\uuid.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\webserver.c"
>
</File>
<File
RelativePath="..\..\upnp\src\win_dll.c"
>
</File>
</Filter>
<Filter
Name="headers"
Filter="h;hpp;hxx;hm;inl"
>
<File
RelativePath="..\..\upnp\inc\ActionComplete.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\actionrequest.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\client_table.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\config.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\discovery.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\Event.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\EventSubscribe.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\FileInfo.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gena.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gena_ctrlpt.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gena_device.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\global.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gmtdate.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\http_client.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\httpparser.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\httpreadwrite.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\inet_pton.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\md5.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\membuffer.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\miniserver.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\netall.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\parsetools.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\server.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\service_table.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\soaplib.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\sock.h"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\ssdplib.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\statcodes.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\StateVarComplete.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\statevarrequest.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\statuscodes.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\strintmap.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\SubscriptionRequest.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\sysdep.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\unixutil.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\upnp.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\upnp_timeout.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\upnpapi.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\upnpclosesocket.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\upnpdebug.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\UpnpString.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\upnptools.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\uri.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\urlconfig.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\util.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\utilall.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\uuid.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\webserver.h"
>
</File>
</Filter>
<File
RelativePath="..\..\..\..\libupnp_win32.patch"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,213 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="threadutil"
ProjectGUID="{24884928-0501-4CF2-BC8A-180AFC23B2AF}"
RootNamespace="threadutil"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="4"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\threadutil\inc;..\..\upnp\inc;..\..\ixml\inc;..\..\pthreads\include"
PreprocessorDefinitions="WIN32;DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
AdditionalDependencies="pthreadVC2.lib"
AdditionalLibraryDirectories="..\..\pthreads\lib"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
RuntimeLibrary="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\threadutil\src\FreeList.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\LinkedList.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\ThreadPool.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\TimerThread.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\threadutil\inc\FreeList.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\ithread.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\LinkedList.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\ThreadPool.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\TimerThread.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,216 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="tvcombo"
ProjectGUID="{B5D74697-F615-4DCB-AA8B-935F6372F01C}"
RootNamespace="tvcombo"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvcombo;..\..\upnp\sample\tvcombo\linux"
PreprocessorDefinitions="WIN32;DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
AdditionalLibraryDirectories="&quot;$(OutDir)&quot;;&quot;out.vc8.$(ConfigurationName)\ixml&quot;;&quot;out.vc8.$(ConfigurationName)\threadutil&quot;;&quot;out.vc8.$(ConfigurationName)\libupnp&quot;"
GenerateDebugInformation="true"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
RuntimeLibrary="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\linux\upnp_tv_combo_main.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,208 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="tvctrlpt"
ProjectGUID="{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}"
RootNamespace="tvctrlpt"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvctrlpt;..\..\upnp\sample\tvctrlpt\linux"
PreprocessorDefinitions="WIN32;DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
AdditionalLibraryDirectories="&quot;$(OutDir)&quot;;&quot;out.vc8.$(ConfigurationName)\ixml&quot;;&quot;out.vc8.$(ConfigurationName)\threadutil&quot;;&quot;out.vc8.$(ConfigurationName)\libupnp&quot;"
GenerateDebugInformation="true"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
RuntimeLibrary="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvctrlpt\linux\upnp_tv_ctrlpt_main.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,208 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="tvdevice"
ProjectGUID="{F592B023-E1F3-4A1E-841E-662DEE497435}"
RootNamespace="tvdevice"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvdevice;..\..\upnp\sample\tvdevice\linux"
PreprocessorDefinitions="WIN32;DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
AdditionalLibraryDirectories="&quot;$(OutDir)&quot;;&quot;out.vc8.$(ConfigurationName)\ixml&quot;;&quot;out.vc8.$(ConfigurationName)\threadutil&quot;;&quot;out.vc8.$(ConfigurationName)\libupnp&quot;"
GenerateDebugInformation="true"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
RuntimeLibrary="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvdevice\linux\upnp_tv_device_main.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,216 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="ixml"
ProjectGUID="{9C2C266D-35A3-465F-A297-0E21D54E5C89}"
RootNamespace="ixml"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="4"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc;..\..\upnp\inc"
PreprocessorDefinitions="DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="4"
CharacterSet="0"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="..\..\ixml\inc;..\..\ixml\src\inc;..\inc"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\ixml\src\attr.c"
>
</File>
<File
RelativePath="..\..\ixml\src\document.c"
>
</File>
<File
RelativePath="..\..\ixml\src\element.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixml.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmldebug.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlmembuf.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlparser.c"
>
</File>
<File
RelativePath="..\..\ixml\src\namedNodeMap.c"
>
</File>
<File
RelativePath="..\..\ixml\src\node.c"
>
</File>
<File
RelativePath="..\..\ixml\src\nodeList.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\ixml\inc\ixml.h"
>
</File>
<File
RelativePath="..\..\ixml\inc\ixmldebug.h"
>
</File>
<File
RelativePath="..\..\ixml\src\inc\ixmlmembuf.h"
>
</File>
<File
RelativePath="..\..\ixml\src\inc\ixmlparser.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,63 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libupnp", "libupnp.vcproj", "{6227F51A-1498-4C4A-B213-F6FDED605125}"
ProjectSection(ProjectDependencies) = postProject
{9C2C266D-35A3-465F-A297-0E21D54E5C89} = {9C2C266D-35A3-465F-A297-0E21D54E5C89}
{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D} = {1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ixml", "ixml.vcproj", "{9C2C266D-35A3-465F-A297-0E21D54E5C89}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "threadutil", "threadutil.vcproj", "{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvctrlpt", "tvctrlpt.vcproj", "{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}"
ProjectSection(ProjectDependencies) = postProject
{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvdevice", "tvdevice.vcproj", "{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}"
ProjectSection(ProjectDependencies) = postProject
{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tvcombo", "tvcombo.vcproj", "{6365804B-22C6-4D5E-91F3-0C052EB55B4F}"
ProjectSection(ProjectDependencies) = postProject
{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.ActiveCfg = Debug|Win32
{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|Win32.Build.0 = Debug|Win32
{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.ActiveCfg = Release|Win32
{6227F51A-1498-4C4A-B213-F6FDED605125}.Release|Win32.Build.0 = Release|Win32
{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Debug|Win32.ActiveCfg = Debug|Win32
{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Debug|Win32.Build.0 = Debug|Win32
{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release|Win32.ActiveCfg = Release|Win32
{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release|Win32.Build.0 = Release|Win32
{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Debug|Win32.ActiveCfg = Debug|Win32
{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Debug|Win32.Build.0 = Debug|Win32
{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release|Win32.ActiveCfg = Release|Win32
{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release|Win32.Build.0 = Release|Win32
{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Debug|Win32.ActiveCfg = Debug|Win32
{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Debug|Win32.Build.0 = Debug|Win32
{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Release|Win32.ActiveCfg = Release|Win32
{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}.Release|Win32.Build.0 = Release|Win32
{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Debug|Win32.ActiveCfg = Debug|Win32
{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Debug|Win32.Build.0 = Debug|Win32
{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Release|Win32.ActiveCfg = Release|Win32
{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}.Release|Win32.Build.0 = Release|Win32
{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Debug|Win32.ActiveCfg = Debug|Win32
{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Debug|Win32.Build.0 = Debug|Win32
{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Release|Win32.ActiveCfg = Release|Win32
{6365804B-22C6-4D5E-91F3-0C052EB55B4F}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,650 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="libupnp"
ProjectGUID="{6227F51A-1498-4C4A-B213-F6FDED605125}"
RootNamespace="libupnp"
TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Release/libupnp.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\pthreads\include,..\ixml\src\inc,..\ixml\inc,..\threadutil\inc,..\upnp\inc,..\upnp\src\inc,.\inc"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\Release/libupnp.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1031"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib iphlpapi.lib"
OutputFile=".\Release/libupnp.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
ProgramDatabaseFile=".\Release/libupnp.pdb"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
ImportLibrary=".\Release/libupnp.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Release/libupnp.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/libupnp.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\pthreads\include;..\..\ixml\src\inc;..\..\ixml\inc;..\..\threadutil\inc;..\..\upnp\inc;..\..\upnp\src\inc;..\inc;..\msvc"
PreprocessorDefinitions="DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
PrecompiledHeaderFile="$(OutDir)\libupnp.pch"
AssemblerListingLocation="$(OutDir)\"
ObjectFile="$(OutDir)\"
ProgramDataBaseFileName="$(OutDir)\"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1031"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadvc2.lib ws2_32.lib iphlpapi.lib $(TargetDir)..\ixml\ixml.lib"
OutputFile="$(OutDir)\libupnp.dll"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\libupnp.pdb"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
ImportLibrary="$(OutDir)\libupnp.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile="$(OutDir)\libupnp.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="sources"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
RelativePath="..\..\upnp\src\api\ActionComplete.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\ActionRequest.c"
>
</File>
<File
RelativePath="..\..\ixml\src\attr.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\client_table\client_table.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\Discovery.c"
>
</File>
<File
RelativePath="..\..\ixml\src\document.c"
>
</File>
<File
RelativePath="..\..\ixml\src\element.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\Event.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\EventSubscribe.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\FileInfo.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\FreeList.c"
>
</File>
<File
RelativePath="..\..\upnp\src\gena\gena_callback2.c"
>
</File>
<File
RelativePath="..\..\upnp\src\gena\gena_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\src\gena\gena_device.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\httpparser.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\httpreadwrite.c"
>
</File>
<File
RelativePath="..\..\upnp\src\inet_pton.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixml.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlmembuf.c"
>
</File>
<File
RelativePath="..\..\ixml\src\ixmlparser.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\LinkedList.c"
>
</File>
<File
RelativePath="..\..\upnp\src\uuid\md5.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\membuffer.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\miniserver\miniserver.c"
>
</File>
<File
RelativePath="..\..\ixml\src\namedNodeMap.c"
>
</File>
<File
RelativePath="..\..\ixml\src\node.c"
>
</File>
<File
RelativePath="..\..\ixml\src\nodeList.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\parsetools.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\service_table\service_table.c"
>
</File>
<File
RelativePath="..\..\upnp\src\soap\soap_common.c"
>
</File>
<File
RelativePath="..\..\upnp\src\soap\soap_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\src\soap\soap_device.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\sock.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_device.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.c"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_server.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\statcodes.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\StateVarComplete.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\StateVarRequest.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\strintmap.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\SubscriptionRequest.c"
>
</File>
<File
RelativePath="..\..\upnp\src\uuid\sysdep.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\ThreadPool.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\TimerThread.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\upnp_timeout.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\upnpapi.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\upnpdebug.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\UpnpString.c"
>
</File>
<File
RelativePath="..\..\upnp\src\api\upnptools.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\uri\uri.c"
>
</File>
<File
RelativePath="..\..\upnp\src\urlconfig\urlconfig.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\util\util.c"
>
</File>
<File
RelativePath="..\..\upnp\src\uuid\uuid.c"
>
</File>
<File
RelativePath="..\..\upnp\src\genlib\net\http\webserver.c"
>
</File>
<File
RelativePath="..\..\upnp\src\win_dll.c"
>
</File>
</Filter>
<Filter
Name="headers"
Filter="h;hpp;hxx;hm;inl"
>
<File
RelativePath="..\..\upnp\inc\ActionComplete.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\ActionRequest.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\client_table.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\config.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\Discovery.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\Event.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\EventSubscribe.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\FileInfo.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gena.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gena_ctrlpt.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gena_device.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\global.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\gmtdate.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\http_client.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\httpparser.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\httpreadwrite.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\inet_pton.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\md5.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\membuffer.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\miniserver.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\netall.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\parsetools.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\server.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\service_table.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\soaplib.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\sock.h"
>
</File>
<File
RelativePath="..\..\upnp\src\ssdp\ssdp_ResultData.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\ssdplib.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\statcodes.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\StateVarComplete.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\StateVarRequest.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\statuscodes.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\strintmap.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\SubscriptionRequest.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\sysdep.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\unixutil.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\upnp.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\upnp_timeout.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\upnpapi.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\upnpclosesocket.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\upnpdebug.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\UpnpString.h"
>
</File>
<File
RelativePath="..\..\upnp\inc\upnptools.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\uri.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\urlconfig.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\util.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\utilall.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\uuid.h"
>
</File>
<File
RelativePath="..\..\upnp\src\inc\webserver.h"
>
</File>
</Filter>
<File
RelativePath="..\..\..\..\libupnp_win32.patch"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,216 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="threadutil"
ProjectGUID="{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}"
RootNamespace="threadutil"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="4"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\threadutil\inc;..\..\upnp\inc;..\..\ixml\inc;..\..\pthreads\include"
PreprocessorDefinitions="DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
AdditionalDependencies="pthreadVC2.lib"
AdditionalLibraryDirectories="..\..\pthreads\lib"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="0"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="..\..\threadutil\inc;..\..\upnp\inc;..\..\ixml\inc;..\..\pthreads\include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;PTW32_STATIC_LIB;UPNP_STATIC_LIB;UPNP_USE_MSVCPP;_CRT_SECURE_NO_WARNINGS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
WarningLevel="3"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\threadutil\src\FreeList.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\LinkedList.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\ThreadPool.c"
>
</File>
<File
RelativePath="..\..\threadutil\src\TimerThread.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\threadutil\inc\FreeList.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\ithread.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\LinkedList.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\threadpool.h"
>
</File>
<File
RelativePath="..\..\threadutil\inc\TimerThread.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,214 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="tvcombo"
ProjectGUID="{6365804B-22C6-4D5E-91F3-0C052EB55B4F}"
RootNamespace="tvcombo"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\upnp\sample\common;..\..\upnp\sample;..\..\ixml\inc;..\..\pthreads\include;..\inc;..\..\threadutil\inc;..\..\upnp\sample\tvcombo"
PreprocessorDefinitions="DEBUG;WIN32"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib $(TargetDir)..\libupnp\libupnp.lib"
AdditionalLibraryDirectories="&quot;$(TargetDir)..\ixml&quot;;&quot;$(TargetDir)..\threadutil&quot;;&quot;$(TargetDir)..\libupnp&quot;"
GenerateDebugInformation="true"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
WarningLevel="3"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\linux\upnp_tv_combo_main.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.c"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,204 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="tvctrlpt"
ProjectGUID="{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}"
RootNamespace="sample"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\upnp\sample\common;..\..\ixml\inc;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvctrlpt\linux;..\..\upnp\sample\tvctrlpt"
PreprocessorDefinitions="WIN32;DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
AdditionalLibraryDirectories="&quot;$(OutDir)&quot;;&quot;.\out.vc9.$(ConfigurationName)\ixml&quot;;&quot;.\out.vc9.$(ConfigurationName)\threadutil&quot;;&quot;.\out.vc9.$(ConfigurationName)\libupnp&quot;"
GenerateDebugInformation="true"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvctrlpt\linux\upnp_tv_ctrlpt_main.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,204 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="tvdevice"
ProjectGUID="{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}"
RootNamespace="tvdevice"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvdevice;..\..\upnp\sample\tvdevice\linux"
PreprocessorDefinitions="WIN32;DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
AdditionalLibraryDirectories="&quot;$(OutDir)&quot;;&quot;.\out.vc9.$(ConfigurationName)\ixml&quot;;&quot;.\out.vc9.$(ConfigurationName)\threadutil&quot;;&quot;.\out.vc9.$(ConfigurationName)\libupnp&quot;"
GenerateDebugInformation="true"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.c"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvdevice\linux\upnp_tv_device_main.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\upnp\sample\common\sample_util.h"
>
</File>
<File
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -4,12 +4,12 @@
# #
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
# #
# (C) Copyright 2005-2007 Rémi Turboult <r3mi@users.sourceforge.net> # (C) Copyright 2005-2007 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
# #
AC_PREREQ(2.60) AC_PREREQ(2.60)
AC_INIT([libupnp], [1.8.0], [mroberto@users.sourceforge.net]) AC_INIT([libupnp], [1.6.4], [mroberto@users.sourceforge.net])
dnl ############################################################################ dnl ############################################################################
dnl # *Independently* of the above libupnp package version, the libtool version dnl # *Independently* of the above libupnp package version, the libtool version
dnl # of the 3 libraries need to be updated whenever there is a change released: dnl # of the 3 libraries need to be updated whenever there is a change released:
@@ -120,54 +120,9 @@ dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:3:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [3:3:0])
dnl # dnl #
dnl ############################################################################ dnl ############################################################################
dnl # Release 1.6.5:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in upnp
dnl # revision: 3 -> 4
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:4:0])
dnl #
dnl ############################################################################
dnl # Release 1.6.6:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in threadutil
dnl # revision: 2 -> 3
dnl # - Code has changed in upnp
dnl # revision: 4 -> 5
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:3:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:5:0])
dnl #
dnl ############################################################################
dnl # Release 1.8.0:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in upnp
dnl # revision: 5 -> 6
dnl # - Interfaces have been changed, added and removed in upnp
dnl # current: 3 -> 4
dnl # revision: 6 -> 0
dnl # - Interface has been removed in upnp
dnl # age = 0
dnl # - Code has changed in threadutil
dnl # revision: 3 -> 4
dnl # - Interfaces have been changed, added and removed in upnp
dnl # current: 4 -> 5
dnl # revision: 4 -> 0
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [5:0:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [4:0:0])
dnl #
dnl ############################################################################
AC_SUBST([LT_VERSION_IXML], [2:4:0]) AC_SUBST([LT_VERSION_IXML], [2:4:0])
AC_SUBST([LT_VERSION_THREADUTIL], [5:0:2]) AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
AC_SUBST([LT_VERSION_UPNP], [4:0:0]) AC_SUBST([LT_VERSION_UPNP], [3:3:0])
dnl ############################################################################ dnl ############################################################################
dnl # Repeating the algorithm to place it closer to the modificatin place: dnl # Repeating the algorithm to place it closer to the modificatin place:
dnl # - library code modified: revision++ dnl # - library code modified: revision++
@@ -322,9 +277,7 @@ freebsd*)
echo "Using non-specific system compiler settings" echo "Using non-specific system compiler settings"
if test x"$enable_debug" = xyes; then if test x"$enable_debug" = xyes; then
# AC_PROG_CC already sets CFLAGS to "-g -O2" by default # AC_PROG_CC already sets CFLAGS to "-g -O2" by default
#: :
# Use -O0 in debug so that variables do not get optimized out
AX_CFLAGS_GCC_OPTION([-O0])
else else
# add optimise for size # add optimise for size
AX_CFLAGS_GCC_OPTION([-Os]) AX_CFLAGS_GCC_OPTION([-Os])
@@ -346,26 +299,9 @@ AC_DEFINE([_FILE_OFFSET_BITS], [64], [File Offset size])
# #
# Are we targetting Win32? # Checks for header files
#
AC_MSG_CHECKING([for Win32])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
#ifdef WIN32
#error Yup
#endif
],[])], [ac_cv_win32="no"], [ac_cv_win32="yes"])
if test "$ac_cv_win32" = "yes"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
#
# Checks for header files (which aren't needed on Win32)
# #
AC_HEADER_STDC AC_HEADER_STDC
if test "$ac_cv_win32" = "no"; then
# libupnp code doesn't use autoconf variables yet, # libupnp code doesn't use autoconf variables yet,
# so just abort if a header file is not found. # so just abort if a header file is not found.
AC_CHECK_HEADERS( AC_CHECK_HEADERS(
@@ -381,43 +317,19 @@ AC_CHECK_HEADERS(
sys/ioctl.h \ sys/ioctl.h \
sys/socket.h \ sys/socket.h \
sys/time.h \ sys/time.h \
sys/timeb.h \
syslog.h \ syslog.h \
unistd.h \ unistd.h \
], ],
[], [],
[AC_MSG_ERROR([required header file missing])]) [AC_MSG_ERROR([required header file missing])])
fi
# #
# Checks for typedefs, structures, and compiler characteristics # Checks for typedefs, structures, and compiler characteristics
# #
AC_C_CONST AC_C_CONST
TYPE_SOCKLEN_T
# The test for socklen_t was getting it wrong when it exists but is in ws2tcpip.h,
# so we use a new test.
#TYPE_SOCKLEN_T
AC_CHECK_HEADERS([sys/types.h sys/socket.h ws2tcpip.h])
AC_MSG_CHECKING(for socklen_t)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
],[ socklen_t t = 0; return t; ])
],[ac_cv_socklen_t="yes"],[ac_cv_socklen_t="no"])
if test "$ac_cv_socklen_t" = "yes"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no, using int])
AC_DEFINE(socklen_t, int, [Type for storing the length of struct sockaddr])
fi
# #
@@ -426,11 +338,6 @@ fi
AC_FUNC_VPRINTF AC_FUNC_VPRINTF
AC_FUNC_FSEEKO AC_FUNC_FSEEKO
AC_CHECK_FUNCS(ftime,, [AC_CHECK_LIB(compat, ftime)]) AC_CHECK_FUNCS(ftime,, [AC_CHECK_LIB(compat, ftime)])
#
# Solaris needs -lsocket -lnsl -lrt
AC_SEARCH_LIBS([bind], [socket])
AC_SEARCH_LIBS([gethostbyname], [nsl])
AC_SEARCH_LIBS([sched_getparam], [rt])
# #

View File

@@ -24,23 +24,15 @@ libixml_la_LDFLAGS = -version-info $(LT_VERSION_IXML) \
-export-symbols-regex '^ixml.*' -export-symbols-regex '^ixml.*'
libixml_la_SOURCES = \ libixml_la_SOURCES = \
src/attr.c \ src/ixml.c src/node.c src/ixmlparser.c \
src/document.c \ src/ixmlmembuf.c src/nodeList.c \
src/element.c \ src/element.c src/attr.c src/document.c \
src/inc/ixmlmembuf.h \
src/inc/ixmlparser.h \
src/ixml.c \
src/ixmldebug.c \
src/ixmlparser.c \
src/ixmlmembuf.c \
src/namedNodeMap.c \ src/namedNodeMap.c \
src/node.c \ src/inc/ixmlmembuf.h src/inc/ixmlparser.h
src/nodeList.c
upnpincludedir = $(includedir)/upnp upnpincludedir = $(includedir)/upnp
upnpinclude_HEADERS = \ upnpinclude_HEADERS = inc/ixml.h
inc/ixml.h \
inc/ixmldebug.h
check_PROGRAMS = test_document check_PROGRAMS = test_document
TESTS = test/test_document.sh TESTS = test/test_document.sh
@@ -55,3 +47,4 @@ dist-hook:
clean-local: clean-local:
@if [ -d bin ] ; then rm -rf bin ; fi @if [ -d bin ] ; then rm -rf bin ; fi

File diff suppressed because it is too large Load Diff

View File

@@ -1,67 +0,0 @@
#ifndef IXMLDEBUG_H
#define IXMLDEBUG_H
#include "UpnpGlobal.h"
#include "ixml.h"
/*!
* \file
*
* \brief Auxiliar routines to aid debugging.
*/
/*!
* \brief Prints the debug statement either on the standard output or log file
* along with the information from where this debug statement is coming.
*/
#ifdef DEBUG
void IxmlPrintf(
/*! [in] The file name, usually __FILE__. */
const char *DbgFileName,
/*! [in] The line number, usually __LINE__ or a variable that got the
* __LINE__ at the appropriate place. */
int DbgLineNo,
/*! [in] The function name. */
const char *FunctionName,
/*! [in] Printf like format specification. */
const char* FmtStr,
/*! [in] Printf like Variable number of arguments that will go in the debug
* statement. */
...)
#if (__GNUC__ >= 3)
/* This enables printf like format checking by the compiler */
__attribute__((format (__printf__, 4, 5)))
#endif
;
#else /* DEBUG */
static UPNP_INLINE void IxmlPrintf(
const char* FmtStr,
...) {}
#endif /* DEBUG */
/*!
* \brief Print the node names and values of a XML tree.
*/
#ifdef DEBUG
void printNodes(
/*! [in] The root of the tree to print. */
IXML_Node *tmpRoot,
/*! [in] The depth to print. */
int depth);
#else
static UPNP_INLINE void printNodes(
IXML_Node *tmpRoot,
int depth)
{
}
#endif
#endif /* IXMLDEBUG_H */

View File

@@ -1,53 +1,60 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "ixmlparser.h" #include "ixmlparser.h"
/*================================================================
#include <string.h> * Function: Attr_init
* Initializes an attribute node
* External function.
void ixmlAttr_init(IN IXML_Attr *attr) *
*=================================================================*/
void
ixmlAttr_init( IN IXML_Attr * attr )
{ {
if (attr != NULL) { if( attr != NULL ) {
memset(attr, 0, sizeof (IXML_Attr)); memset( attr, 0, sizeof( IXML_Attr ) );
} }
} }
/*================================================================
void ixmlAttr_free(IN IXML_Attr *attr) * Function: Attr_free
* Frees an attribute node.
* external function.
*
*=================================================================*/
void
ixmlAttr_free( IN IXML_Attr * attr )
{ {
if (attr != NULL) { if( attr != NULL ) {
ixmlNode_free((IXML_Node *)attr); ixmlNode_free( ( IXML_Node * ) attr );
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,173 +1,73 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef IXML_MEMBUF_H
#define IXML_MEMBUF_H
/*!
* \file
*/
#ifndef _IXML_MEMBUF_H
#define _IXML_MEMBUF_H
#include <stdlib.h>
#include "ixml.h" #include "ixml.h"
#define MINVAL( a, b ) ( (a) < (b) ? (a) : (b) )
#include <stdlib.h> /* for size_t */ #define MAXVAL( a, b ) ( (a) > (b) ? (a) : (b) )
#define MINVAL(a, b) ( (a) < (b) ? (a) : (b) )
#define MAXVAL(a, b) ( (a) > (b) ? (a) : (b) )
#define MEMBUF_DEF_SIZE_INC 20 #define MEMBUF_DEF_SIZE_INC 20
/*! typedef struct // ixml_membuf
* \brief The ixml_membuf type.
*/
typedef struct
{ {
char *buf; char *buf;
size_t length; size_t length;
size_t capacity; size_t capacity;
size_t size_inc; size_t size_inc;
} ixml_membuf; } ixml_membuf;
//--------------------------------------------------
//////////////// functions /////////////////////////
//--------------------------------------------------
/*
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
*/
/*! void ixml_membuf_init(INOUT ixml_membuf *m);
* \brief ixml_membuf initialization routine. void ixml_membuf_destroy(INOUT ixml_membuf *m);
*/ int ixml_membuf_assign(INOUT ixml_membuf *m, IN const void *buf,
void ixml_membuf_init( IN size_t buf_len );
/*! [in,out] The memory buffer to initializa. */ int ixml_membuf_assign_str(INOUT ixml_membuf *m, IN const char *c_str );
ixml_membuf *m); int ixml_membuf_append(INOUT ixml_membuf *m, IN const void *buf);
int ixml_membuf_append_str(INOUT ixml_membuf *m, IN const char *c_str);
int ixml_membuf_insert(INOUT ixml_membuf *m, IN const void* buf,
/*! IN size_t buf_len, int index );
* \brief ixml_membuf clearing routine.
*
* The internal buffer is deleted and ixml_membuf_init() is called in the end
* to reinitialize the buffer.
*/
void ixml_membuf_destroy(
/*! [in,out] The memory buffer to clear. */
ixml_membuf *m);
/*!
* \brief Copies the contents o a buffer to the designated ixml_membuf.
*
* The previous contents of the ixml_membuf are destroyed.
*
* \return IXML_SUCCESS if successfull, or the error code returned
* by ixml_membuf_set_size().
*
* \sa ixml_membuf_assign_str().
*/
int ixml_membuf_assign(
/*! [in,out] The memory buffer on which to operate. */
ixml_membuf *m,
/*! [in] The input buffer to copy from. */
const void *buf,
/*! [in] The number of bytes to copy from the input buffer. */
size_t buf_len);
/*!
* \brief Copies a \b NULL terminated string to the ixml_buffer.
*
* This is a convenience function that internally uses ixml_membuf_assign().
*
* \return The return value of ixml_membuf_assign().
*
* \sa ixml_membuf_assign().
*/
int ixml_membuf_assign_str(
/*! [in,out] The memory buffer on which to operate. */
ixml_membuf *m,
/*! [in] The input string to copy from. */
const char *c_str);
/*!
* \brief Appends one byte to the designated ixml_membuffer.
*
* This is a convenience function that internally uses ixml_membuf_insert().
*
* \return The return value of ixml_membuf_insert().
*
* \sa ixml_membuf_insert()
*/
int ixml_membuf_append(
/*! [in,out] The memory buffer on which to operate. */
ixml_membuf *m,
/*! [in] The pointer to the byte to append. */
const void *buf);
/*!
* \brief Appends the contents of a \b NULL terminated string to the designated
* ixml_membuf.
*
* This is a convenience function that internally uses ixml_membuf_insert().
*
* \return The return value of ixml_membuf_insert().
*
* \sa ixml_membuf_insert().
*/
int ixml_membuf_append_str(
/*! [in,out] The memory buffer on which to operate. */
ixml_membuf *m,
/*! [in] The input string to copy from. */
const char *c_str);
/*!
* \brief
*
* \return
* \li 0 if successfull.
* \li IXML_INDEX_SIZE_ERR if the index parameter is out of range.
* \li Or the return code of ixml_membuf_set_size()
*
* \sa ixml_membuf_set_size()
*/
int ixml_membuf_insert(
/*! [in,out] The memory buffer on which to operate. */
ixml_membuf *m,
/*! [in] The pointer to the input buffer. */
const void *buf,
/*! [in] The buffer length. */
size_t buf_len,
/*! [in] The point of insertion relative to the beggining of the
* ixml_membuf internal buffer. */
int index);
#endif /* IXML_MEMBUF_H */
#endif // _IXML_MEMBUF_H

View File

@@ -1,49 +1,41 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef IXMLPARSER_H
#define IXMLPARSER_H
/*!
* \file
*/
#ifndef _IXMLPARSER_H
#define _IXMLPARSER_H
#include "ixml.h" #include "ixml.h"
#include "ixmlmembuf.h" #include "ixmlmembuf.h"
// Parser definitions
/* Parser definitions */
#define QUOT "&quot;" #define QUOT "&quot;"
#define LT "&lt;" #define LT "&lt;"
#define GT "&gt;" #define GT "&gt;"
@@ -52,7 +44,6 @@
#define ESC_HEX "&#x" #define ESC_HEX "&#x"
#define ESC_DEC "&#" #define ESC_DEC "&#"
typedef struct _IXML_NamespaceURI typedef struct _IXML_NamespaceURI
{ {
char *nsURI; char *nsURI;
@@ -78,192 +69,52 @@ typedef enum
eCONTENT, eCONTENT,
} PARSER_STATE; } PARSER_STATE;
typedef struct _Parser typedef struct _Parser
{ {
/*! Data buffer. */ char *dataBuffer; //data buffer
char *dataBuffer; char *curPtr; //ptr to the token parsed
/*! Pointer to the token parsed. */ char *savePtr; //Saves for backup
char *curPtr;
/*! Saves for backup. */
char *savePtr;
ixml_membuf lastElem; ixml_membuf lastElem;
ixml_membuf tokenBuf; ixml_membuf tokenBuf;
IXML_Node *pNeedPrefixNode; IXML_Node *pNeedPrefixNode;
IXML_ElementStack *pCurElement; IXML_ElementStack *pCurElement;
IXML_Node *currentNodePtr; IXML_Node *currentNodePtr;
PARSER_STATE state; PARSER_STATE state;
BOOL bHasTopLevel; BOOL bHasTopLevel;
} Parser; } Parser;
/*!
* \brief Check to see whether name is a valid xml name.
*/
BOOL Parser_isValidXmlName(
/*! [in] The string to be checked. */
const DOMString name);
/*!
* \brief Sets the error character.
*
* If 'c' is 0 (default), the parser is strict about XML encoding:
* invalid UTF-8 sequences or "&" entities are rejected, and the parsing
* aborts.
*
* If 'c' is not 0, the parser is relaxed: invalid UTF-8 characters
* are replaced by this character, and invalid "&" entities are left
* untranslated. The parsing is then allowed to continue.
*/
void Parser_setErrorChar(
/*! [in] The character to become the error character. */
char c);
/*!
* \brief Fees a node contents.
*/
void Parser_freeNodeContent(
/*! [in] The Node to process. */
IXML_Node *IXML_Nodeptr);
int Parser_LoadDocument(IXML_Document **retDoc, const char * xmlFile, BOOL file);
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); int Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr);
void Parser_freeNodeContent( IXML_Node *IXML_Nodeptr);
void Parser_setErrorChar( char c );
void ixmlAttr_free(IXML_Attr *attrNode);
void ixmlAttr_init(IXML_Attr *attrNode); void ixmlAttr_init(IXML_Attr *attrNode);
/*! int ixmlElement_setTagName(IXML_Element *element, const char *tagName);
* \brief Set the given element's tagName.
*
* \return One of the following:
* \li \b IXML_SUCCESS, if successfull.
* \li \b IXML_FAILED, if element of tagname is \b NULL.
* \li \b IXML_INSUFFICIENT_MEMORY, if there is no memory to allocate the
* buffer for the element's tagname.
*/
int ixmlElement_setTagName(
/*! [in] The element to change the tagname. */
IXML_Element *element,
/*! [in] The new tagName for the element. */
const char *tagName);
void ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap);
int ixmlNamedNodeMap_addToNamedNodeMap(IXML_NamedNodeMap **nnMap, IXML_Node *add);
/*! void ixmlNode_init(IXML_Node *IXML_Nodeptr);
* \brief Initializes a NamedNodeMap object. BOOL ixmlNode_compare(IXML_Node *srcIXML_Node, IXML_Node *destIXML_Node);
*/
void ixmlNamedNodeMap_init(
/*! [in] The named node map to process. */
IXML_NamedNodeMap *nnMap);
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);
* \brief Add a node to a NamedNodeMap. int ixmlNode_setNodeName( IXML_Node* node, const DOMString qualifiedName);
*
* \return IXML_SUCCESS or failure.
*/
int ixmlNamedNodeMap_addToNamedNodeMap(
/* [in] The named node map. */
IXML_NamedNodeMap **nnMap,
/* [in] The node to add. */
IXML_Node *add);
/*! void ixmlNodeList_init(IXML_NodeList *nList);
* \brief Add a node to nodelist. int ixmlNodeList_addToNodeList(IXML_NodeList **nList, IXML_Node *add);
*/
int ixmlNodeList_addToNodeList(
/*! [in] The pointer to the nodelist. */
IXML_NodeList **nList,
/*! [in] The node to add. */
IXML_Node *add);
#endif // _IXMLPARSER_H
/*!
* \brief Intializes a node.
*/
void ixmlNode_init(
/*! [in] The \b Node to iniatialize. */
IN IXML_Node *nodeptr);
/*!
* \brief Compare two nodes to see whether they are the same node.
* Parent, sibling and children node are ignored.
*
* \return
* \li TRUE, the two nodes are the same.
* \li FALSE, the two nodes are not the same.
*/
BOOL ixmlNode_compare(
/*! [in] The first \b Node. */
IXML_Node *srcNode,
/*! [in] The second \b Node. */
IXML_Node *destNode);
/*!
* \brief Returns a nodeList of all descendant Elements with a given tagName,
* in the order in which they are encountered in a traversal of this element
* tree.
*/
void ixmlNode_getElementsByTagName(
/*! [in] The \b Node tree. */
IXML_Node *n,
/*! [in] The tag name to match. */
const char *tagname,
/*! [out] The output \b NodeList. */
IXML_NodeList **list);
/*!
* \brief Returns a nodeList of all the descendant Elements with a given local
* name and namespace URI in the order in which they are encountered in a
* preorder traversal of this Elememt tree.
*/
void ixmlNode_getElementsByTagNameNS(
/*! [in] The \b Element tree. */
IXML_Node *n,
/*! [in] The name space to match. */
const char *namespaceURI,
/*! [in] The local name to match. */
const char *localName,
/*! [out] The output \b NodeList. */
IXML_NodeList **list);
/*!
* \brief
*
* \return
*/
int ixmlNode_setNodeName(
/*! [in] The \b Node. */
IXML_Node *node,
/*! [in] . */
const DOMString qualifiedName);
/*!
* \brief
*
* \return
*/
int ixmlNode_setNodeProperties(
/*! [in] . */
IXML_Node *destNode,
/*! [in] . */
IXML_Node *src);
/*!
* \brief Initializes a nodelist
*/
void ixmlNodeList_init(
/*! [in,out] The \b NodeList to initialize. */
IXML_NodeList *nList);
#endif /* IXMLPARSER_H */

View File

@@ -1,469 +1,531 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/*!
* \file
*/
#include "ixmldebug.h"
#include "ixmlmembuf.h" #include "ixmlmembuf.h"
#include "ixmlparser.h" #include "ixmlparser.h"
/*================================================================
#include <stdlib.h> /* for free() */ * copy_with_escape
#include <string.h> *
*
*=================================================================*/
/*! static void
* \brief Appends a string to a buffer, substituting some characters by escape copy_with_escape( INOUT ixml_membuf * buf,
* sequences. IN const char *p )
*/
static void copy_with_escape(
/*! [in,out] The input/output buffer. */
ixml_membuf *buf,
/*! [in] The string to copy from. */
const char *p)
{ {
int i; int i;
int plen; int plen;
if (p == NULL) { if( p == NULL )
return; return;
}
plen = strlen( p ); plen = strlen( p );
for (i = 0; i < plen; i++) { for( i = 0; i < plen; i++ ) {
switch (p[i]) { switch ( p[i] ) {
case '<': case '<':
ixml_membuf_append_str(buf, "&lt;"); ixml_membuf_append_str( buf, "&lt;" );
break; break;
case '>': case '>':
ixml_membuf_append_str(buf, "&gt;"); ixml_membuf_append_str( buf, "&gt;" );
break; break;
case '&': case '&':
ixml_membuf_append_str(buf, "&amp;"); ixml_membuf_append_str( buf, "&amp;" );
break; break;
case '\'': case '\'':
ixml_membuf_append_str(buf, "&apos;"); ixml_membuf_append_str( buf, "&apos;" );
break; break;
case '\"': case '\"':
ixml_membuf_append_str(buf, "&quot;"); ixml_membuf_append_str( buf, "&quot;" );
break; break;
default: default:
ixml_membuf_append(buf, &p[i]); ixml_membuf_append( buf, &p[i] );
break;
} }
} }
} }
/*================================================================
/*! * ixmlPrintDomTreeRecursive
* \brief Recursive function to print all the node in a tree. * It is a recursive function to print all the node in a tree.
* Internal to parser only. * Internal to parser only.
*/ *
static void ixmlPrintDomTreeRecursive( *=================================================================*/
/*! [in] \todo documentation. */ void
IXML_Node *nodeptr, ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr,
/*! [in] \todo documentation. */ IN ixml_membuf * buf )
ixml_membuf *buf)
{ {
const char *nodeName = NULL; const char *nodeName = NULL;
const char *nodeValue = NULL; const char *nodeValue = NULL;
IXML_Node *child = NULL, IXML_Node *child = NULL,
*sibling = NULL; *sibling = NULL;
if (nodeptr != NULL) { if( nodeptr != NULL ) {
nodeName = (const char *)ixmlNode_getNodeName(nodeptr); nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
nodeValue = ixmlNode_getNodeValue(nodeptr); nodeValue = ixmlNode_getNodeValue( nodeptr );
switch ( ixmlNode_getNodeType( nodeptr ) ) {
switch (ixmlNode_getNodeType(nodeptr)) {
case eTEXT_NODE: case eTEXT_NODE:
copy_with_escape(buf, nodeValue); copy_with_escape( buf, nodeValue );
break; break;
case eCDATA_SECTION_NODE: case eCDATA_SECTION_NODE:
ixml_membuf_append_str(buf, "<![CDATA["); ixml_membuf_append_str( buf, "<![CDATA[" );
ixml_membuf_append_str(buf, nodeValue); ixml_membuf_append_str( buf, nodeValue );
ixml_membuf_append_str(buf, "]]>"); ixml_membuf_append_str( buf, "]]>" );
break; break;
case ePROCESSING_INSTRUCTION_NODE: case ePROCESSING_INSTRUCTION_NODE:
ixml_membuf_append_str(buf, "<?"); ixml_membuf_append_str( buf, "<?" );
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
ixml_membuf_append_str(buf, " "); ixml_membuf_append_str( buf, " " );
copy_with_escape(buf, nodeValue); copy_with_escape( buf, nodeValue );
ixml_membuf_append_str(buf, "?>\n"); ixml_membuf_append_str( buf, "?>\n" );
break; break;
case eDOCUMENT_NODE: case eDOCUMENT_NODE:
ixmlPrintDomTreeRecursive( ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild
ixmlNode_getFirstChild(nodeptr), buf); ( nodeptr ), buf );
break; break;
case eATTRIBUTE_NODE: case eATTRIBUTE_NODE:
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
ixml_membuf_append_str(buf, "=\""); ixml_membuf_append_str( buf, "=\"" );
copy_with_escape(buf, nodeValue); copy_with_escape( buf, nodeValue );
ixml_membuf_append_str(buf, "\""); ixml_membuf_append_str( buf, "\"" );
if (nodeptr->nextSibling != NULL) {
ixml_membuf_append_str(buf, " "); if( nodeptr->nextSibling != NULL ) {
ixmlPrintDomTreeRecursive(nodeptr->nextSibling, buf); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf );
} }
break; break;
case eELEMENT_NODE: case eELEMENT_NODE:
ixml_membuf_append_str(buf, "<"); ixml_membuf_append_str( buf, "<" );
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
if (nodeptr->firstAttr != NULL) {
ixml_membuf_append_str(buf, " "); if( nodeptr->firstAttr != NULL ) {
ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
} }
child = ixmlNode_getFirstChild(nodeptr);
if (child != NULL && child = ixmlNode_getFirstChild( nodeptr );
ixmlNode_getNodeType(child) == eELEMENT_NODE) { if( ( child != NULL )
ixml_membuf_append_str(buf, ">\r\n"); && ( ixmlNode_getNodeType( child ) ==
eELEMENT_NODE ) ) {
ixml_membuf_append_str( buf, ">\r\n" );
} else { } else {
ixml_membuf_append_str(buf, ">"); ixml_membuf_append_str( buf, ">" );
} }
// output the children // output the children
ixmlPrintDomTreeRecursive( ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild
ixmlNode_getFirstChild(nodeptr), buf); ( nodeptr ), buf );
// Done with children. Output the end tag. // Done with children. Output the end tag.
ixml_membuf_append_str(buf, "</"); ixml_membuf_append_str( buf, "</" );
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
sibling = ixmlNode_getNextSibling(nodeptr); sibling = ixmlNode_getNextSibling( nodeptr );
if (sibling != NULL && if( sibling != NULL
ixmlNode_getNodeType(sibling) == eTEXT_NODE) { && ixmlNode_getNodeType( sibling ) == eTEXT_NODE ) {
ixml_membuf_append_str( buf, ">" ); ixml_membuf_append_str( buf, ">" );
} else { } else {
ixml_membuf_append_str( buf, ">\r\n" ); ixml_membuf_append_str( buf, ">\r\n" );
} }
ixmlPrintDomTreeRecursive( ixmlPrintDomTreeRecursive( ixmlNode_getNextSibling
ixmlNode_getNextSibling(nodeptr), buf); ( nodeptr ), buf );
break; break;
default: default:
IxmlPrintf(__FILE__, __LINE__, "ixmlPrintDomTreeRecursive",
"Warning, unknown node type %d\n",
ixmlNode_getNodeType(nodeptr));
break; break;
} }
} }
} }
/*================================================================
/*! * ixmlPrintDomTree
* \brief Print a DOM tree. * Print a DOM tree.
* * Element, and Attribute nodes are handled differently.
* Element, and Attribute nodes are handled differently. We don't want to print * We don't want to print the Element and Attribute nodes' sibling.
* the Element and Attribute nodes' sibling. * External function.
*/ *
static void ixmlPrintDomTree( *=================================================================*/
/*! [in] \todo documentation. */ void
IXML_Node *nodeptr, ixmlPrintDomTree( IN IXML_Node * nodeptr,
/*! [in] \todo documentation. */ IN ixml_membuf * buf )
ixml_membuf *buf)
{ {
const char *nodeName = NULL; const char *nodeName = NULL;
const char *nodeValue = NULL; const char *nodeValue = NULL;
IXML_Node *child = NULL; IXML_Node *child = NULL;
if (nodeptr == NULL || buf == NULL) { if( ( nodeptr == NULL ) || ( buf == NULL ) ) {
return; return;
} }
nodeName = (const char *)ixmlNode_getNodeName(nodeptr); nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
nodeValue = ixmlNode_getNodeValue(nodeptr); nodeValue = ixmlNode_getNodeValue( nodeptr );
switch (ixmlNode_getNodeType(nodeptr)) {
switch ( ixmlNode_getNodeType( nodeptr ) ) {
case eTEXT_NODE: case eTEXT_NODE:
case eCDATA_SECTION_NODE: case eCDATA_SECTION_NODE:
case ePROCESSING_INSTRUCTION_NODE: case ePROCESSING_INSTRUCTION_NODE:
case eDOCUMENT_NODE: case eDOCUMENT_NODE:
ixmlPrintDomTreeRecursive(nodeptr, buf); ixmlPrintDomTreeRecursive( nodeptr, buf );
break; break;
case eATTRIBUTE_NODE: case eATTRIBUTE_NODE:
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
ixml_membuf_append_str(buf, "=\""); ixml_membuf_append_str( buf, "=\"" );
copy_with_escape(buf, nodeValue); copy_with_escape( buf, nodeValue );
ixml_membuf_append_str(buf, "\""); ixml_membuf_append_str( buf, "\"" );
break; break;
case eELEMENT_NODE: case eELEMENT_NODE:
ixml_membuf_append_str(buf, "<"); ixml_membuf_append_str( buf, "<" );
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
if (nodeptr->firstAttr != NULL) {
ixml_membuf_append_str(buf, " "); if( nodeptr->firstAttr != NULL ) {
ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
} }
child = ixmlNode_getFirstChild(nodeptr);
if (child != NULL && child = ixmlNode_getFirstChild( nodeptr );
ixmlNode_getNodeType(child) == eELEMENT_NODE) { if( ( child != NULL )
ixml_membuf_append_str(buf, ">\r\n"); && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) {
ixml_membuf_append_str( buf, ">\r\n" );
} else { } else {
ixml_membuf_append_str(buf, ">"); ixml_membuf_append_str( buf, ">" );
} }
// output the children // output the children
ixmlPrintDomTreeRecursive( ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild( nodeptr ),
ixmlNode_getFirstChild(nodeptr), buf); buf );
// Done with children. Output the end tag. // Done with children. Output the end tag.
ixml_membuf_append_str(buf, "</"); ixml_membuf_append_str( buf, "</" );
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
ixml_membuf_append_str(buf, ">\r\n"); ixml_membuf_append_str( buf, ">\r\n" );
break; break;
default: default:
IxmlPrintf(__FILE__, __LINE__, "ixmlPrintDomTree",
"Warning, unknown node type %d\n",
ixmlNode_getNodeType(nodeptr));
break; break;
} }
} }
/*================================================================
/*! * ixmlDomTreetoString
* \brief Converts a DOM tree into a text string. * Converts a DOM tree into a text string
* * Element, and Attribute nodes are handled differently.
* Element, and Attribute nodes are handled differently. We don't want to print * We don't want to print the Element and Attribute nodes' sibling.
* the Element and Attribute nodes' sibling. * External function.
*/ *
static void ixmlDomTreetoString( *=================================================================*/
/*! [in] \todo documentation. */ void
IXML_Node *nodeptr, ixmlDomTreetoString( IN IXML_Node * nodeptr,
/*! [in] \todo documentation. */ IN ixml_membuf * buf )
ixml_membuf *buf)
{ {
const char *nodeName = NULL; const char *nodeName = NULL;
const char *nodeValue = NULL; const char *nodeValue = NULL;
IXML_Node *child = NULL; IXML_Node *child = NULL;
if (nodeptr == NULL || buf == NULL) { if( ( nodeptr == NULL ) || ( buf == NULL ) ) {
return; return;
} }
nodeName = (const char *)ixmlNode_getNodeName(nodeptr); nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
nodeValue = ixmlNode_getNodeValue(nodeptr); nodeValue = ixmlNode_getNodeValue( nodeptr );
switch ( ixmlNode_getNodeType( nodeptr ) ) {
switch (ixmlNode_getNodeType(nodeptr)) {
case eTEXT_NODE: case eTEXT_NODE:
case eCDATA_SECTION_NODE: case eCDATA_SECTION_NODE:
case ePROCESSING_INSTRUCTION_NODE: case ePROCESSING_INSTRUCTION_NODE:
case eDOCUMENT_NODE: case eDOCUMENT_NODE:
ixmlPrintDomTreeRecursive(nodeptr, buf); ixmlPrintDomTreeRecursive( nodeptr, buf );
break; break;
case eATTRIBUTE_NODE: case eATTRIBUTE_NODE:
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
ixml_membuf_append_str(buf, "=\""); ixml_membuf_append_str( buf, "=\"" );
copy_with_escape(buf, nodeValue ); copy_with_escape( buf, nodeValue );
ixml_membuf_append_str(buf, "\""); ixml_membuf_append_str( buf, "\"" );
break; break;
case eELEMENT_NODE: case eELEMENT_NODE:
ixml_membuf_append_str(buf, "<"); ixml_membuf_append_str( buf, "<" );
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
if (nodeptr->firstAttr != NULL) {
ixml_membuf_append_str(buf, " "); if( nodeptr->firstAttr != NULL ) {
ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
} }
child = ixmlNode_getFirstChild(nodeptr);
if (child != NULL && child = ixmlNode_getFirstChild( nodeptr );
ixmlNode_getNodeType(child) == eELEMENT_NODE) { if( ( child != NULL )
ixml_membuf_append_str(buf, ">"); && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) {
ixml_membuf_append_str( buf, ">" );
} else { } else {
ixml_membuf_append_str(buf, ">"); ixml_membuf_append_str( buf, ">" );
} }
// output the children // output the children
ixmlPrintDomTreeRecursive(ixmlNode_getFirstChild(nodeptr), buf); ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild( nodeptr ),
buf );
// Done with children. Output the end tag. // Done with children. Output the end tag.
ixml_membuf_append_str(buf, "</"); ixml_membuf_append_str( buf, "</" );
ixml_membuf_append_str(buf, nodeName); ixml_membuf_append_str( buf, nodeName );
ixml_membuf_append_str(buf, ">"); ixml_membuf_append_str( buf, ">" );
break; break;
default: default:
IxmlPrintf(__FILE__, __LINE__, "ixmlPrintDomTreeRecursive",
"Warning, unknown node type %d\n",
ixmlNode_getNodeType(nodeptr));
break; break;
} }
} }
/*================================================================
int ixmlLoadDocumentEx(const char *xmlFile, IXML_Document **doc) * ixmlLoadDocumentEx
* Parses the given file, and returns the DOM tree from it.
* External function.
*
*=================================================================*/
int
ixmlLoadDocumentEx( IN const char *xmlFile,
IXML_Document ** doc )
{ {
if (xmlFile == NULL || doc == NULL) {
if( ( xmlFile == NULL ) || ( doc == NULL ) ) {
return IXML_INVALID_PARAMETER; return IXML_INVALID_PARAMETER;
} }
return Parser_LoadDocument(doc, xmlFile, TRUE); return Parser_LoadDocument( doc, xmlFile, TRUE );
} }
/*================================================================
IXML_Document *ixmlLoadDocument(const char *xmlFile) * ixmlLoadDocument
* Parses the given file, and returns the DOM tree from it.
* External function.
*
*=================================================================*/
IXML_Document *
ixmlLoadDocument( IN const char *xmlFile )
{ {
IXML_Document *doc = NULL; IXML_Document *doc = NULL;
ixmlLoadDocumentEx(xmlFile, &doc); ixmlLoadDocumentEx( xmlFile, &doc );
return doc; return doc;
} }
/*================================================================
* ixmlPrintDocument
* Prints entire document, prepending XML prolog first.
* Puts lots of white spaces.
* External function.
*
*=================================================================*/
DOMString ixmlPrintDocument(IXML_Document *doc) DOMString
ixmlPrintDocument(IXML_Document *doc)
{ {
IXML_Node* rootNode = (IXML_Node *)doc; IXML_Node* rootNode = ( IXML_Node * )doc;
ixml_membuf memBuf; ixml_membuf memBuf;
ixml_membuf *buf = &memBuf; ixml_membuf *buf = &memBuf;
if(rootNode == NULL) { if( rootNode == NULL ) {
return NULL; return NULL;
} }
ixml_membuf_init(buf); ixml_membuf_init( buf );
ixml_membuf_append_str(buf, "<?xml version=\"1.0\"?>\r\n"); ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" );
ixmlPrintDomTree(rootNode, buf); ixmlPrintDomTree( rootNode, buf );
return buf->buf; return buf->buf;
} }
/*================================================================
DOMString ixmlPrintNode(IXML_Node *node) * ixmlPrintNode
* Print DOM tree under node. Puts lots of white spaces
* External function.
*
*=================================================================*/
DOMString
ixmlPrintNode( IN IXML_Node * node )
{ {
ixml_membuf memBuf; ixml_membuf memBuf;
ixml_membuf *buf = &memBuf; ixml_membuf *buf = &memBuf;
if (node == NULL) { if( node == NULL ) {
return NULL; return NULL;
} }
ixml_membuf_init(buf); ixml_membuf_init( buf );
ixmlPrintDomTree(node, buf); ixmlPrintDomTree( node, buf );
return buf->buf; return buf->buf;
} }
/*================================================================
* ixmlDocumenttoString
* converts DOM tree under node to text string,
* prepending XML prolog first.
* External function.
*
*=================================================================*/
DOMString ixmlDocumenttoString(IXML_Document *doc) DOMString
ixmlDocumenttoString(IXML_Document *doc)
{ {
IXML_Node* rootNode = (IXML_Node *)doc; IXML_Node* rootNode = ( IXML_Node * )doc;
ixml_membuf memBuf; ixml_membuf memBuf;
ixml_membuf *buf = &memBuf; ixml_membuf *buf = &memBuf;
if(rootNode == NULL) { if( rootNode == NULL ) {
return NULL; return NULL;
} }
ixml_membuf_init(buf); ixml_membuf_init( buf );
ixml_membuf_append_str(buf, "<?xml version=\"1.0\"?>\r\n"); ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" );
ixmlDomTreetoString(rootNode, buf); ixmlDomTreetoString( rootNode, buf );
return buf->buf; return buf->buf;
} }
/*================================================================
DOMString ixmlNodetoString(IXML_Node *node) * ixmlNodetoString
* converts DOM tree under node to text string
* External function.
*
*=================================================================*/
DOMString
ixmlNodetoString( IN IXML_Node * node )
{ {
ixml_membuf memBuf; ixml_membuf memBuf;
ixml_membuf *buf = &memBuf; ixml_membuf *buf = &memBuf;
if (node == NULL) { if( node == NULL ) {
return NULL; return NULL;
} }
ixml_membuf_init(buf); ixml_membuf_init( buf );
ixmlDomTreetoString(node, buf); ixmlDomTreetoString( node, buf );
return buf->buf; return buf->buf;
}
/*================================================================
* ixmlRelaxParser
* Makes the XML parser more tolerant to malformed text.
* External function.
*
*=================================================================*/
void
ixmlRelaxParser(char errorChar)
{
Parser_setErrorChar( errorChar );
} }
void ixmlRelaxParser(char errorChar) /*================================================================
* ixmlParseBufferEx
* Parse xml file stored in buffer.
* External function.
*
*=================================================================*/
int
ixmlParseBufferEx( IN const char *buffer,
IXML_Document ** retDoc )
{ {
Parser_setErrorChar(errorChar);
}
if( ( buffer == NULL ) || ( retDoc == NULL ) ) {
int ixmlParseBufferEx(const char *buffer, IXML_Document **retDoc)
{
if (buffer == NULL || retDoc == NULL) {
return IXML_INVALID_PARAMETER; return IXML_INVALID_PARAMETER;
} }
if (buffer[0] == '\0') { if( buffer[0] == '\0' ) {
return IXML_INVALID_PARAMETER; return IXML_INVALID_PARAMETER;
} }
return Parser_LoadDocument(retDoc, buffer, FALSE); return Parser_LoadDocument( retDoc, buffer, FALSE );
} }
/*================================================================
IXML_Document *ixmlParseBuffer(const char *buffer) * ixmlParseBuffer
* Parse xml file stored in buffer.
* External function.
*
*=================================================================*/
IXML_Document *
ixmlParseBuffer( IN const char *buffer )
{ {
IXML_Document *doc = NULL; IXML_Document *doc = NULL;
ixmlParseBufferEx(buffer, &doc); ixmlParseBufferEx( buffer, &doc );
return doc; return doc;
} }
/*================================================================
DOMString ixmlCloneDOMString(const DOMString src) * ixmlCloneDOMString
* Clones a DOM String.
* External function.
*
*=================================================================*/
DOMString
ixmlCloneDOMString( IN const DOMString src )
{ {
if (src == NULL) { if( src == NULL ) {
return NULL; return NULL;
} }
return strdup(src); return ( strdup( src ) );
} }
/*================================================================
void ixmlFreeDOMString(DOMString buf) * ixmlFreeDOMString
* Frees a DOM String.
* External function.
*
*=================================================================*/
void
ixmlFreeDOMString( IN DOMString buf )
{ {
if (buf != NULL) { if( buf != NULL ) {
free(buf); free( buf );
} }
} }

View File

@@ -1,70 +0,0 @@
/*!
* \file
*/
#include "autoconfig.h"
#include "ixmldebug.h"
#include <stdarg.h>
#include <stdio.h>
#ifdef DEBUG
void IxmlPrintf(
const char *DbgFileName,
int DbgLineNo,
const char *FunctionName,
const char *FmtStr,
...)
{
va_list ArgList;
FILE *fp = stdout;
fprintf(fp, "(%s::%s), line %d", DbgFileName, FunctionName, DbgLineNo);
if (FmtStr) {
fprintf(fp, ": ");
va_start(ArgList, FmtStr);
vfprintf(fp, FmtStr, ArgList);
fflush(fp);
va_end(ArgList);
} else {
fprintf(fp, "\n");
}
}
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);
IxmlPrintf(__FILE__, __LINE__, "printNodes",
"DEPTH-%2d-IXML_Node Type %d, "
"IXML_Node Name: %s, IXML_Node Value: %s\n",
depth, NodeType, NodeName, NodeValue);
}
}
#endif

View File

@@ -1,112 +1,109 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/*!
* \file
*/
#include "ixmlmembuf.h"
#include "ixml.h"
#include <assert.h> #include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "ixmlmembuf.h"
#include "ixml.h"
/*================================================================
/*! * ixml_membuf_set_size
* \brief Increases or decreases buffer capacity so that at least 'new_length' *
* bytes can be stored. * Increases or decreases buffer cap so that at least
* * 'new_length' bytes can be stored
* On error, m's fields do not change. *
* * On error, m's fields do not change.
* \return *
* \li UPNP_E_SUCCESS * returns:
* \li UPNP_E_OUTOF_MEMORY * UPNP_E_SUCCESS
*/ * UPNP_E_OUTOF_MEMORY
static int ixml_membuf_set_size( *
/*! [in,out] The memory buffer. */ *=================================================================*/
INOUT ixml_membuf *m, static int
/*! [in] The new lenght. */ ixml_membuf_set_size( INOUT ixml_membuf * m,
IN size_t new_length) IN size_t new_length )
{ {
size_t diff; size_t diff;
size_t alloc_len; size_t alloc_len;
char *temp_buf; char *temp_buf;
if (new_length >= m->length) { if( new_length >= m->length ) // increase length
/* increase length */ {
/* need more mem? */ // need more mem?
if (new_length <= m->capacity) { if( new_length <= m->capacity ) {
/* have enough mem; done */ return 0; // have enough mem; done
return 0;
} }
diff = new_length - m->length; diff = new_length - m->length;
alloc_len = MAXVAL(m->size_inc, diff) + m->capacity; alloc_len = MAXVAL( m->size_inc, diff ) + m->capacity;
} else { } else // decrease length
// decrease length {
assert(new_length <= m->length); assert( new_length <= m->length );
// if diff is 0..m->size_inc, don't free // if diff is 0..m->size_inc, don't free
if ((m->capacity - new_length) <= m->size_inc) { if( ( m->capacity - new_length ) <= m->size_inc ) {
return 0; return 0;
} }
alloc_len = new_length + m->size_inc; alloc_len = new_length + m->size_inc;
} }
assert(alloc_len >= new_length); assert( alloc_len >= new_length );
temp_buf = realloc(m->buf, alloc_len + 1); temp_buf = realloc( m->buf, alloc_len + 1 );
if (temp_buf == NULL) { if( temp_buf == NULL ) {
/* try smaller size */ // try smaller size
alloc_len = new_length; alloc_len = new_length;
temp_buf = realloc(m->buf, alloc_len + 1); temp_buf = realloc( m->buf, alloc_len + 1 );
if (temp_buf == NULL) {
if( temp_buf == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
} }
/* save */ // save
m->buf = temp_buf; m->buf = temp_buf;
m->capacity = alloc_len; m->capacity = alloc_len;
return 0; return 0;
} }
/*================================================================
void ixml_membuf_init(ixml_membuf *m) * membuffer_init
*
*
*=================================================================*/
void
ixml_membuf_init( INOUT ixml_membuf * m )
{ {
assert(m != NULL); assert( m != NULL );
m->size_inc = MEMBUF_DEF_SIZE_INC; m->size_inc = MEMBUF_DEF_SIZE_INC;
m->buf = NULL; m->buf = NULL;
@@ -114,105 +111,126 @@ void ixml_membuf_init(ixml_membuf *m)
m->capacity = 0; m->capacity = 0;
} }
/*================================================================
void ixml_membuf_destroy(ixml_membuf *m) * membuffer_destroy
*
*
*=================================================================*/
void
ixml_membuf_destroy( INOUT ixml_membuf * m )
{ {
if (m == NULL) { if( m == NULL ) {
return; return;
} }
free(m->buf); free( m->buf );
ixml_membuf_init(m); ixml_membuf_init( m );
} }
/*================================================================
int ixml_membuf_assign( * ixml_membuf_assign
ixml_membuf *m, *
const void *buf, *
size_t buf_len) *=================================================================*/
int
ixml_membuf_assign( INOUT ixml_membuf * m,
IN const void *buf,
IN size_t buf_len )
{ {
int return_code; int return_code;
assert(m != NULL); assert( m != NULL );
// set value to null // set value to null
if (buf == NULL) { if( buf == NULL ) {
ixml_membuf_destroy(m); ixml_membuf_destroy( m );
return IXML_SUCCESS; return IXML_SUCCESS;
} }
// alloc mem // alloc mem
return_code = ixml_membuf_set_size(m, buf_len); return_code = ixml_membuf_set_size( m, buf_len );
if (return_code != 0) { if( return_code != 0 ) {
return return_code; return return_code;
} }
// copy // copy
memcpy(m->buf, buf, buf_len); memcpy( m->buf, buf, buf_len );
m->buf[buf_len] = 0; // null-terminate
// null-terminate
m->buf[buf_len] = 0;
m->length = buf_len; m->length = buf_len;
return IXML_SUCCESS; return IXML_SUCCESS;
} }
/*================================================================
int ixml_membuf_assign_str( * ixml_membuf_assign_str
ixml_membuf *m, *
const char *c_str) *
*=================================================================*/
int
ixml_membuf_assign_str( INOUT ixml_membuf * m,
IN const char *c_str )
{ {
return ixml_membuf_assign(m, c_str, strlen(c_str)); return ixml_membuf_assign( m, c_str, strlen( c_str ) );
} }
/*================================================================
int ixml_membuf_append( * ixml_membuf_append
INOUT ixml_membuf *m, *
IN const void *buf) *
*=================================================================*/
int
ixml_membuf_append( INOUT ixml_membuf * m,
IN const void *buf )
{ {
assert(m != NULL); assert( m != NULL );
return ixml_membuf_insert(m, buf, 1, m->length); return ixml_membuf_insert( m, buf, 1, m->length );
} }
/*================================================================
int ixml_membuf_append_str( * ixml_membuf_append_str
INOUT ixml_membuf *m, *
IN const char *c_str) *
*=================================================================*/
int
ixml_membuf_append_str( INOUT ixml_membuf * m,
IN const char *c_str )
{ {
return ixml_membuf_insert(m, c_str, strlen(c_str), m->length); return ixml_membuf_insert( m, c_str, strlen( c_str ), m->length );
} }
/*================================================================
int ixml_membuf_insert( * ixml_membuf_insert
INOUT ixml_membuf *m, *
*
*=================================================================*/
int
ixml_membuf_insert( INOUT ixml_membuf * m,
IN const void *buf, IN const void *buf,
IN size_t buf_len, IN size_t buf_len,
int index) int index )
{ {
int return_code = 0; int return_code;
assert(m != NULL); assert( m != NULL );
if (index < 0 || index > (int)m->length) { if( index < 0 || index > ( int )m->length )
return IXML_INDEX_SIZE_ERR; return IXML_INDEX_SIZE_ERR;
}
if (buf == NULL || buf_len == 0) { if( buf == NULL || buf_len == 0 ) {
return 0; return 0;
} }
/* alloc mem */ // alloc mem
return_code = ixml_membuf_set_size(m, m->length + buf_len); return_code = ixml_membuf_set_size( m, m->length + buf_len );
if (return_code != 0) { if( return_code != 0 ) {
return return_code; return return_code;
} }
/* insert data */ // insert data
/* move data to right of insertion point */ // move data to right of insertion point
memmove(m->buf + index + buf_len, m->buf + index, m->length - index); memmove( m->buf + index + buf_len, m->buf + index, m->length - index );
memcpy(m->buf + index, buf, buf_len); memcpy( m->buf + index, buf, buf_len );
m->length += buf_len; m->length += buf_len;
/* Null terminate */ m->buf[m->length] = 0; // null-terminate
m->buf[m->length] = 0;
return 0; return 0;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,70 +1,62 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/*!
* \file
*/
#include "ixmlparser.h" #include "ixmlparser.h"
/*================================================================
#include <assert.h> * NamedNodeMap_getItemNumber
#include <stdlib.h> /* for free(), malloc() */ * return the item number of a item in NamedNodeMap.
#include <string.h> * Internal to parser only.
* Parameters:
* name: the name of the item to find
/*! *
* \brief Return the item number of a item in NamedNodeMap. *=================================================================*/
*/ unsigned long
static unsigned long ixmlNamedNodeMap_getItemNumber( ixmlNamedNodeMap_getItemNumber( IN IXML_NamedNodeMap * nnMap,
/*! [in] The named node map to process. */ IN const char *name )
IN IXML_NamedNodeMap *nnMap,
/*! [in] The name of the item to find. */
IN const char *name)
{ {
IXML_Node *tempNode; IXML_Node *tempNode;
unsigned long returnItemNo = 0; unsigned long returnItemNo = 0;
assert(nnMap != NULL && name != NULL); assert( nnMap != NULL && name != NULL );
if (nnMap == NULL || name == NULL) { if( ( nnMap == NULL ) || ( name == NULL ) ) {
return IXML_INVALID_ITEM_NUMBER; return IXML_INVALID_ITEM_NUMBER;
} }
tempNode = nnMap->nodeItem; tempNode = nnMap->nodeItem;
while (tempNode != NULL) { while( tempNode != NULL ) {
if (strcmp(name, tempNode->nodeName) == 0) { if( strcmp( name, tempNode->nodeName ) == 0 ) {
return returnItemNo; return returnItemNo;
} }
tempNode = tempNode->nextSibling; tempNode = tempNode->nextSibling;
returnItemNo++; returnItemNo++;
} }
@@ -72,117 +64,173 @@ static unsigned long ixmlNamedNodeMap_getItemNumber(
return IXML_INVALID_ITEM_NUMBER; return IXML_INVALID_ITEM_NUMBER;
} }
/*================================================================
void ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap) * NamedNodeMap_init
* Initializes a NamedNodeMap object.
* External function.
*
*=================================================================*/
void
ixmlNamedNodeMap_init( IN IXML_NamedNodeMap * nnMap )
{ {
assert(nnMap != NULL); assert( nnMap != NULL );
memset( nnMap, 0, sizeof( IXML_NamedNodeMap ) );
memset(nnMap, 0, sizeof (IXML_NamedNodeMap));
} }
/*================================================================
IXML_Node *ixmlNamedNodeMap_getNamedItem( * NamedNodeMap_getNamedItem
IXML_NamedNodeMap *nnMap, * Retrieves a node specified by name.
const DOMString name) * External function.
*
* Parameter:
* name: type nodeName of a node to retrieve.
*
* Return Value:
* A Node with the specified nodeName, or null if it
* does not identify any node in this map.
*
*=================================================================*/
IXML_Node *
ixmlNamedNodeMap_getNamedItem( IN IXML_NamedNodeMap * nnMap,
IN const char *name )
{ {
long index; long index;
if (nnMap == NULL || name == NULL) { if( ( nnMap == NULL ) || ( name == NULL ) ) {
return NULL; return NULL;
} }
index = ixmlNamedNodeMap_getItemNumber(nnMap, name); index = ixmlNamedNodeMap_getItemNumber( nnMap, name );
if (index == IXML_INVALID_ITEM_NUMBER) { if( index == IXML_INVALID_ITEM_NUMBER ) {
return NULL; return NULL;
} else { } else {
return ixmlNamedNodeMap_item(nnMap, (unsigned long)index); return ( ixmlNamedNodeMap_item( nnMap, ( unsigned long )index ) );
} }
} }
/*================================================================
IXML_Node *ixmlNamedNodeMap_item( * NamedNodeMap_item
IN IXML_NamedNodeMap *nnMap, * Returns the indexth item in the map. If index is greater than or
* equal to the number of nodes in this map, this returns null.
* External function.
*
* Parameter:
* index: index into this map.
*
* Return Value:
* The node at the indexth position in the map, or null if that is
* not a valid index.
*
*=================================================================*/
IXML_Node *
ixmlNamedNodeMap_item( IN IXML_NamedNodeMap * nnMap,
IN unsigned long index ) IN unsigned long index )
{ {
IXML_Node *tempNode; IXML_Node *tempNode;
unsigned int i; unsigned int i;
if (nnMap == NULL) { if( nnMap == NULL ) {
return NULL; return NULL;
} }
if (index > ixmlNamedNodeMap_getLength(nnMap) - 1) { if( index > ixmlNamedNodeMap_getLength( nnMap ) - 1 ) {
return NULL; return NULL;
} }
tempNode = nnMap->nodeItem; tempNode = nnMap->nodeItem;
for (i = 0; i < index && tempNode != NULL; ++i) { for( i = 0; i < index && tempNode != NULL; ++i ) {
tempNode = tempNode->nextSibling; tempNode = tempNode->nextSibling;
} }
return tempNode; return tempNode;
} }
/*================================================================
unsigned long ixmlNamedNodeMap_getLength(IXML_NamedNodeMap *nnMap) * NamedNodeMap_getLength
* Return the number of Nodes in this map.
* External function.
*
* Parameters:
*
*=================================================================*/
unsigned long
ixmlNamedNodeMap_getLength( IN IXML_NamedNodeMap * nnMap )
{ {
IXML_Node *tempNode; IXML_Node *tempNode;
unsigned long length = 0; unsigned long length = 0;
if (nnMap != NULL) { if( nnMap != NULL ) {
tempNode = nnMap->nodeItem; tempNode = nnMap->nodeItem;
for (length = 0; tempNode != NULL; ++length) { for( length = 0; tempNode != NULL; ++length ) {
tempNode = tempNode->nextSibling; tempNode = tempNode->nextSibling;
} }
} }
return length; return length;
} }
/*================================================================
void ixmlNamedNodeMap_free(IXML_NamedNodeMap *nnMap) * ixmlNamedNodeMap_free
* frees a NamedNodeMap.
* External function.
*
*=================================================================*/
void
ixmlNamedNodeMap_free( IXML_NamedNodeMap * nnMap )
{ {
IXML_NamedNodeMap *pNext; IXML_NamedNodeMap *pNext;
while (nnMap != NULL) { while( nnMap != NULL ) {
pNext = nnMap->next; pNext = nnMap->next;
free(nnMap); free( nnMap );
nnMap = pNext; nnMap = pNext;
} }
} }
/*================================================================
int ixmlNamedNodeMap_addToNamedNodeMap( * NamedNodeMap_addToNamedNodeMap
IXML_NamedNodeMap **nnMap, * add a node to a NamedNodeMap.
IXML_Node *add) * Internal to parser only.
* Parameters:
* add: the node to add into NamedNodeMap.
* Return:
* IXML_SUCCESS or failure.
*
*=================================================================*/
int
ixmlNamedNodeMap_addToNamedNodeMap( IN IXML_NamedNodeMap ** nnMap,
IN IXML_Node * add )
{ {
IXML_NamedNodeMap *traverse = NULL; IXML_NamedNodeMap *traverse = NULL,
IXML_NamedNodeMap *p = NULL; *p = NULL;
IXML_NamedNodeMap *newItem = NULL; IXML_NamedNodeMap *newItem = NULL;
if(add == NULL) { if( add == NULL ) {
return IXML_SUCCESS; return IXML_SUCCESS;
} }
if (*nnMap == NULL) { if( *nnMap == NULL ) // nodelist is empty
// nodelist is empty {
*nnMap = (IXML_NamedNodeMap *)malloc(sizeof (IXML_NamedNodeMap)); *nnMap =
if (*nnMap == NULL) { ( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );
if( *nnMap == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
ixmlNamedNodeMap_init(*nnMap); ixmlNamedNodeMap_init( *nnMap );
} }
if ((*nnMap)->nodeItem == NULL) {
(*nnMap)->nodeItem = add; if( ( *nnMap )->nodeItem == NULL ) {
( *nnMap )->nodeItem = add;
} else { } else {
traverse = *nnMap; traverse = *nnMap;
p = traverse; p = traverse;
while (traverse != NULL) { while( traverse != NULL ) {
p = traverse; p = traverse;
traverse = traverse->next; traverse = traverse->next;
} }
newItem = (IXML_NamedNodeMap *)malloc(sizeof (IXML_NamedNodeMap));
if (newItem == NULL) { newItem =
( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );
if( newItem == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
p->next = newItem; p->next = newItem;
@@ -192,4 +240,3 @@ int ixmlNamedNodeMap_addToNamedNodeMap(
return IXML_SUCCESS; return IXML_SUCCESS;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,118 +1,128 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/*!
* \file
*/
#include "ixmlparser.h" #include "ixmlparser.h"
/*================================================================
#include <assert.h> * ixmlNodeList_init
#include <string.h> * initializes a nodelist
* External function.
*
void ixmlNodeList_init(IXML_NodeList *nList) *=================================================================*/
void
ixmlNodeList_init( IXML_NodeList * nList )
{ {
assert(nList != NULL); assert( nList != NULL );
memset( nList, 0, sizeof( IXML_NodeList ) );
memset(nList, 0, sizeof (IXML_NodeList));
} }
/*================================================================
IXML_Node *ixmlNodeList_item( * ixmlNodeList_item
IXML_NodeList *nList, * Returns the indexth item in the collection. If index is greater
unsigned long index) * than or equal to the number of nodes in the list, this returns
* null.
* External function.
*
*=================================================================*/
IXML_Node *
ixmlNodeList_item( IXML_NodeList * nList,
unsigned long index )
{ {
IXML_NodeList *next; IXML_NodeList *next;
unsigned int i; unsigned int i;
// if the list ptr is NULL // if the list ptr is NULL
if (nList == NULL) { if( nList == NULL ) {
return NULL; return NULL;
} }
// if index is more than list length // if index is more than list length
if (index > ixmlNodeList_length(nList) - 1) { if( index > ixmlNodeList_length( nList ) - 1 ) {
return NULL; return NULL;
} }
next = nList; next = nList;
for (i = 0; i < index && next != NULL; ++i) { for( i = 0; i < index && next != NULL; ++i ) {
next = next->next; next = next->next;
} }
if (next == NULL) { if( next == NULL ) return NULL;
return NULL;
}
return next->nodeItem; return next->nodeItem;
} }
int ixmlNodeList_addToNodeList( /*================================================================
IXML_NodeList **nList, * ixmlNodeList_addToNodeList
IXML_Node *add) * Add a node to nodelist
* Internal to parser only.
*
*=================================================================*/
int
ixmlNodeList_addToNodeList( IN IXML_NodeList ** nList,
IN IXML_Node * add )
{ {
IXML_NodeList *traverse = NULL; IXML_NodeList *traverse,
IXML_NodeList *p = NULL; *p = NULL;
IXML_NodeList *newListItem; IXML_NodeList *newListItem;
assert(add != NULL); assert( add != NULL );
if (add == NULL) { if( add == NULL ) {
return IXML_FAILED; return IXML_FAILED;
} }
if (*nList == NULL) { if( *nList == NULL ) // nodelist is empty
// nodelist is empty {
*nList = (IXML_NodeList *)malloc(sizeof (IXML_NodeList)); *nList = ( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) );
if (*nList == NULL) { if( *nList == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
ixmlNodeList_init(*nList); ixmlNodeList_init( *nList );
} }
if ((*nList)->nodeItem == NULL) { if( ( *nList )->nodeItem == NULL ) {
(*nList)->nodeItem = add; ( *nList )->nodeItem = add;
} else { } else {
traverse = *nList; traverse = *nList;
while (traverse != NULL) { while( traverse != NULL ) {
p = traverse; p = traverse;
traverse = traverse->next; traverse = traverse->next;
} }
newListItem = (IXML_NodeList *)malloc(sizeof (IXML_NodeList)); newListItem =
if (newListItem == NULL) { ( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) );
if( newListItem == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
p->next = newListItem; p->next = newListItem;
@@ -123,14 +133,21 @@ int ixmlNodeList_addToNodeList(
return IXML_SUCCESS; return IXML_SUCCESS;
} }
/*================================================================
unsigned long ixmlNodeList_length(IXML_NodeList *nList) * ixmlNodeList_length
* Returns the number of nodes in the list. The range of valid
* child node indices is 0 to length-1 inclusive.
* External function.
*
*=================================================================*/
unsigned long
ixmlNodeList_length( IN IXML_NodeList * nList )
{ {
IXML_NodeList *list; IXML_NodeList *list;
unsigned long length = 0; unsigned long length = 0;
list = nList; list = nList;
while (list != NULL) { while( list != NULL ) {
++length; ++length;
list = list->next; list = list->next;
} }
@@ -138,15 +155,22 @@ unsigned long ixmlNodeList_length(IXML_NodeList *nList)
return length; return length;
} }
/*================================================================
void ixmlNodeList_free(IXML_NodeList *nList) * ixmlNodeList_free
* frees a nodeList
* External function
*
*=================================================================*/
void
ixmlNodeList_free( IN IXML_NodeList * nList )
{ {
IXML_NodeList *next; IXML_NodeList *next;
while (nList != NULL) { while( nList != NULL ) {
next = nList->next; next = nList->next;
free(nList);
free( nList );
nList = next; nList = next;
} }
}
}

View File

@@ -6,6 +6,6 @@ includedir=@includedir@
Name: libupnp Name: libupnp
Description: Linux SDK for UPnP Devices Description: Linux SDK for UPnP Devices
Version: @VERSION@ Version: @VERSION@
Libs: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ -L${libdir} -lupnp -lthreadutil -lixml Libs: @PTHREAD_LIBS@ -L${libdir} -lupnp -lthreadutil -lixml
Cflags: @PTHREAD_CFLAGS@ -I${includedir}/upnp Cflags: @PTHREAD_CFLAGS@ -I${includedir}/upnp

View File

@@ -1,4 +1,4 @@
Version: 1.6.6 Version: 1.6.4
Summary: Universal Plug and Play (UPnP) SDK Summary: Universal Plug and Play (UPnP) SDK
Name: libupnp Name: libupnp
Release: 1%{?dist} Release: 1%{?dist}

View File

@@ -29,24 +29,14 @@
* *
******************************************************************************/ ******************************************************************************/
#ifndef FREE_LIST_H #ifndef FREE_LIST_H
#define FREE_LIST_H #define FREE_LIST_H
/*!
* \file
*/
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include "ithread.h" #include "ithread.h"
#include <errno.h> #include <errno.h>
/**************************************************************************** /****************************************************************************

View File

@@ -29,32 +29,21 @@
* *
******************************************************************************/ ******************************************************************************/
#ifndef LINKED_LIST_H #ifndef LINKED_LIST_H
#define LINKED_LIST_H #define LINKED_LIST_H
/*!
* \file
*/
#include "FreeList.h" #include "FreeList.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#define EOUTOFMEM (-7 & 1<<29) #define EOUTOFMEM (-7 & 1<<29)
#define FREELISTSIZE 100 #define FREELISTSIZE 100
#define LIST_SUCCESS 1 #define LIST_SUCCESS 1
#define LIST_FAIL 0 #define LIST_FAIL 0
/**************************************************************************** /****************************************************************************
* Name: free_routine * Name: free_routine
* *
@@ -63,7 +52,6 @@ extern "C" {
*****************************************************************************/ *****************************************************************************/
typedef void (*free_function)(void *arg); typedef void (*free_function)(void *arg);
/**************************************************************************** /****************************************************************************
* Name: cmp_routine * Name: cmp_routine
* *
@@ -73,7 +61,6 @@ typedef void (*free_function)(void *arg);
*****************************************************************************/ *****************************************************************************/
typedef int (*cmp_routine)(void *itemA,void *itemB); typedef int (*cmp_routine)(void *itemA,void *itemB);
/**************************************************************************** /****************************************************************************
* Name: ListNode * Name: ListNode
* *
@@ -88,7 +75,6 @@ typedef struct LISTNODE
void *item; void *item;
} ListNode; } ListNode;
/**************************************************************************** /****************************************************************************
* Name: LinkedList * Name: LinkedList
* *
@@ -118,7 +104,6 @@ typedef struct LINKEDLIST
cmp_routine cmp_func; /* compare function to use */ cmp_routine cmp_func; /* compare function to use */
} LinkedList; } LinkedList;
/**************************************************************************** /****************************************************************************
* Function: ListInit * Function: ListInit
* *
@@ -134,7 +119,6 @@ typedef struct LINKEDLIST
*****************************************************************************/ *****************************************************************************/
int ListInit(LinkedList *list,cmp_routine cmp_func, free_function free_func); int ListInit(LinkedList *list,cmp_routine cmp_func, free_function free_func);
/**************************************************************************** /****************************************************************************
* Function: ListAddHead * Function: ListAddHead
* *
@@ -151,7 +135,6 @@ int ListInit(LinkedList *list,cmp_routine cmp_func, free_function free_func);
*****************************************************************************/ *****************************************************************************/
ListNode *ListAddHead(LinkedList *list, void *item); ListNode *ListAddHead(LinkedList *list, void *item);
/**************************************************************************** /****************************************************************************
* Function: ListAddTail * Function: ListAddTail
* *
@@ -168,7 +151,6 @@ ListNode *ListAddHead(LinkedList *list, void *item);
*****************************************************************************/ *****************************************************************************/
ListNode *ListAddTail(LinkedList *list, void *item); ListNode *ListAddTail(LinkedList *list, void *item);
/**************************************************************************** /****************************************************************************
* Function: ListAddAfter * Function: ListAddAfter
* *
@@ -223,7 +205,6 @@ ListNode *ListAddBefore(LinkedList *list,void *item, ListNode *anode);
*****************************************************************************/ *****************************************************************************/
void *ListDelNode(LinkedList *list,ListNode *dnode, int freeItem); void *ListDelNode(LinkedList *list,ListNode *dnode, int freeItem);
/**************************************************************************** /****************************************************************************
* Function: ListDestroy * Function: ListDestroy
* *
@@ -259,7 +240,6 @@ int ListDestroy(LinkedList *list, int freeItem);
*****************************************************************************/ *****************************************************************************/
ListNode* ListHead(LinkedList *list); ListNode* ListHead(LinkedList *list);
/**************************************************************************** /****************************************************************************
* Function: ListTail * Function: ListTail
* *
@@ -276,7 +256,6 @@ ListNode* ListHead(LinkedList *list);
*****************************************************************************/ *****************************************************************************/
ListNode* ListTail(LinkedList *list); ListNode* ListTail(LinkedList *list);
/**************************************************************************** /****************************************************************************
* Function: ListNext * Function: ListNext
* *
@@ -293,7 +272,6 @@ ListNode* ListTail(LinkedList *list);
*****************************************************************************/ *****************************************************************************/
ListNode* ListNext(LinkedList *list, ListNode * node); ListNode* ListNext(LinkedList *list, ListNode * node);
/**************************************************************************** /****************************************************************************
* Function: ListPrev * Function: ListPrev
* *
@@ -310,7 +288,6 @@ ListNode* ListNext(LinkedList *list, ListNode * node);
*****************************************************************************/ *****************************************************************************/
ListNode* ListPrev(LinkedList *list, ListNode * node); ListNode* ListPrev(LinkedList *list, ListNode * node);
/**************************************************************************** /****************************************************************************
* Function: ListFind * Function: ListFind
* *
@@ -330,7 +307,6 @@ ListNode* ListPrev(LinkedList *list, ListNode * node);
*****************************************************************************/ *****************************************************************************/
ListNode* ListFind(LinkedList *list, ListNode *start, void * item); ListNode* ListFind(LinkedList *list, ListNode *start, void * item);
/**************************************************************************** /****************************************************************************
* Function: ListSize * Function: ListSize
* *

View File

@@ -29,134 +29,67 @@
* *
******************************************************************************/ ******************************************************************************/
#ifndef THREADPOOL_H #ifndef THREADPOOL_H
#define THREADPOOL_H #define THREADPOOL_H
#ifdef UPNP_USE_MSVCPP
/*! #define UPNP_INLINE
* \file #else
*/ #define UPNP_INLINE inline
#include "FreeList.h"
#include "ithread.h"
#include "LinkedList.h"
#include "UpnpInet.h"
#include "UpnpGlobal.h" /* for UPNP_INLINE, EXPORT_SPEC */
#include <errno.h>
#ifdef WIN32
#include <time.h>
struct timezone
{
int tz_minuteswest; /* minutes W of Greenwich */
int tz_dsttime; /* type of dst correction */
};
int gettimeofday(struct timeval *tv, struct timezone *tz);
#else /* WIN32 */
#include <sys/param.h>
#include <sys/time.h> /* for gettimeofday() */
#if defined(__OSX__) || defined(__APPLE__) || defined(__NetBSD__)
#include <sys/resource.h> /* for setpriority() */
#endif
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/* Size of job free list */
/*! Size of job free list */
#define JOBFREELISTSIZE 100 #define JOBFREELISTSIZE 100
#define INFINITE_THREADS -1 #define INFINITE_THREADS -1
#define EMAXTHREADS (-8 & 1<<29) #define EMAXTHREADS (-8 & 1<<29)
/* Invalid Policy */
/*! Invalid Policy */
#define INVALID_POLICY (-9 & 1<<29) #define INVALID_POLICY (-9 & 1<<29)
/* Invalid JOB Id */
/*! Invalid JOB Id */
#define INVALID_JOB_ID (-2 & 1<<29) #define INVALID_JOB_ID (-2 & 1<<29)
typedef enum duration {SHORT_TERM,PERSISTENT} Duration;
typedef enum duration { typedef enum priority {LOW_PRIORITY,
SHORT_TERM,
PERSISTENT
} Duration;
typedef enum priority {
LOW_PRIORITY,
MED_PRIORITY, MED_PRIORITY,
HIGH_PRIORITY HIGH_PRIORITY} ThreadPriority;
} ThreadPriority;
#define DEFAULT_PRIORITY MED_PRIORITY /* default priority used by TPJobInit */
#define DEFAULT_MIN_THREADS 1 /* default minimum used by TPAttrInit */
#define DEFAULT_MAX_THREADS 10 /* default max used by TPAttrInit */
#define DEFAULT_JOBS_PER_THREAD 10 /* default jobs per thread used by TPAttrInit */
#define DEFAULT_STARVATION_TIME 500 /* default starvation time used by TPAttrInit */
#define DEFAULT_IDLE_TIME 10 * 1000 /* default idle time used by TPAttrInit */
#define DEFAULT_FREE_ROUTINE NULL /* default free routine used TPJobInit */
#define DEFAULT_MAX_JOBS_TOTAL 100 /* default max jobs used TPAttrInit */
/*! default priority used by TPJobInit */ /* Statistics */
#define DEFAULT_PRIORITY MED_PRIORITY /* always include stats because code change is minimal */
/*! default minimum used by TPAttrInit */
#define DEFAULT_MIN_THREADS 1
/*! default max used by TPAttrInit */
#define DEFAULT_MAX_THREADS 10
/*! default jobs per thread used by TPAttrInit */
#define DEFAULT_JOBS_PER_THREAD 10
/*! default starvation time used by TPAttrInit */
#define DEFAULT_STARVATION_TIME 500
/*! default idle time used by TPAttrInit */
#define DEFAULT_IDLE_TIME 10 * 1000
/*! default free routine used TPJobInit */
#define DEFAULT_FREE_ROUTINE NULL
/*! default max jobs used TPAttrInit */
#define DEFAULT_MAX_JOBS_TOTAL 100
/*!
* \brief Statistics.
*
* Always include stats because code change is minimal.
*/
#define STATS 1 #define STATS 1
#ifdef _DEBUG #ifdef _DEBUG
#define DEBUG 1 #define DEBUG 1
#endif #endif
#include "LinkedList.h"
#include <sys/time.h> /* for gettimeofday() */
#include "FreeList.h"
#include "ithread.h"
#include <errno.h>
#define EXPORT
typedef int PolicyType; typedef int PolicyType;
#define DEFAULT_POLICY SCHED_OTHER #define DEFAULT_POLICY SCHED_OTHER
#define DEFAULT_SCHED_PARAM 0 /* default priority */
/*! Default priority */
#define DEFAULT_SCHED_PARAM 0
/**************************************************************************** /****************************************************************************
* Name: free_routine * Name: free_routine
@@ -166,7 +99,6 @@ typedef int PolicyType;
*****************************************************************************/ *****************************************************************************/
typedef void (*free_routine)(void *arg); typedef void (*free_routine)(void *arg);
/**************************************************************************** /****************************************************************************
* Name: ThreadPoolAttr * Name: ThreadPoolAttr
* *
@@ -200,7 +132,6 @@ typedef struct THREADPOOLATTR
PolicyType schedPolicy; PolicyType schedPolicy;
} ThreadPoolAttr; } ThreadPoolAttr;
/**************************************************************************** /****************************************************************************
* Name: ThreadPool * Name: ThreadPool
* *
@@ -217,13 +148,13 @@ typedef struct THREADPOOLJOB
int jobId; int jobId;
} ThreadPoolJob; } ThreadPoolJob;
/**************************************************************************** /****************************************************************************
* Name: ThreadPoolStats * Name: ThreadPoolStats
* *
* Description: * Description:
* Structure to hold statistics * Structure to hold statistics
*****************************************************************************/ *****************************************************************************/
typedef struct TPOOLSTATS typedef struct TPOOLSTATS
{ {
double totalTimeHQ; double totalTimeHQ;
@@ -248,12 +179,15 @@ typedef struct TPOOLSTATS
} ThreadPoolStats; } ThreadPoolStats;
/*! /****************************************************************************
* \brief A thread pool similar to the thread pool in the UPnP SDK. * Name: ThreadPool
* *
* Description:
* A thread pool similar to the thread pool in the UPnP SDK.
* Allows jobs to be scheduled for running by threads in a * Allows jobs to be scheduled for running by threads in a
* thread pool. The thread pool is initialized with a * thread pool. The thread pool is initialized with a
* minimum and maximum thread number as well as a max idle time * minimum and maximum thread number as well as a
* max idle time
* and a jobs per thread ratio. If a worker thread waits the whole * and a jobs per thread ratio. If a worker thread waits the whole
* max idle time without receiving a job and the thread pool * max idle time without receiving a job and the thread pool
* currently has more threads running than the minimum * currently has more threads running than the minimum
@@ -262,22 +196,25 @@ typedef struct TPOOLSTATS
* becomes greater than the set ratio and the thread pool currently has * becomes greater than the set ratio and the thread pool currently has
* less than the maximum threads then a new thread will * less than the maximum threads then a new thread will
* be created. * be created.
*/ *
*****************************************************************************/
typedef struct THREADPOOL typedef struct THREADPOOL
{ {
ithread_mutex_t mutex; /* mutex to protect job qs */ ithread_mutex_t mutex; /* mutex to protect job qs */
ithread_cond_t condition; /* condition variable to signal Q */ ithread_cond_t condition; /* condition variable to signal Q */
ithread_cond_t start_and_shutdown; /* condition variable for start and stop */ ithread_cond_t start_and_shutdown; /* condition variable for start
and stop */
int lastJobId; /* ids for jobs */ int lastJobId; /* ids for jobs */
int shutdown; /* whether or not we are shutting down */ int shutdown; /* whether or not we are shutting down */
int totalThreads; /* total number of threads */ int totalThreads; /* total number of threads */
int busyThreads; /* number of threads that are currently executing jobs */
int persistentThreads; /* number of persistent threads */ int persistentThreads; /* number of persistent threads */
FreeList jobFreeList; /* free list of jobs */ FreeList jobFreeList; /* free list of jobs */
LinkedList lowJobQ; /* low priority job Q */ LinkedList lowJobQ; /* low priority job Q */
LinkedList medJobQ; /* med priority job Q */ LinkedList medJobQ; /* med priority job Q */
LinkedList highJobQ; /* high priority job Q */ LinkedList highJobQ; /* high priority job Q */
ThreadPoolJob *persistentJob; /* persistent job */ ThreadPoolJob *persistentJob; /* persistent job */
ThreadPoolAttr attr; /* thread pool attributes */ ThreadPoolAttr attr; /* thread pool attributes */
/* statistics */ /* statistics */
@@ -285,6 +222,7 @@ typedef struct THREADPOOL
} ThreadPool; } ThreadPool;
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolInit * Function: ThreadPoolInit
* *
@@ -323,7 +261,6 @@ typedef struct THREADPOOL
*****************************************************************************/ *****************************************************************************/
int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr); int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolAddPersistent * Function: ThreadPoolAddPersistent
* *
@@ -346,7 +283,6 @@ int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr);
*****************************************************************************/ *****************************************************************************/
int ThreadPoolAddPersistent(ThreadPool*tp, ThreadPoolJob *job, int *jobId); int ThreadPoolAddPersistent(ThreadPool*tp, ThreadPoolJob *job, int *jobId);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolGetAttr * Function: ThreadPoolGetAttr
* *
@@ -361,8 +297,6 @@ int ThreadPoolAddPersistent(ThreadPool*tp, ThreadPoolJob *job, int *jobId);
* Always returns 0. * Always returns 0.
*****************************************************************************/ *****************************************************************************/
int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out); int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolSetAttr * Function: ThreadPoolSetAttr
* *
@@ -378,7 +312,6 @@ int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out);
*****************************************************************************/ *****************************************************************************/
int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr); int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolAdd * Function: ThreadPoolAdd
* *
@@ -398,7 +331,6 @@ int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr);
*****************************************************************************/ *****************************************************************************/
int ThreadPoolAdd (ThreadPool*tp, ThreadPoolJob *job, int *jobId); int ThreadPoolAdd (ThreadPool*tp, ThreadPoolJob *job, int *jobId);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolRemove * Function: ThreadPoolRemove
* *
@@ -451,7 +383,6 @@ int ThreadPoolShutdown(ThreadPool *tp);
*****************************************************************************/ *****************************************************************************/
int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg); int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg);
/**************************************************************************** /****************************************************************************
* Function: TPJobSetPriority * Function: TPJobSetPriority
* *
@@ -465,7 +396,6 @@ int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg);
*****************************************************************************/ *****************************************************************************/
int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority); int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority);
/**************************************************************************** /****************************************************************************
* Function: TPJobSetFreeFunction * Function: TPJobSetFreeFunction
* *
@@ -479,7 +409,6 @@ int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority);
*****************************************************************************/ *****************************************************************************/
int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func); int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func);
/**************************************************************************** /****************************************************************************
* Function: TPAttrInit * Function: TPAttrInit
* *
@@ -493,7 +422,6 @@ int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func);
*****************************************************************************/ *****************************************************************************/
int TPAttrInit(ThreadPoolAttr *attr); int TPAttrInit(ThreadPoolAttr *attr);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetMaxThreads * Function: TPAttrSetMaxThreads
* *
@@ -507,7 +435,6 @@ int TPAttrInit(ThreadPoolAttr *attr);
*****************************************************************************/ *****************************************************************************/
int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads); int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetMinThreads * Function: TPAttrSetMinThreads
* *
@@ -521,7 +448,6 @@ int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads);
*****************************************************************************/ *****************************************************************************/
int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads); int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetIdleTime * Function: TPAttrSetIdleTime
* *
@@ -534,7 +460,6 @@ int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads);
*****************************************************************************/ *****************************************************************************/
int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime); int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetJobsPerThread * Function: TPAttrSetJobsPerThread
* *
@@ -548,7 +473,6 @@ int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime);
*****************************************************************************/ *****************************************************************************/
int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread); int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetStarvationTime * Function: TPAttrSetStarvationTime
* *
@@ -562,7 +486,6 @@ int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread);
*****************************************************************************/ *****************************************************************************/
int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime); int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetSchedPolicy * Function: TPAttrSetSchedPolicy
* *
@@ -590,7 +513,6 @@ int TPAttrSetSchedPolicy(ThreadPoolAttr *attr, PolicyType schedPolicy);
*****************************************************************************/ *****************************************************************************/
int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal); int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolGetStats * Function: ThreadPoolGetStats
* *
@@ -605,20 +527,18 @@ int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal);
* Always returns 0. * Always returns 0.
*****************************************************************************/ *****************************************************************************/
#ifdef STATS #ifdef STATS
EXPORT_SPEC int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats); EXPORT int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats);
EXPORT_SPEC void ThreadPoolPrintStats(ThreadPoolStats *stats); EXPORT void ThreadPoolPrintStats(ThreadPoolStats *stats);
#else #else
static UPNP_INLINE int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats) {} static UPNP_INLINE int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats) {}
static UPNP_INLINE void ThreadPoolPrintStats(ThreadPoolStats *stats) {} static UPNP_INLINE void ThreadPoolPrintStats(ThreadPoolStats *stats) {}
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* ThreadPool */
#endif /* THREADPOOL_H */

View File

@@ -29,45 +29,38 @@
* *
******************************************************************************/ ******************************************************************************/
#ifndef TIMERTHREAD_H #ifndef TIMERTHREAD_H
#define TIMERTHREAD_H #define TIMERTHREAD_H
/*!
* \file
*/
#include "FreeList.h"
#include "ithread.h" #include "ithread.h"
#include "LinkedList.h" #include "LinkedList.h"
#include "FreeList.h"
#include "ThreadPool.h" #include "ThreadPool.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#define INVALID_EVENT_ID (-10 & 1<<29) #define INVALID_EVENT_ID (-10 & 1<<29)
/* Timeout Types */ /* Timeout Types */
/* absolute means in seconds from Jan 1, 1970 */ /* absolute means in seconds from Jan 1, 1970 */
/* relative means in seconds from current time */ /* relative means in seconds from current time */
typedef enum timeoutType {ABS_SEC,REL_SEC} TimeoutType; typedef enum timeoutType {ABS_SEC,REL_SEC} TimeoutType;
/*! /****************************************************************************
* A timer thread similar to the one in the Upnp SDK that allows * Name: TimerThread
* the scheduling of a job to run at a specified time in the future.
* *
* Description:
* A timer thread similar to the one in the Upnp SDK that allows
* the scheduling of a job to run at a specified time in the future
* Because the timer thread uses the thread pool there is no * Because the timer thread uses the thread pool there is no
* gurantee of timing, only approximate timing. * gurantee of timing, only approximate timing.
* Uses ThreadPool, Mutex, Condition, Thread
* *
* Uses ThreadPool, Mutex, Condition, Thread. *
*/ *****************************************************************************/
typedef struct TIMERTHREAD typedef struct TIMERTHREAD
{ {
ithread_mutex_t mutex; ithread_mutex_t mutex;
@@ -80,88 +73,116 @@ typedef struct TIMERTHREAD
} TimerThread; } TimerThread;
/*! /****************************************************************************
* Struct to contain information for a timer event. * Name: TimerEvent
* *
* Internal to the TimerThread. * Description:
*/ *
* Struct to contain information for a timer event.
* Internal to the TimerThread
*
*****************************************************************************/
typedef struct TIMEREVENT typedef struct TIMEREVENT
{ {
ThreadPoolJob job; ThreadPoolJob job;
/*! [in] Absolute time for event in seconds since Jan 1, 1970. */ time_t eventTime; /* absolute time for event in seconds since Jan 1, 1970 */
time_t eventTime; Duration persistent; /* long term or short term job */
/*! [in] Long term or short term job. */
Duration persistent;
int id; int id;
} TimerEvent; } TimerEvent;
/*!
* \brief Initializes and starts timer thread.
/************************************************************************
* Function: TimerThreadInit
* *
* \return 0 on success, nonzero on failure. Returns error from * Description:
* ThreadPoolAddPersistent on failure. * Initializes and starts timer thread.
*/ *
int TimerThreadInit( * Parameters:
/*! [in] Valid timer thread pointer. */ * timer - valid timer thread pointer.
TimerThread *timer, * tp - valid thread pool to use. Must be
/*! [in] Valid thread pool to use. Must be started. Must be valid for * started. Must be valid for lifetime
* lifetime of timer. Timer must be shutdown BEFORE thread pool. */ * of timer. Timer must be shutdown
* BEFORE thread pool.
* Return:
* 0 on success, nonzero on failure
* Returns error from ThreadPoolAddPersistent on failure.
*
************************************************************************/
int TimerThreadInit(TimerThread *timer,
ThreadPool *tp); ThreadPool *tp);
/*! /************************************************************************
* \brief Schedules an event to run at a specified time. * Function: TimerThreadSchedule
* *
* \return 0 on success, nonzero on failure, EOUTOFMEM if not enough memory * Description:
* to schedule job. * Schedules an event to run at a specified time.
*/ *
int TimerThreadSchedule( * Parameters:
/*! [in] Valid timer thread pointer. */ * timer - valid timer thread pointer.
TimerThread* timer, * time_t - time of event.
/*! [in] time of event. Either in absolute seconds, or relative * either in absolute seconds,
* seconds in the future. */ * or relative seconds in the future.
* timeoutType - either ABS_SEC, or REL_SEC.
* if REL_SEC, then the event
* will be scheduled at the
* current time + REL_SEC.
* job-> valid Thread pool job with following fields
* func - function to schedule
* arg - argument to function
* priority - priority of job.
*
* id - id of timer event. (out, can be null)
* Return:
* 0 on success, nonzero on failure
* EOUTOFMEM if not enough memory to schedule job.
*
************************************************************************/
int TimerThreadSchedule(TimerThread* timer,
time_t time, time_t time,
/*! [in] either ABS_SEC, or REL_SEC. If REL_SEC, then the event
* will be scheduled at the current time + REL_SEC. */
TimeoutType type, TimeoutType type,
/*! [in] Valid Thread pool job with following fields. */
ThreadPoolJob *job, ThreadPoolJob *job,
/*! [in] . */
Duration duration, Duration duration,
/*! [in] Id of timer event. (out, can be null). */
int *id); int *id);
/************************************************************************
/*! * Function: TimerThreadRemove
* \brief Removes an event from the timer Q.
* *
* Events can only be removed before they have been placed in the thread pool. * Description:
* Removes an event from the timer Q.
* Events can only be removed
* before they have been placed in the
* thread pool.
* *
* \return 0 on success, INVALID_EVENT_ID on failure. * Parameters:
*/ * timer - valid timer thread pointer.
int TimerThreadRemove( * id - id of event to remove.
/*! [in] Valid timer thread pointer. */ * ThreadPoolJob *out - space for thread pool job.
TimerThread *timer, * Return:
/*! [in] Id of event to remove. */ * 0 on success,
* INVALID_EVENT_ID on failure
*
************************************************************************/
int TimerThreadRemove(TimerThread *timer,
int id, int id,
/*! [in] Space for thread pool job. */
ThreadPoolJob *out); ThreadPoolJob *out);
/************************************************************************
/*! * Function: TimerThreadShutdown
* \brief Shutdown the timer thread.
* *
* Description:
* Shutdown the timer thread
* Events scheduled in the future will NOT be run. * Events scheduled in the future will NOT be run.
* * Timer thread should be shutdown BEFORE it's associated
* Timer thread should be shutdown BEFORE it's associated thread pool. * thread pool.
* * Returns:
* \return 0 if succesfull, nonzero otherwise. Always returns 0. * returns 0 if succesfull,
*/ * nonzero otherwise.
int TimerThreadShutdown( * Always returns 0.
/*! [in] Valid timer thread pointer. */ ***********************************************************************/
TimerThread *timer); int TimerThreadShutdown(TimerThread *timer);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -29,42 +29,22 @@
* *
******************************************************************************/ ******************************************************************************/
#ifndef ITHREADH
#ifndef ITHREAD_H #define ITHREADH
#define ITHREAD_H
/*!
* \file
*/
#if !defined(WIN32)
#include <sys/param.h>
#endif
#include "UpnpGlobal.h" /* For UPNP_INLINE, EXPORT_SPEC */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <pthread.h> #include <pthread.h>
#ifdef WIN32 #ifndef WIN32
/* Do not #include <unistd.h> */
#else
#include <unistd.h> #include <unistd.h>
#endif #endif
#ifdef __FreeBSD__
#if defined(BSD)
#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
#endif #endif
#ifdef PTHREAD_MUTEX_RECURSIVE #ifdef PTHREAD_MUTEX_RECURSIVE
/* This system has SuS2-compliant mutex attributes. /* This system has SuS2-compliant mutex attributes.
* E.g. on Cygwin, where we don't have the old nonportable (NP) symbols * E.g. on Cygwin, where we don't have the old nonportable (NP) symbols
@@ -96,7 +76,6 @@ extern "C" {
***************************************************************************/ ***************************************************************************/
typedef pthread_t ithread_t; typedef pthread_t ithread_t;
/**************************************************************************** /****************************************************************************
* Name: ithread_attr_t * Name: ithread_attr_t
* *
@@ -115,7 +94,7 @@ typedef pthread_attr_t ithread_attr_t;
* Thread start routine * Thread start routine
* Internal Use Only. * Internal Use Only.
***************************************************************************/ ***************************************************************************/
typedef void *(*start_routine)(void *arg); typedef void * (*start_routine) (void *arg);
/**************************************************************************** /****************************************************************************
@@ -184,95 +163,6 @@ typedef pthread_rwlockattr_t ithread_rwlockattr_t;
***************************************************************************/ ***************************************************************************/
typedef pthread_rwlock_t ithread_rwlock_t; typedef pthread_rwlock_t ithread_rwlock_t;
/****************************************************************************
* Function: ithread_initialize_library
*
* Description:
* Initializes the library. Does nothing in all implementations, except
* when statically linked for WIN32.
* Parameters:
* none.
* Returns:
* 0 on success, Nonzero on failure.
***************************************************************************/
static UPNP_INLINE int ithread_initialize_library(void) {
int ret = 0;
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
ret = !pthread_win32_process_attach_np();
#endif
return ret;
}
/****************************************************************************
* Function: ithread_cleanup_library
*
* Description:
* Clean up library resources. Does nothing in all implementations, except
* when statically linked for WIN32.
* Parameters:
* none.
* Returns:
* 0 on success, Nonzero on failure.
***************************************************************************/
static UPNP_INLINE int ithread_cleanup_library(void) {
int ret = 0;
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
ret = !pthread_win32_process_detach_np();
#endif
return ret;
}
/****************************************************************************
* Function: ithread_initialize_thread
*
* Description:
* Initializes the thread. Does nothing in all implementations, except
* when statically linked for WIN32.
* Parameters:
* none.
* Returns:
* 0 on success, Nonzero on failure.
***************************************************************************/
static UPNP_INLINE int ithread_initialize_thread(void) {
int ret = 0;
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
ret = !pthread_win32_thread_attach_np();
#endif
return ret;
}
/****************************************************************************
* Function: ithread_cleanup_thread
*
* Description:
* Clean up thread resources. Does nothing in all implementations, except
* when statically linked for WIN32.
* Parameters:
* none.
* Returns:
* 0 on success, Nonzero on failure.
***************************************************************************/
static UPNP_INLINE int ithread_cleanup_thread(void) {
int ret = 0;
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
ret = !pthread_win32_thread_detach_np();
#endif
return ret;
}
/**************************************************************************** /****************************************************************************
* Function: ithread_mutexattr_init * Function: ithread_mutexattr_init
* *
@@ -512,8 +402,8 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Must be called before use. * Must be called before use.
* *
* Parameters: * Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) * ithread_rwlock_t * rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* const ithread_rwlockattr_t *rwlock_attr * const ithread_rwlockattr_t * rwlock_attr
* Returns: * Returns:
* 0 on success, Nonzero on failure. * 0 on success, Nonzero on failure.
* Always returns 0. * Always returns 0.
@@ -528,7 +418,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Description: * Description:
* Locks rwlock for reading. * Locks rwlock for reading.
* Parameters: * Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) * ithread_rwlock_t * rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized. * rwlock must be initialized.
* *
* Returns: * Returns:
@@ -545,7 +435,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Description: * Description:
* Locks rwlock for writting. * Locks rwlock for writting.
* Parameters: * Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) * ithread_rwlock_t * rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized. * rwlock must be initialized.
* *
* Returns: * Returns:
@@ -563,7 +453,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Unlocks rwlock. * Unlocks rwlock.
* *
* Parameters: * Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) * ithread_rwlock_t * rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized. * rwlock must be initialized.
* *
* Returns: * Returns:
@@ -583,7 +473,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* rwlock is only destroyed when there are no longer any threads waiting on it. * rwlock is only destroyed when there are no longer any threads waiting on it.
* rwlock cannot be destroyed if it is locked. * rwlock cannot be destroyed if it is locked.
* Parameters: * Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t) * ithread_rwlock_t * rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized. * rwlock must be initialized.
* Returns: * Returns:
* 0 on success. Nonzero on failure. * 0 on success. Nonzero on failure.
@@ -600,8 +490,8 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Initializes condition variable. * Initializes condition variable.
* Must be called before use. * Must be called before use.
* Parameters: * Parameters:
* ithread_cond_t *cond (must be valid non NULL pointer to pthread_cond_t) * ithread_cond_t * cond (must be valid non NULL pointer to pthread_cond_t)
* const ithread_condattr_t *cond_attr (ignored) * const ithread_condattr_t * cond_attr (ignored)
* Returns: * Returns:
* 0 on success, Nonzero on failure. * 0 on success, Nonzero on failure.
* See man page for pthread_cond_init * See man page for pthread_cond_init
@@ -609,6 +499,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
#define ithread_cond_init pthread_cond_init #define ithread_cond_init pthread_cond_init
/**************************************************************************** /****************************************************************************
* Function: ithread_cond_signal * Function: ithread_cond_signal
* *
@@ -616,7 +507,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Wakes up exactly one thread waiting on condition. * Wakes up exactly one thread waiting on condition.
* Associated mutex MUST be locked by thread before entering this call. * Associated mutex MUST be locked by thread before entering this call.
* Parameters: * Parameters:
* ithread_cond_t *cond (must be valid non NULL pointer to * ithread_cond_t * cond (must be valid non NULL pointer to
* ithread_cond_t) * ithread_cond_t)
* cond must be initialized * cond must be initialized
* Returns: * Returns:
@@ -633,7 +524,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Wakes up all threads waiting on condition. * Wakes up all threads waiting on condition.
* Associated mutex MUST be locked by thread before entering this call. * Associated mutex MUST be locked by thread before entering this call.
* Parameters: * Parameters:
* ithread_cond_t *cond (must be valid non NULL pointer to * ithread_cond_t * cond (must be valid non NULL pointer to
* ithread_cond_t) * ithread_cond_t)
* cond must be initialized * cond must be initialized
* Returns: * Returns:
@@ -651,7 +542,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Associated mutex MUST be locked by thread before entering this call. * Associated mutex MUST be locked by thread before entering this call.
* Mutex is reacquired when call returns. * Mutex is reacquired when call returns.
* Parameters: * Parameters:
* ithread_cond_t *cond (must be valid non NULL pointer to * ithread_cond_t * cond (must be valid non NULL pointer to
* ithread_cond_t) * ithread_cond_t)
* cond must be initialized * cond must be initialized
* ithread_mutex_t *mutex (must be valid non NULL pointer to * ithread_mutex_t *mutex (must be valid non NULL pointer to
@@ -668,18 +559,22 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Function: pthread_cond_timedwait * Function: pthread_cond_timedwait
* *
* Description: * Description:
* Atomically releases the associated mutex and waits on the * Atomically releases the associated mutex and waits on the condition.
* condition. * If the condition is not signaled in the specified time
* If the condition is not signaled in the specified time than the * than the
* call times out and returns. * call times out and returns.
* Associated mutex MUST be locked by thread before entering this call. * Associated mutex MUST be locked by thread before entering
* this call.
* Mutex is reacquired when call returns. * Mutex is reacquired when call returns.
* Parameters: * Parameters:
* ithread_cond_t *cond (must be valid non NULL pointer to ithread_cond_t) * ithread_cond_t * cond (must be valid non NULL pointer to
* ithread_cond_t)
* cond must be initialized * cond must be initialized
* ithread_mutex_t *mutex (must be valid non NULL pointer to ithread_mutex_t) * ithread_mutex_t *mutex (must be valid non NULL pointer to
* ithread_mutex_t)
* Mutex must be locked. * Mutex must be locked.
* const struct timespec *abstime (absolute time, measured from Jan 1, 1970) * const struct timespec *abstime (absolute time, measured
* from Jan 1, 1970)
* Returns: * Returns:
* 0 on success. ETIMEDOUT on timeout. Nonzero on failure. * 0 on success. ETIMEDOUT on timeout. Nonzero on failure.
* See man page for pthread_cond_timedwait * See man page for pthread_cond_timedwait
@@ -695,7 +590,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Releases any resources held by the condition variable. * Releases any resources held by the condition variable.
* Condition variable can no longer be used after this call. * Condition variable can no longer be used after this call.
* Parameters: * Parameters:
* ithread_cond_t *cond (must be valid non NULL pointer to * ithread_cond_t * cond (must be valid non NULL pointer to
* ithread_cond_t) * ithread_cond_t)
* cond must be initialized. * cond must be initialized.
* Returns: * Returns:
@@ -751,7 +646,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
***************************************************************************/ ***************************************************************************/
#define ithread_exit pthread_exit #define ithread_exit pthread_exit
/**************************************************************************** /****************************************************************************
* Function: ithread_get_current_thread_id * Function: ithread_get_current_thread_id
* *
@@ -775,7 +669,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
***************************************************************************/ ***************************************************************************/
#define ithread_self pthread_self #define ithread_self pthread_self
/**************************************************************************** /****************************************************************************
* Function: ithread_detach * Function: ithread_detach
* *
@@ -789,7 +682,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
***************************************************************************/ ***************************************************************************/
#define ithread_detach pthread_detach #define ithread_detach pthread_detach
/**************************************************************************** /****************************************************************************
* Function: ithread_join * Function: ithread_join
* *
@@ -809,6 +701,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
#define ithread_join pthread_join #define ithread_join pthread_join
/**************************************************************************** /****************************************************************************
* Function: isleep * Function: isleep
* *
@@ -822,12 +715,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* 0 on success, Nonzero on failure. * 0 on success, Nonzero on failure.
* See man page for sleep (man 3 sleep) * See man page for sleep (man 3 sleep)
*****************************************************************************/ *****************************************************************************/
#ifdef WIN32 #define isleep sleep
#define isleep(x) Sleep((x)*1000)
#else
#define isleep sleep
#endif
/**************************************************************************** /****************************************************************************
* Function: isleep * Function: isleep
@@ -842,10 +730,21 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* 0 on success, Nonzero on failure. * 0 on success, Nonzero on failure.
* See man page for sleep (man 3 sleep) * See man page for sleep (man 3 sleep)
*****************************************************************************/ *****************************************************************************/
#define imillisleep(x) usleep(1000*x)
#ifdef WIN32 #ifdef WIN32
#define imillisleep Sleep #ifndef UPNP_STATIC_LIB
#ifdef LIBUPNP_EXPORTS
/* set up declspec for dll export to make functions visible to library users */
#define EXPORT_SPEC __declspec(dllexport)
#else
#define EXPORT_SPEC __declspec(dllimport)
#endif
#else
#define EXPORT_SPEC
#endif
#else #else
#define imillisleep(x) usleep(1000*x) #define EXPORT_SPEC
#endif #endif
@@ -854,11 +753,9 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind); EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind);
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* ITHREADH */
#endif /* ITHREAD_H */

View File

@@ -1,55 +1,43 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "LinkedList.h" #include "LinkedList.h"
#include <sys/param.h>
#ifdef WIN32
/* Do not #include <sys/param.h> */
#else
#include <sys/param.h>
#endif
#if (defined(BSD) && BSD >= 199306) || defined(__OSX__) || defined(__APPLE__) #if (defined(BSD) && BSD >= 199306) || defined(__OSX__) || defined(__APPLE__)
#include <stdlib.h> #include <stdlib.h>
#else #else
#include <malloc.h> #include <malloc.h>
#endif #endif
#include <assert.h> #include <assert.h>
static int static int
freeListNode( ListNode * node, freeListNode( ListNode * node,
LinkedList * list ) LinkedList * list )
@@ -544,4 +532,3 @@ ListSize( LinkedList * list )
return list->size; return list->size;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,69 +1,68 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/*!
* \file
*/
#include "TimerThread.h" #include "TimerThread.h"
#include <assert.h> #include <assert.h>
/****************************************************************************
/*! * Function: FreeTimerEvent
* \brief Deallocates a dynamically allocated TimerEvent. *
*/ * Description:
static void FreeTimerEvent( * Deallocates a dynamically allocated TimerEvent.
/*! [in] Valid timer thread pointer. */ * Parameters:
TimerThread *timer, * TimerEvent *event - must be allocated with CreateTimerEvent
/*! [in] Must be allocated with CreateTimerEvent*/ *****************************************************************************/
TimerEvent *event) static void
FreeTimerEvent( TimerThread * timer,
TimerEvent * event )
{ {
assert(timer != NULL);
FreeListFree(&timer->freeEvents, event); assert( timer != NULL );
FreeListFree( &timer->freeEvents, event );
} }
/****************************************************************************
/*! * Function: TimerThreadWorker
* \brief Implements timer thread.
* *
* Waits for next event to occur and schedules associated job into threadpool. * Description:
*/ * Implements timer thread.
static void *TimerThreadWorker( * Waits for next event to occur and schedules
/*! [in] arg is cast to (TimerThread *). */ * associated job into threadpool.
void *arg) * Internal Only.
* Parameters:
* void * arg -> is cast to TimerThread *
*****************************************************************************/
static void *
TimerThreadWorker( void *arg )
{ {
TimerThread *timer = ( TimerThread * ) arg; TimerThread *timer = ( TimerThread * ) arg;
ListNode *head = NULL; ListNode *head = NULL;
@@ -82,14 +81,19 @@ static void *TimerThreadWorker(
while( 1 ) while( 1 )
{ {
//mutex should always be locked at top of loop //mutex should always be locked at top of loop
//Check for shutdown //Check for shutdown
if( timer->shutdown ) if( timer->shutdown )
{ {
timer->shutdown = 0; timer->shutdown = 0;
ithread_cond_signal( &timer->condition ); ithread_cond_signal( &timer->condition );
ithread_mutex_unlock( &timer->mutex ); ithread_mutex_unlock( &timer->mutex );
return NULL; return NULL;
} }
nextEvent = NULL; nextEvent = NULL;
@@ -98,6 +102,7 @@ static void *TimerThreadWorker(
if( timer->eventQ.size > 0 ) if( timer->eventQ.size > 0 )
{ {
head = ListHead( &timer->eventQ ); head = ListHead( &timer->eventQ );
nextEvent = ( TimerEvent * ) head->item; nextEvent = ( TimerEvent * ) head->item;
nextEventTime = nextEvent->eventTime; nextEventTime = nextEvent->eventTime;
} }
@@ -105,42 +110,54 @@ static void *TimerThreadWorker(
currentTime = time( NULL ); currentTime = time( NULL );
//If time has elapsed, schedule job //If time has elapsed, schedule job
if( ( nextEvent != NULL ) && ( currentTime >= nextEventTime ) ) if( ( nextEvent != NULL ) && ( currentTime >= nextEventTime ) )
{ {
if( nextEvent->persistent ) { if( nextEvent->persistent ) {
ThreadPoolAddPersistent( timer->tp, &nextEvent->job, ThreadPoolAddPersistent( timer->tp, &nextEvent->job,
&tempId ); &tempId );
} else { } else {
ThreadPoolAdd( timer->tp, &nextEvent->job, &tempId ); ThreadPoolAdd( timer->tp, &nextEvent->job, &tempId );
} }
ListDelNode( &timer->eventQ, head, 0 ); ListDelNode( &timer->eventQ, head, 0 );
FreeTimerEvent( timer, nextEvent ); FreeTimerEvent( timer, nextEvent );
continue; continue;
} }
if( nextEvent != NULL ) { if( nextEvent != NULL ) {
timeToWait.tv_nsec = 0; timeToWait.tv_nsec = 0;
timeToWait.tv_sec = nextEvent->eventTime; timeToWait.tv_sec = nextEvent->eventTime;
ithread_cond_timedwait( &timer->condition, &timer->mutex, ithread_cond_timedwait( &timer->condition, &timer->mutex,
&timeToWait ); &timeToWait );
} else { } else {
ithread_cond_wait( &timer->condition, &timer->mutex ); ithread_cond_wait( &timer->condition, &timer->mutex );
} }
} }
} }
/****************************************************************************
/*! * Function: CalculateEventTime
* \brief Calculates the appropriate timeout in absolute seconds
* since Jan 1, 1970.
* *
* \return * Description:
*/ * Calculates the appropriate timeout in absolute seconds since
static int CalculateEventTime( * Jan 1, 1970
/*! [in] Timeout. */ * Internal Only.
time_t *timeout, * Parameters:
/*! [in] Timeout type. */ * time_t *timeout - timeout
TimeoutType type) *
*****************************************************************************/
static int
CalculateEventTime( time_t * timeout,
TimeoutType type )
{ {
time_t now; time_t now;
@@ -158,22 +175,29 @@ static int CalculateEventTime(
} }
/*! /****************************************************************************
* \brief Creates a Timer Event. (Dynamically allocated). * Function: CreateTimerEvent
* *
* \return (TimerEvent *) on success, NULL on failure. * Description:
*/ * Creates a Timer Event. (Dynamically allocated)
static TimerEvent *CreateTimerEvent( * Internal to timer thread.
/*! [in] Valid timer thread pointer. */ * Parameters:
TimerThread *timer, * func - thread function to run.
/*! [in] . */ * arg - argument to function.
ThreadPoolJob *job, * priority - priority of job.
/*! [in] . */ * eventTime - the absoule time of the event
* in seconds from Jan, 1970
* id - id of job
*
* Returns:
* TimerEvent * on success, NULL on failure.
****************************************************************************/
static TimerEvent *
CreateTimerEvent( TimerThread * timer,
ThreadPoolJob * job,
Duration persistent, Duration persistent,
/*! [in] The absoule time of the event in seconds from Jan, 1970. */
time_t eventTime, time_t eventTime,
/*! [in] Id of job. */ int id )
int id)
{ {
TimerEvent *temp = NULL; TimerEvent *temp = NULL;
@@ -191,8 +215,25 @@ static TimerEvent *CreateTimerEvent(
return temp; return temp;
} }
/************************************************************************
int TimerThreadInit(TimerThread *timer, ThreadPool *tp) * Function: TimerThreadInit
*
* Description:
* Initializes and starts timer thread.
*
* Parameters:
* timer - valid timer thread pointer.
* tp - valid thread pool to use. Must be
* started. Must be valid for lifetime
* of timer. Timer must be shutdown
* BEFORE thread pool.
* Return:
* 0 on success, nonzero on failure
* Returns error from ThreadPoolAddPersistent if failure.
************************************************************************/
int
TimerThreadInit( TimerThread * timer,
ThreadPool * tp )
{ {
int rc = 0; int rc = 0;
@@ -249,14 +290,37 @@ int TimerThreadInit(TimerThread *timer, ThreadPool *tp)
} }
/************************************************************************
int TimerThreadSchedule( * Function: TimerThreadSchedule
TimerThread *timer, *
* Description:
* Schedules an event to run at a specified time.
*
* Parameters:
* timer - valid timer thread pointer.
* time_t - time of event.
* either in absolute seconds,
* or relative seconds in the future.
* timeoutType - either ABS_SEC, or REL_SEC.
* if REL_SEC, then the event
* will be scheduled at the
* current time + REL_SEC.
*
* func - function to schedule
* arg - argument to function
* priority - priority of job.
* id - id of timer event. (out)
* Return:
* 0 on success, nonzero on failure
* EOUTOFMEM if not enough memory to schedule job
************************************************************************/
int
TimerThreadSchedule( TimerThread * timer,
time_t timeout, time_t timeout,
TimeoutType type, TimeoutType type,
ThreadPoolJob *job, ThreadPoolJob * job,
Duration duration, Duration duration,
int *id) int *id )
{ {
int rc = EOUTOFMEM; int rc = EOUTOFMEM;
@@ -330,11 +394,28 @@ int TimerThreadSchedule(
return rc; return rc;
} }
/************************************************************************
int TimerThreadRemove( * Function: TimerThreadRemove
TimerThread *timer, *
* Description:
* Removes an event from the timer Q.
* Events can only be removed
* before they have been placed in the
* thread pool.
*
* Parameters:
* timer - valid timer thread pointer.
* id - id of event to remove.
* out - space for returned job (Can be NULL)
* Return:
* 0 on success.
* INVALID_EVENT_ID on error.
*
************************************************************************/
int
TimerThreadRemove( TimerThread * timer,
int id, int id,
ThreadPoolJob *out) ThreadPoolJob * out )
{ {
int rc = INVALID_EVENT_ID; int rc = INVALID_EVENT_ID;
ListNode *tempNode = NULL; ListNode *tempNode = NULL;
@@ -369,8 +450,21 @@ int TimerThreadRemove(
return rc; return rc;
} }
/************************************************************************
int TimerThreadShutdown(TimerThread *timer) * Function: TimerThreadShutdown
*
* Description:
* Shutdown the timer thread
* Events scheduled in the future will NOT be run.
* Timer thread should be shutdown BEFORE it's associated
* thread pool.
* Returns:
* returns 0 if succesfull,
* nonzero otherwise.
* Always returns 0.
***********************************************************************/
int
TimerThreadShutdown( TimerThread * timer )
{ {
ListNode *tempNode2 = NULL; ListNode *tempNode2 = NULL;
ListNode *tempNode = NULL; ListNode *tempNode = NULL;
@@ -423,4 +517,3 @@ int TimerThreadShutdown(TimerThread *timer)
return 0; return 0;
} }

View File

@@ -1,7 +1,7 @@
# #
# "Makefile.am" for "libupnp/upnp" # "Makefile.am" for "libupnp/upnp"
# #
# Copyright (C) 2005 Rémi Turboult <r3mi@users.sourceforge.net> # Copyright (C) 2005 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
# #
SUBDIRS = doc . sample SUBDIRS = doc . sample
@@ -19,20 +19,8 @@ LDADD = \
upnpincludedir = $(includedir)/upnp upnpincludedir = $(includedir)/upnp
upnpinclude_HEADERS = \ upnpinclude_HEADERS = \
inc/ActionComplete.h \
inc/ActionRequest.h \
inc/Discovery.h \
inc/Event.h \
inc/EventSubscribe.h \
inc/FileInfo.h \
inc/StateVarComplete.h \
inc/StateVarRequest.h \
inc/SubscriptionRequest.h \
inc/UpnpString.h \
inc/upnp.h \ inc/upnp.h \
inc/upnpdebug.h \ inc/upnpdebug.h
inc/UpnpGlobal.h \
inc/UpnpInet.h
nodist_upnpinclude_HEADERS = inc/upnpconfig.h nodist_upnpinclude_HEADERS = inc/upnpconfig.h
if ENABLE_TOOLS if ENABLE_TOOLS
@@ -53,12 +41,12 @@ libupnp_la_LDFLAGS = \
libupnp_la_SOURCES = \ libupnp_la_SOURCES = \
src/inc/config.h \ src/inc/config.h \
src/inc/client_table.h \ src/inc/client_table.h \
src/inc/ClientSubscription.h \
src/inc/gena.h \ src/inc/gena.h \
src/inc/gena_ctrlpt.h \ src/inc/gena_ctrlpt.h \
src/inc/gena_device.h \ src/inc/gena_device.h \
src/inc/global.h \ src/inc/global.h \
src/inc/gmtdate.h \ src/inc/gmtdate.h \
src/inc/http_client.h \
src/inc/httpparser.h \ src/inc/httpparser.h \
src/inc/httpreadwrite.h \ src/inc/httpreadwrite.h \
src/inc/md5.h \ src/inc/md5.h \
@@ -84,13 +72,10 @@ libupnp_la_SOURCES = \
src/inc/util.h \ src/inc/util.h \
src/inc/utilall.h \ src/inc/utilall.h \
src/inc/uuid.h \ src/inc/uuid.h \
src/inc/VirtualDir.h \
src/inc/webserver.h src/inc/webserver.h
# ssdp # ssdp
libupnp_la_SOURCES += \ libupnp_la_SOURCES += \
src/ssdp/ssdp_ResultData.c \
src/ssdp/ssdp_ResultData.h \
src/ssdp/ssdp_device.c \ src/ssdp/ssdp_device.c \
src/ssdp/ssdp_ctrlpt.c \ src/ssdp/ssdp_ctrlpt.c \
src/ssdp/ssdp_server.c src/ssdp/ssdp_server.c
@@ -104,13 +89,12 @@ libupnp_la_SOURCES += \
# genlib # genlib
libupnp_la_SOURCES += \ libupnp_la_SOURCES += \
src/genlib/miniserver/miniserver.c \ src/genlib/miniserver/miniserver.c \
src/genlib/client_table/client_table.c \
src/genlib/client_table/ClientSubscription.c \
src/genlib/service_table/service_table.c \ src/genlib/service_table/service_table.c \
src/genlib/util/membuffer.c \ src/genlib/util/membuffer.c \
src/genlib/util/strintmap.c \ src/genlib/util/strintmap.c \
src/genlib/util/upnp_timeout.c \ src/genlib/util/upnp_timeout.c \
src/genlib/util/util.c \ src/genlib/util/util.c \
src/genlib/client_table/client_table.c \
src/genlib/net/sock.c \ src/genlib/net/sock.c \
src/genlib/net/http/httpparser.c \ src/genlib/net/http/httpparser.c \
src/genlib/net/http/httpreadwrite.c \ src/genlib/net/http/httpreadwrite.c \
@@ -126,23 +110,10 @@ libupnp_la_SOURCES += \
src/gena/gena_callback2.c src/gena/gena_callback2.c
# api # api
libupnp_la_SOURCES += \ libupnp_la_SOURCES += src/api/upnpapi.c
src/api/ActionComplete.c \
src/api/ActionRequest.c \
src/api/Discovery.c \
src/api/Event.c \
src/api/EventSubscribe.c \
src/api/FileInfo.c \
src/api/StateVarComplete.c \
src/api/StateVarRequest.c \
src/api/SubscriptionRequest.c \
src/api/UpnpString.c \
src/api/upnpapi.c
if ENABLE_TOOLS if ENABLE_TOOLS
libupnp_la_SOURCES += src/api/upnptools.c libupnp_la_SOURCES += src/api/upnptools.c
endif endif
if ENABLE_DEBUG if ENABLE_DEBUG
libupnp_la_SOURCES += src/api/upnpdebug.c libupnp_la_SOURCES += src/api/upnpdebug.c
endif endif
@@ -159,12 +130,6 @@ libupnp_la_SOURCES += \
libupnp_la_SOURCES += src/urlconfig/urlconfig.c libupnp_la_SOURCES += src/urlconfig/urlconfig.c
# inet_pton (needed on Win32, compiles to nothing elsewhere)
libupnp_la_SOURCES += \
src/inet_pton.c \
src/inc/inet_pton.h
# check / distcheck tests # check / distcheck tests
check_PROGRAMS = test_init check_PROGRAMS = test_init
TESTS = test_init TESTS = test_init
@@ -173,7 +138,8 @@ test_init_SOURCES = test/test_init.c
EXTRA_DIST = \ EXTRA_DIST = \
LICENSE \ LICENSE \
m4/libupnp.m4 \ src/inc/inet_pton.h \
src/inet_pton.c \
src/win_dll.c src/win_dll.c

View File

@@ -1,173 +0,0 @@
#ifndef ACTIONCOMPLETE_H
#define ACTIONCOMPLETE_H
/*!
* \file
*
* \brief UpnpActionComplete object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*!
* \brief The type of an UpnpActionComplete object.
*/
typedef struct s_UpnpActionComplete UpnpActionComplete;
#include "ixml.h" /* for IXML_Document */
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*!
* \brief Constructor.
*
* \return Pointer to the newly created object.
*/
EXPORT_SPEC UpnpActionComplete *UpnpActionComplete_new();
/*!
* \brief Destructor.
*/
EXPORT_SPEC void UpnpActionComplete_delete(
/*! [in] \b this pointer. */
UpnpActionComplete *p);
/*!
* \brief Copy Constructor.
*/
EXPORT_SPEC UpnpActionComplete *UpnpActionComplete_dup(
/*! [in] \b this pointer. */
const UpnpActionComplete *p);
/*!
* \brief Assignment operator.
*/
EXPORT_SPEC void UpnpActionComplete_assign(
/*! [in] \b this pointer. */
UpnpActionComplete *p,
/*! [in] \b that pointer. */
const UpnpActionComplete *q);
/*!
* \brief Error code getter.
*/
EXPORT_SPEC int UpnpActionComplete_get_ErrCode(
/*! [in] \b this pointer. */
const UpnpActionComplete *p);
/*!
* \brief Error code setter.
*/
EXPORT_SPEC void UpnpActionComplete_set_ErrCode(
/*! [in] \b this pointer. */
UpnpActionComplete *p,
/*! [in] The error code to set. */
int n);
/*!
* \brief Control URL getter.
*
* \return The control URL string.
*/
EXPORT_SPEC const UpnpString *UpnpActionComplete_get_CtrlUrl(
/*! [in] \b this pointer. */
const UpnpActionComplete *p);
/*!
* \brief Control URL getter as a C string
*
* \return The control URL string.
*/
EXPORT_SPEC const char *UpnpActionComplete_get_CtrlUrl_cstr(
/*! [in] \b this pointer. */
const UpnpActionComplete *p);
/*!
* \brief Control URL setter.
*/
EXPORT_SPEC void UpnpActionComplete_set_CtrlUrl(
/*! [in] \b this pointer. */
UpnpActionComplete *p,
/*! [in] The control URL string to copy. */
const UpnpString *s);
/*!
* \brief Set the control URL from a null terminated C string.
*/
EXPORT_SPEC void UpnpActionComplete_strcpy_CtrlUrl(
/*! [in] \b this pointer. */
UpnpActionComplete *p,
/*! [in] The null terminated control URL C string to copy. */
const char *s);
/*!
* \brief ActionRequest document getter.
*
* \return A pointer to the document object.
*/
EXPORT_SPEC IXML_Document *UpnpActionComplete_get_ActionRequest(
/*! [in] \b this pointer. */
const UpnpActionComplete *p);
/*!
* \brief ActionRequest document setter.
*
* \note The ActionComplete object takes ownership of the document parameter,
* i.e. it is responsible for deleting it upon destruction.
*/
EXPORT_SPEC void UpnpActionComplete_set_ActionRequest(
/*! [in] \b this pointer. */
UpnpActionComplete *p,
/*! [in] Document to copy. */
IXML_Document *d);
/*!
* \brief ActionResult document getter.
*/
EXPORT_SPEC IXML_Document *UpnpActionComplete_get_ActionResult(
/*! [in] \b this pointer. */
const UpnpActionComplete *p);
/*!
* \brief ActionResult document setter.
*
* \note The ActionComplete object takes ownership of the document parameter,
* i.e. it is responsible for deleting it upon destruction.
*/
EXPORT_SPEC void UpnpActionComplete_set_ActionResult(
/*! [in] \b this pointer. */
UpnpActionComplete *p,
/*! [in] Document to copy. */
IXML_Document *d);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* ACTIONCOMPLETE_H */

View File

@@ -1,96 +0,0 @@
#ifndef ACTIONREQUEST_H
#define ACTIONREQUEST_H
/*!
* \file
*
* \brief UpnpActionRequest object declaration.
*
* \author Marcelo Roberto Jimenez
*/
/*! Returned as part of a \b UPNP_CONTROL_ACTION_COMPLETE callback. */
typedef struct s_UpnpActionRequest UpnpActionRequest;
#include "ixml.h" /* for IXML_Document */
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpInet.h" /* for sockaddr, sockaddr_storage */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpActionRequest *UpnpActionRequest_new();
/*! Destructor */
EXPORT_SPEC void UpnpActionRequest_delete(UpnpActionRequest *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpActionRequest *UpnpActionRequest_dup(const UpnpActionRequest *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpActionRequest_assign(UpnpActionRequest *p, const UpnpActionRequest *q);
/*! The result of the operation */
EXPORT_SPEC int UpnpActionRequest_get_ErrCode(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_ErrCode(UpnpActionRequest *p, int n);
/*! The socket number of the connection to the requestor */
EXPORT_SPEC int UpnpActionRequest_get_Socket(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_Socket(UpnpActionRequest *p, int n);
/*! The error string in case of error */
EXPORT_SPEC const UpnpString *UpnpActionRequest_get_ErrStr(const UpnpActionRequest *p);
EXPORT_SPEC const char *UpnpActionRequest_get_ErrStr_cstr(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_ErrStr(UpnpActionRequest *p, const UpnpString *s);
EXPORT_SPEC void UpnpActionRequest_strcpy_ErrStr(UpnpActionRequest *p, const char *s);
/*! The Action Name */
EXPORT_SPEC const UpnpString *UpnpActionRequest_get_ActionName(const UpnpActionRequest *p);
EXPORT_SPEC const char *UpnpActionRequest_get_ActionName_cstr(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_ActionName(UpnpActionRequest *p, const UpnpString *s);
EXPORT_SPEC void UpnpActionRequest_strcpy_ActionName(UpnpActionRequest *p, const char *s);
/*! The unique device ID */
EXPORT_SPEC const UpnpString *UpnpActionRequest_get_DevUDN(const UpnpActionRequest *p);
EXPORT_SPEC const char *UpnpActionRequest_get_DevUDN_cstr(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_DevUDN(UpnpActionRequest *p, const UpnpString *s);
/*! The service ID */
EXPORT_SPEC const UpnpString *UpnpActionRequest_get_ServiceID(const UpnpActionRequest *p);
EXPORT_SPEC const char *UpnpActionRequest_get_ServiceID_cstr(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_ServiceID(UpnpActionRequest *p, const UpnpString *s);
/*! The DOM document describing the action */
EXPORT_SPEC IXML_Document *UpnpActionRequest_get_ActionRequest(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_ActionRequest(UpnpActionRequest *p, IXML_Document *d);
/*! The DOM document describing the result of the action */
EXPORT_SPEC IXML_Document *UpnpActionRequest_get_ActionResult(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_ActionResult(UpnpActionRequest *p, IXML_Document *d);
/*! The DOM document containing the information from the SOAP header */
EXPORT_SPEC IXML_Document *UpnpActionRequest_get_SoapHeader(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_SoapHeader(UpnpActionRequest *p, IXML_Document *d);
/*! IP address of the control point requesting this action */
EXPORT_SPEC const struct sockaddr *UpnpActionRequest_get_CtrlPtIPAddr(const UpnpActionRequest *p);
EXPORT_SPEC void UpnpActionRequest_set_CtrlPtIPAddr(UpnpActionRequest *p, const struct sockaddr *sa);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* ACTIONREQUEST_H */

View File

@@ -1,112 +0,0 @@
#ifndef DISCOVERY_H
#define DISCOVERY_H
/*!
* \file
*
* \brief UpnpDiscovery object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*! Returned in a \b UPNP_DISCOVERY_RESULT callback. */
typedef struct s_UpnpDiscovery UpnpDiscovery;
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpInet.h" /* for sockaddr, sockaddr_storage */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpDiscovery *UpnpDiscovery_new();
/*! Destructor */
EXPORT_SPEC void UpnpDiscovery_delete(UpnpDiscovery *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpDiscovery *UpnpDiscovery_dup(const UpnpDiscovery *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpDiscovery_assign(UpnpDiscovery *p, const UpnpDiscovery *q);
/*! The result code of the \b UpnpSearchAsync call. */
EXPORT_SPEC int UpnpDiscovery_get_ErrCode(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_ErrCode(UpnpDiscovery *p, int n);
/*! The expiration time of the advertisement. */
EXPORT_SPEC int UpnpDiscovery_get_Expires(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_Expires(UpnpDiscovery *p, int n);
/*! The unique device identifier. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_DeviceID(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_DeviceID_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_DeviceID(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_DeviceID(UpnpDiscovery *p, const char *s);
/*! The device type. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_DeviceType(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_DeviceType_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_DeviceType(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_DeviceType(UpnpDiscovery *p, const char *s);
/*! The ServiceType. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_ServiceType(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_ServiceType_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_ServiceType(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_ServiceType(UpnpDiscovery *p, const char *s);
/*! The service version. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_ServiceVer(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_ServiceVer_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_ServiceVer(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_ServiceVer(UpnpDiscovery *p, const char *s);
/*! The URL to the UPnP description document for the device. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_Location(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_Location_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_Location(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_Location(UpnpDiscovery *p, const char *s);
EXPORT_SPEC void UpnpDiscovery_strncpy_Location(UpnpDiscovery *p, const char *s, int n);
/*! The operating system the device is running. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_Os(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_Os_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_Os(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_Os(UpnpDiscovery *p, const char *s);
EXPORT_SPEC void UpnpDiscovery_strncpy_Os(UpnpDiscovery *p, const char *s, int n);
/*! Date when the response was generated. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_Date(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_Date_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_Date(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_Date(UpnpDiscovery *p, const char *s);
/*! Confirmation that the MAN header was understood by the device. */
EXPORT_SPEC const UpnpString *UpnpDiscovery_get_Ext(const UpnpDiscovery *p);
EXPORT_SPEC const char *UpnpDiscovery_get_Ext_cstr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_Ext(UpnpDiscovery *p, const UpnpString *s);
EXPORT_SPEC void UpnpDiscovery_strcpy_Ext(UpnpDiscovery *p, const char *s);
EXPORT_SPEC void UpnpDiscovery_strncpy_Ext(UpnpDiscovery *p, const char *s, int n);
/*! The host address of the device responding to the search. */
EXPORT_SPEC const struct sockaddr *UpnpDiscovery_get_DestAddr(const UpnpDiscovery *p);
EXPORT_SPEC void UpnpDiscovery_set_DestAddr(UpnpDiscovery *p, const struct sockaddr *sa);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* DISCOVERY_H */

View File

@@ -1,62 +0,0 @@
#ifndef EVENT_H
#define EVENT_H
/*!
* \file
*
* \brief UpnpEvent object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*! Returned along with a \b UPNP_EVENT_RECEIVED callback. */
typedef struct s_UpnpEvent UpnpEvent;
#include "ixml.h" /* for IXML_Document */
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpEvent *UpnpEvent_new();
/*! Destructor */
EXPORT_SPEC void UpnpEvent_delete(UpnpEvent *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpEvent *UpnpEvent_dup(const UpnpEvent *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpEvent_assign(UpnpEvent *p, const UpnpEvent *q);
/*! The event sequence number. */
EXPORT_SPEC int UpnpEvent_get_EventKey(const UpnpEvent *p);
EXPORT_SPEC void UpnpEvent_set_EventKey(UpnpEvent *p, int n);
/*! The DOM tree representing the changes generating the event. */
EXPORT_SPEC IXML_Document *UpnpEvent_get_ChangedVariables(const UpnpEvent *p);
EXPORT_SPEC void UpnpEvent_set_ChangedVariables(UpnpEvent *p, IXML_Document *d);
/*! The subscription ID for this subscription. */
EXPORT_SPEC const UpnpString *UpnpEvent_get_SID(const UpnpEvent *p);
EXPORT_SPEC const char *UpnpEvent_get_SID_cstr(const UpnpEvent *p);
EXPORT_SPEC void UpnpEvent_set_SID(UpnpEvent *p, const UpnpString *s);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* EVENT_H */

View File

@@ -1,74 +0,0 @@
#ifndef EVENTSUBSCRIBE_H
#define EVENTSUBSCRIBE_H
/*!
* \file
*
* \brief UpnpEventSubscribe object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*! Returned along with a \b UPNP_EVENT_SUBSCRIBE_COMPLETE or
* \b UPNP_EVENT_UNSUBSCRIBE_COMPLETE callback. */
typedef struct s_UpnpEventSubscribe UpnpEventSubscribe;
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpEventSubscribe *UpnpEventSubscribe_new();
/*! Destructor */
EXPORT_SPEC void UpnpEventSubscribe_delete(UpnpEventSubscribe *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpEventSubscribe *UpnpEventSubscribe_dup(const UpnpEventSubscribe *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpEventSubscribe_assign(UpnpEventSubscribe *p, const UpnpEventSubscribe *q);
/*! The result of the operation. */
EXPORT_SPEC int UpnpEventSubscribe_get_ErrCode(const UpnpEventSubscribe *p);
EXPORT_SPEC void UpnpEventSubscribe_set_ErrCode(UpnpEventSubscribe *p, int n);
/*! The actual subscription time (for subscriptions only). */
EXPORT_SPEC int UpnpEventSubscribe_get_TimeOut(const UpnpEventSubscribe *p);
EXPORT_SPEC void UpnpEventSubscribe_set_TimeOut(UpnpEventSubscribe *p, int n);
/*! The SID for this subscription. For subscriptions, this only
* contains a valid SID if the \b Upnp_EventSubscribe.result field
* contains a \b UPNP_E_SUCCESS result code. For unsubscriptions,
* this contains the SID from which the subscription is being
* unsubscribed. */
EXPORT_SPEC const UpnpString *UpnpEventSubscribe_get_SID(const UpnpEventSubscribe *p);
EXPORT_SPEC const char *UpnpEventSubscribe_get_SID_cstr(const UpnpEventSubscribe *p);
EXPORT_SPEC void UpnpEventSubscribe_set_SID(UpnpEventSubscribe *p, const UpnpString *s);
EXPORT_SPEC void UpnpEventSubscribe_strcpy_SID(UpnpEventSubscribe *p, const char *s);
/*! The event URL being subscribed to or removed from. */
EXPORT_SPEC const UpnpString *UpnpEventSubscribe_get_PublisherUrl(const UpnpEventSubscribe *p);
EXPORT_SPEC const char *UpnpEventSubscribe_get_PublisherUrl_cstr(const UpnpEventSubscribe *p);
EXPORT_SPEC void UpnpEventSubscribe_set_PublisherUrl(UpnpEventSubscribe *p, const UpnpString *s);
EXPORT_SPEC void UpnpEventSubscribe_strcpy_PublisherUrl(UpnpEventSubscribe *p, const char *s);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* EVENTSUBSCRIBE_H */

View File

@@ -1,84 +0,0 @@
#ifndef FILEINFO_H
#define FILEINFO_H
/*!
* \file
*
* \brief UpnpFileInfo object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*! Detailed description of this class should go here */
typedef struct s_UpnpFileInfo UpnpFileInfo;
#include "ixml.h" /* for DOMString */
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include <sys/types.h> /* for off_t */
#include <time.h> /* for time_t */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpFileInfo *UpnpFileInfo_new();
/*! Destructor */
EXPORT_SPEC void UpnpFileInfo_delete(UpnpFileInfo *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpFileInfo *UpnpFileInfo_dup(const UpnpFileInfo *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpFileInfo_assign(UpnpFileInfo *p, const UpnpFileInfo *q);
/*! 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. */
EXPORT_SPEC off_t UpnpFileInfo_get_FileLength(const UpnpFileInfo *p);
EXPORT_SPEC void UpnpFileInfo_set_FileLength(UpnpFileInfo *p, off_t l);
/*! The time at which the contents of the file was modified;
* The time system is always local (not GMT). */
EXPORT_SPEC const time_t *UpnpFileInfo_get_LastModified(const UpnpFileInfo *p);
EXPORT_SPEC void UpnpFileInfo_set_LastModified(UpnpFileInfo *p, const time_t *t);
/*! If the file is a directory, \b is_directory contains
* a non-zero value. For a regular file, it should be 0. */
EXPORT_SPEC int UpnpFileInfo_get_IsDirectory(const UpnpFileInfo *p);
EXPORT_SPEC void UpnpFileInfo_set_IsDirectory(UpnpFileInfo *p, int b);
/*! If the file or directory is readable, this contains
* a non-zero value. If unreadable, it should be set to 0. */
EXPORT_SPEC int UpnpFileInfo_get_IsReadable(const UpnpFileInfo *p);
EXPORT_SPEC void UpnpFileInfo_set_IsReadable(UpnpFileInfo *p, int b);
/*! The content type of the file. */
EXPORT_SPEC const DOMString UpnpFileInfo_get_ContentType(const UpnpFileInfo *p);
EXPORT_SPEC const char *UpnpFileInfo_get_ContentType_cstr(const UpnpFileInfo *p);
EXPORT_SPEC void UpnpFileInfo_set_ContentType(UpnpFileInfo *p, const DOMString s);
/*! Additional HTTP headers to return. Each header line should be
* followed by "\r\n". */
EXPORT_SPEC const DOMString UpnpFileInfo_get_ExtraHeaders(const UpnpFileInfo *p);
EXPORT_SPEC const char *UpnpFileInfo_get_ExtraHeaders_cstr(const UpnpFileInfo *p);
EXPORT_SPEC void UpnpFileInfo_set_ExtraHeaders(UpnpFileInfo *p, const DOMString s);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* FILEINFO_H */

View File

@@ -1,72 +0,0 @@
#ifndef STATEVARCOMPLETE_H
#define STATEVARCOMPLETE_H
/*!
* \file
*
* \brief UpnpStateVarComplete object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*! Represents the reply for the current value of a state variable in an
* asynchronous call. */
typedef struct s_UpnpStateVarComplete UpnpStateVarComplete;
#include "ixml.h" /* for DOMString */
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpStateVarComplete *UpnpStateVarComplete_new();
/*! Destructor */
EXPORT_SPEC void UpnpStateVarComplete_delete(UpnpStateVarComplete *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpStateVarComplete *UpnpStateVarComplete_dup(const UpnpStateVarComplete *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpStateVarComplete_assign(UpnpStateVarComplete *p, const UpnpStateVarComplete *q);
/*! The result of the operation */
EXPORT_SPEC int UpnpStateVarComplete_get_ErrCode(const UpnpStateVarComplete *p);
EXPORT_SPEC void UpnpStateVarComplete_set_ErrCode(UpnpStateVarComplete *p, int n);
/*! The control URL for the service. */
EXPORT_SPEC const UpnpString *UpnpStateVarComplete_get_CtrlUrl(const UpnpStateVarComplete *p);
EXPORT_SPEC const char *UpnpStateVarComplete_get_CtrlUrl_cstr(const UpnpStateVarComplete *p);
EXPORT_SPEC void UpnpStateVarComplete_set_CtrlUrl(UpnpStateVarComplete *p, const UpnpString *s);
EXPORT_SPEC void UpnpStateVarComplete_strcpy_CtrlUrl(UpnpStateVarComplete *p, const char *s);
/*! The name of the variable. */
EXPORT_SPEC const UpnpString *UpnpStateVarComplete_get_StateVarName(const UpnpStateVarComplete *p);
EXPORT_SPEC const char *UpnpStateVarComplete_get_StateVarName_cstr(const UpnpStateVarComplete *p);
EXPORT_SPEC void UpnpStateVarComplete_set_StateVarName(UpnpStateVarComplete *p, const UpnpString *s);
EXPORT_SPEC void UpnpStateVarComplete_strcpy_StateVarName(UpnpStateVarComplete *p, const char *s);
/*! The current value of the variable. This needs to be allocated by
* the caller. When finished with it, the SDK frees this \b DOMString. */
EXPORT_SPEC const DOMString UpnpStateVarComplete_get_CurrentVal(const UpnpStateVarComplete *p);
EXPORT_SPEC const char *UpnpStateVarComplete_get_CurrentVal_cstr(const UpnpStateVarComplete *p);
EXPORT_SPEC void UpnpStateVarComplete_set_CurrentVal(UpnpStateVarComplete *p, const DOMString s);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* STATEVARCOMPLETE_H */

View File

@@ -1,91 +0,0 @@
#ifndef STATEVARREQUEST_H
#define STATEVARREQUEST_H
/*!
* \file
*
* \brief UpnpStateVarRequest object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*! Represents the request for current value of a state variable in a service
* state table. */
typedef struct s_UpnpStateVarRequest UpnpStateVarRequest;
#include "ixml.h" /* for DOMString */
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpInet.h" /* for sockaddr, sockaddr_storage */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpStateVarRequest *UpnpStateVarRequest_new();
/*! Destructor */
EXPORT_SPEC void UpnpStateVarRequest_delete(UpnpStateVarRequest *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpStateVarRequest *UpnpStateVarRequest_dup(const UpnpStateVarRequest *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpStateVarRequest_assign(UpnpStateVarRequest *p, const UpnpStateVarRequest *q);
/*! The result of the operation */
EXPORT_SPEC int UpnpStateVarRequest_get_ErrCode(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_ErrCode(UpnpStateVarRequest *p, int n);
/*! The socket number of the connection to the requestor */
EXPORT_SPEC int UpnpStateVarRequest_get_Socket(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_Socket(UpnpStateVarRequest *p, int n);
/*! The error string in case of error */
EXPORT_SPEC const UpnpString *UpnpStateVarRequest_get_ErrStr(const UpnpStateVarRequest *p);
EXPORT_SPEC const char *UpnpStateVarRequest_get_ErrStr_cstr(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_ErrStr(UpnpStateVarRequest *p, const UpnpString *s);
EXPORT_SPEC void UpnpStateVarRequest_strcpy_ErrStr(UpnpStateVarRequest *p, const char *s);
/*! The unique device ID */
EXPORT_SPEC const UpnpString *UpnpStateVarRequest_get_DevUDN(const UpnpStateVarRequest *p);
EXPORT_SPEC const char *UpnpStateVarRequest_get_DevUDN_cstr(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_DevUDN(UpnpStateVarRequest *p, const UpnpString *s);
/*! The service ID */
EXPORT_SPEC const UpnpString *UpnpStateVarRequest_get_ServiceID(const UpnpStateVarRequest *p);
EXPORT_SPEC const char *UpnpStateVarRequest_get_ServiceID_cstr(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_ServiceID(UpnpStateVarRequest *p, const UpnpString *s);
/*! The name of the variable. */
EXPORT_SPEC const UpnpString *UpnpStateVarRequest_get_StateVarName(const UpnpStateVarRequest *p);
EXPORT_SPEC const char *UpnpStateVarRequest_get_StateVarName_cstr(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_StateVarName(UpnpStateVarRequest *p, const UpnpString *s);
EXPORT_SPEC void UpnpStateVarRequest_strcpy_StateVarName(UpnpStateVarRequest *p, const char *s);
/*! IP address of sender requesting the state variable. */
EXPORT_SPEC const struct sockaddr *UpnpStateVarRequest_get_CtrlPtIPAddr(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_CtrlPtIPAddr(UpnpStateVarRequest *p, const struct sockaddr *sa);
/*! The current value of the variable. This needs to be allocated by
* the caller. When finished with it, the SDK frees this \b DOMString. */
EXPORT_SPEC const DOMString UpnpStateVarRequest_get_CurrentVal(const UpnpStateVarRequest *p);
EXPORT_SPEC const char *UpnpStateVarRequest_get_CurrentVal_cstr(const UpnpStateVarRequest *p);
EXPORT_SPEC void UpnpStateVarRequest_set_CurrentVal(UpnpStateVarRequest *p, const DOMString s);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* STATEVARREQUEST_H */

View File

@@ -1,66 +0,0 @@
#ifndef SUBSCRIPTIONREQUEST_H
#define SUBSCRIPTIONREQUEST_H
/*!
* \file
*
* \brief UpnpSubscriptionRequest object declararion.
*
* \author Marcelo Roberto Jimenez
*/
/*! Returned along with a \b UPNP_EVENT_SUBSCRIPTION_REQUEST callback. */
typedef struct s_UpnpSubscriptionRequest UpnpSubscriptionRequest;
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#include "UpnpString.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! Constructor */
EXPORT_SPEC UpnpSubscriptionRequest *UpnpSubscriptionRequest_new();
/*! Destructor */
EXPORT_SPEC void UpnpSubscriptionRequest_delete(UpnpSubscriptionRequest *p);
/*! Copy Constructor */
EXPORT_SPEC UpnpSubscriptionRequest *UpnpSubscriptionRequest_dup(const UpnpSubscriptionRequest *p);
/*! Assignment operator */
EXPORT_SPEC void UpnpSubscriptionRequest_assign(UpnpSubscriptionRequest *p, const UpnpSubscriptionRequest *q);
/*! The identifier for the service being subscribed to. */
EXPORT_SPEC const UpnpString *UpnpSubscriptionRequest_get_ServiceId(const UpnpSubscriptionRequest *p);
EXPORT_SPEC const char *UpnpSubscriptionRequest_get_ServiceId_cstr(const UpnpSubscriptionRequest *p);
EXPORT_SPEC void UpnpSubscriptionRequest_set_ServiceId(UpnpSubscriptionRequest *p, const UpnpString *s);
EXPORT_SPEC void UpnpSubscriptionRequest_strcpy_ServiceId(UpnpSubscriptionRequest *p, const char *s);
/*! Universal device name. */
EXPORT_SPEC const UpnpString *UpnpSubscriptionRequest_get_UDN(const UpnpSubscriptionRequest *p);
EXPORT_SPEC const char *UpnpSubscriptionRequest_get_UDN_cstr(const UpnpSubscriptionRequest *p);
EXPORT_SPEC void UpnpSubscriptionRequest_set_UDN(UpnpSubscriptionRequest *p, const UpnpString *s);
EXPORT_SPEC void UpnpSubscriptionRequest_strcpy_UDN(UpnpSubscriptionRequest *p, const char *s);
/*! The assigned subscription ID for this subscription. */
EXPORT_SPEC const UpnpString *UpnpSubscriptionRequest_get_SID(const UpnpSubscriptionRequest *p);
EXPORT_SPEC const char *UpnpSubscriptionRequest_get_SID_cstr(const UpnpSubscriptionRequest *p);
EXPORT_SPEC void UpnpSubscriptionRequest_set_SID(UpnpSubscriptionRequest *p, const UpnpString *s);
EXPORT_SPEC void UpnpSubscriptionRequest_strcpy_SID(UpnpSubscriptionRequest *p, const char *s);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SUBSCRIPTIONREQUEST_H */

View File

@@ -1,120 +0,0 @@
#ifndef UPNPGLOBAL_H
#define UPNPGLOBAL_H
/*!
* \file
*
* \brief Defines constants that for some reason are not defined on some systems.
*/
#if defined MYLIB_LARGEFILE_SENSITIVE && _FILE_OFFSET_BITS+0 != 64
#if defined __GNUC__
#warning libupnp requires largefile mode - use AC_SYS_LARGEFILE
#else
#error libupnp requires largefile mode - use AC_SYS_LARGEFILE
#endif
#endif
#ifdef WIN32
/*
* EXPORT_SPEC
*/
#ifdef UPNP_STATIC_LIB
#define EXPORT_SPEC
#else /* UPNP_STATIC_LIB */
#ifdef LIBUPNP_EXPORTS
/*! set up declspec for dll export to make functions
* visible to library users */
#define EXPORT_SPEC __declspec(dllexport)
#else /* LIBUPNP_EXPORTS */
#define EXPORT_SPEC __declspec(dllimport)
#endif /* LIBUPNP_EXPORTS */
#endif /* UPNP_STATIC_LIB */
/*
* UPNP_INLINE
* PRId64
* PRIzu
*/
#ifdef UPNP_USE_MSVCPP
/* define some things the M$ VC++ doesn't know */
#define UPNP_INLINE
typedef __int64 int64_t;
#define PRId64 "I64d"
#define PRIzu "lu"
#endif /* UPNP_USE_MSVCPP */
#ifdef UPNP_USE_BCBPP
/* define some things Borland Builder doesn't know */
#define UPNP_INLINE inline
typedef __int64 int64_t;
#warning The Borland C compiler is probably broken on PRId64,
#warning please someone provide a proper fix here
#define PRId64 "I64d"
#define PRIzu "zu"
#endif /* UPNP_USE_BCBPP */
#ifdef __GNUC__
#define UPNP_INLINE inline
/* Note with PRIzu that in the case of Mingw32, it's the MS C
* runtime printf which ends up getting called, not the glibc
* printf, so it genuinely doesn't have "zu"
*/
#define PRIzu "lu"
#endif /* __GNUC__ */
#else
/*!
* \brief Export functions on WIN32 DLLs.
*
* Every funtion that belongs to the library API must use this
* definition upon declaration or it will not be exported on WIN32
* DLLs.
*/
#define EXPORT_SPEC
/*!
* \brief Declares an inline function.
*
* Surprisingly, there are some compilers that do not understand the
* inline keyword. This definition makes the use of this keyword
* portable to these systems.
*/
#define UPNP_INLINE inline
/*!
* \brief Supply the PRId64 printf() macro.
*
* MSVC still does not know about this.
*/
/* #define PRId64 PRId64 */
/*!
* \brief Supply the PRIzu printf() macro.
*
* This macro was invented so that we can live a little longer with
* MSVC lack of C99. "z" is the correct printf() size specifier for
* the size_t type.
*/
#define PRIzu "zu"
#endif
/*
* Defining this macro here gives some interesting information about unused
* functions in the code. Of course, this should never go uncommented on a
* release.
*/
/*#define inline*/
#endif /* UPNPGLOBAL_H */

View File

@@ -1,30 +0,0 @@
#ifndef UPNPINET_H
#define UPNPINET_H
/*!
* \file
*
* \brief Provides a platform independent way to include TCP/IP types and functions.
*/
#ifdef WIN32
#include <winsock2.h>
#include <Ws2tcpip.h>
#else
#include <sys/param.h>
#if (defined(BSD) && BSD >= 199306) || defined (__FreeBSD_kernel__)
#include <ifaddrs.h>
/* Do not move or remove the include below for "sys/socket"!
* Will break FreeBSD builds. */
#include <sys/socket.h>
#endif
#include <netinet/in.h>
#endif
#endif /* UPNPINET_H */

View File

@@ -1,133 +0,0 @@
#ifndef STRING_H
#define STRING_H
/*!
* \defgroup UpnpString The UpnpString Class
*
* \brief Implements string operations in the UPnP library.
*
* \author Marcelo Roberto Jimenez
*
* \version 1.0
*
* @{
*
* \file
*
* \brief UpnpString object declarartion.
*/
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*!
* \brief Type of the string objects inside libupnp.
*/
typedef struct s_UpnpString UpnpString;
/*!
* \brief Constructor.
*
* \return A pointer to a new allocated object.
*/
EXPORT_SPEC UpnpString *UpnpString_new();
/*!
* \brief Destructor.
*/
EXPORT_SPEC void UpnpString_delete(
/*! [in] The \em \b this pointer. */
UpnpString *p);
/*!
* \brief Copy Constructor.
*
* \return A pointer to a new allocated copy of the original object.
*/
EXPORT_SPEC UpnpString *UpnpString_dup(
/*! [in] The \em \b this pointer. */
const UpnpString *p);
/*!
* \brief Assignment operator.
*/
EXPORT_SPEC void UpnpString_assign(
/*! [in] The \em \b this pointer. */
UpnpString *p,
/*! [in] The \em \b that pointer. */
const UpnpString *q);
/*!
* \brief Returns the length of the string.
*
* \return The length of the string.
* */
EXPORT_SPEC int UpnpString_get_Length(
/*! [in] The \em \b this pointer. */
const UpnpString *p);
/*!
* \brief Returns the pointer to char.
*
* \return The pointer to char.
*/
EXPORT_SPEC const char *UpnpString_get_String(
/*! [in] The \em \b this pointer. */
const UpnpString *p);
/*!
* \brief Sets the string from a pointer to char.
*/
EXPORT_SPEC void UpnpString_set_String(
/*! [in] The \em \b this pointer. */
UpnpString *p,
/*! [in] (char *) to copy from. */
const char *s);
/*!
* \brief Sets the string from a pointer to char using a maximum of N chars.
*/
EXPORT_SPEC void UpnpString_set_StringN(
/*! [in] The \em \b this pointer. */
UpnpString *p,
/*! [in] (char *) to copy from. */
const char *s,
/*! Maximum number of chars to copy.*/
int n);
/*!
* \brief Clears the string, sets its size to zero.
*/
EXPORT_SPEC void UpnpString_clear(
/*! [in] The \em \b this pointer. */
UpnpString *p);
#ifdef __cplusplus
}
#endif /* __cplusplus */
/* @} UpnpString The UpnpString API */
#endif /* STRING_H */

File diff suppressed because it is too large Load Diff

View File

@@ -7,12 +7,12 @@
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
* - Redistributions of source code must retain the above copyright notice, * * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. * this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, * * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation * this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. * and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors * * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
@@ -33,34 +33,25 @@
#ifndef UPNP_DEBUG_H #ifndef UPNP_DEBUG_H
#define UPNP_DEBUG_H #define UPNP_DEBUG_H
#include "upnp.h"
/*!
* \file
*/
#include "ThreadPool.h"
#include "upnpconfig.h" #include "upnpconfig.h"
#include "UpnpGlobal.h" /* for UPNP_INLINE */
#include <stdio.h> #include <stdio.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/** \name Other debugging features /** @name Other debugging features
* The UPnP SDK contains other features to aid in debugging.
* The UPnP SDK contains other features to aid in debugging.
*/ */
/*@{*/
/** \name Upnp_LogLevel /*! @{ */
/** @name Upnp_LogLevel
* The user has the option to select 4 different types of debugging levels, * The user has the option to select 4 different types of debugging levels,
* see \c UpnpSetLogLevel. * see {\tt UpnpSetLogLevel}.
* The critical level will show only those messages * The critical level will show only those messages
* which can halt the normal processing of the library, like memory * which can halt the normal processing of the library, like memory
* allocation errors. The remaining three levels are just for debugging * allocation errors. The remaining three levels are just for debugging
@@ -69,11 +60,14 @@ extern "C" {
* Info Level displays the other important operational information * Info Level displays the other important operational information
* regarding the working of the library. If the user selects All, * regarding the working of the library. If the user selects All,
* then the library displays all the debugging information that it has. * then the library displays all the debugging information that it has.
* \li \c UPNP_CRITICAL [0] * \begin{itemize}
* \li \c UPNP_PACKET [1] * \item {\tt UPNP_CRITICAL [0]}
* \li \c UPNP_INFO [2] * \item {\tt UPNP_PACKET [1]}
* \li \c UPNP_ALL [3] * \item {\tt UPNP_INFO [2]}
* \item {\tt UPNP_ALL [3]}
* \end{itemize}
*/ */
typedef enum Upnp_Module { typedef enum Upnp_Module {
SSDP, SSDP,
SOAP, SOAP,
@@ -85,69 +79,91 @@ typedef enum Upnp_Module {
HTTP HTTP
} Dbg_Module; } Dbg_Module;
/*! @{ */
/*@{*/
typedef enum Upnp_LogLevel_e { typedef enum Upnp_LogLevel_e {
UPNP_CRITICAL, UPNP_CRITICAL,
UPNP_PACKET, UPNP_PACKET,
UPNP_INFO, UPNP_INFO,
UPNP_ALL UPNP_ALL
} Upnp_LogLevel; } Upnp_LogLevel;
/*@}*/ /*! @} */
/** /**
* Default log level : see \c Upnp_LogLevel * Default log level : see {\tt Upnp_LogLevel}
*/ */
#define UPNP_DEFAULT_LOG_LEVEL UPNP_ALL #define UPNP_DEFAULT_LOG_LEVEL UPNP_ALL
/*! /***************************************************************************
* \brief Initialize the log files. * Function : UpnpInitLog
* *
* \return -1 if fails or UPNP_E_SUCCESS if succeeds. * Parameters: void
*/ *
* Description:
* This functions initializes the log files
*
* Returns: int
* -1 : If fails
* UPNP_E_SUCCESS : if success
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
int UpnpInitLog(void); int UpnpInitLog();
#else #else
static UPNP_INLINE int UpnpInitLog(void) static UPNP_INLINE int UpnpInitLog() { return UPNP_E_SUCCESS; }
{
return UPNP_E_SUCCESS;
}
#endif #endif
/*! /***************************************************************************
* \brief Set the log level (see \c Upnp_LogLevel). * Function : UpnpSetLogLevel
*/ *
* Parameters: Upnp_LogLevel log_level
*
* Description:
* This functions set the log level (see {\tt Upnp_LogLevel}
* Returns: void
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void UpnpSetLogLevel( void UpnpSetLogLevel(Upnp_LogLevel log_level);
/*! [in] Log level. */
Upnp_LogLevel log_level);
#else #else
static UPNP_INLINE void UpnpSetLogLevel(Upnp_LogLevel log_level) {} static UPNP_INLINE void UpnpSetLogLevel(Upnp_LogLevel log_level) {}
#endif #endif
/*! /***************************************************************************
* \brief Closes the log files. * Function : UpnpCloseLog
*/ *
* Parameters: void
*
* Description:
* This functions closes the log files
* Returns: void
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void UpnpCloseLog(void); void UpnpCloseLog();
#else #else
static UPNP_INLINE void UpnpCloseLog(void) {} static UPNP_INLINE void UpnpCloseLog() {}
#endif #endif
/*! /***************************************************************************
* \brief Set the name for error and information files, respectively. * Function : UpnpSetLogFileNames
*/ *
* Parameters:
* IN const char* ErrFileName: name of the error file
* IN const char *InfoFileName: name of the information file
* IN int size: Size of the buffer
* IN int starLength: This parameter provides the width of the banner
*
* Description:
* This functions takes the buffer and writes the buffer in the file as
* per the requested banner
* Returns: void
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void UpnpSetLogFileNames( void UpnpSetLogFileNames(
/*! [in] Name of the error file. */
const char *ErrFileName, const char *ErrFileName,
/*! [in] Name of the information file. */
const char *InfoFileName); const char *InfoFileName);
#else #else
static UPNP_INLINE void UpnpSetLogFileNames( static UPNP_INLINE void UpnpSetLogFileNames(
@@ -156,20 +172,24 @@ static UPNP_INLINE void UpnpSetLogFileNames(
#endif #endif
/*! /***************************************************************************
* \brief Check if the module is turned on for debug and returns the file * Function : UpnpGetDebugFile
* descriptor corresponding to the debug level
* *
* \return NULL if the module is turn off for debug otheriwse returns the * Parameters:
* right file descriptor. * IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
*/ * whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
*
* Description:
* This function checks if the module is turned on for debug
* and returns the file descriptor corresponding to the debug level
* Returns: FILE *
* NULL : if the module is turn off for debug
* else returns the right file descriptor
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
FILE *UpnpGetDebugFile( FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module);
/*! [in] The level of the debug logging. It will decide whether debug
* statement will go to standard output, or any of the log files. */
Upnp_LogLevel level,
/*! [in] debug will go in the name of this module. */
Dbg_Module module);
#else #else
static UPNP_INLINE FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module) static UPNP_INLINE FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module)
{ {
@@ -178,47 +198,60 @@ static UPNP_INLINE FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module
#endif #endif
/*! /***************************************************************************
* \brief Returns true if debug output should be done in this module. * Function : DebugAtThisLevel
* *
* \return Nonzero value if true, zero if false. * Parameters:
*/ * IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
*
* Description:
* This functions returns true if debug output should be done in this
* module.
*
* Returns: int
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
int DebugAtThisLevel( int DebugAtThisLevel(
/*! [in] The level of the debug logging. It will decide whether debug IN Upnp_LogLevel DLevel,
* statement will go to standard output, or any of the log files. */ IN Dbg_Module Module);
Upnp_LogLevel DLevel,
/*! [in] Debug will go in the name of this module. */
Dbg_Module Module);
#else #else
static UPNP_INLINE int DebugAtThisLevel( static UPNP_INLINE int DebugAtThisLevel(
Upnp_LogLevel DLevel, IN Upnp_LogLevel DLevel,
Dbg_Module Module) IN Dbg_Module Module) { return 0; }
{
return 0;
}
#endif #endif
/*! /***************************************************************************
* \brief Prints the debug statement either on the standard output or log file * Function : UpnpPrintf
* along with the information from where this debug statement is coming. *
*/ * Parameters:
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
* IN char *DbgFileName: Name of the file from where debug statement is
* coming
* IN int DbgLineNo : Line number of the file from where debug statement
* is coming
* IN char * FmtStr, ...: Variable number of arguments that will go
* in the debug statement
*
* Description:
* This functions prints the debug statement either on the startdard
* output or log file along with the information from where this
* debug statement is coming
* Returns: void
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void UpnpPrintf( void UpnpPrintf(
/*! [in] The level of the debug logging. It will decide whether debug
* statement will go to standard output, or any of the log files. */
Upnp_LogLevel DLevel, Upnp_LogLevel DLevel,
/*! [in] debug will go in the name of this module. */
Dbg_Module Module, Dbg_Module Module,
/*! [in] Name of the file from where debug statement is coming. */
const char* DbgFileName, const char* DbgFileName,
/*! [in] Line number of the file from where debug statement is coming. */
int DbgLineNo, int DbgLineNo,
/*! [in] Printf like format specification. */
const char* FmtStr, const char* FmtStr,
/*! [in] Printf like Variable number of arguments that will go in the debug
* statement. */
...) ...)
#if (__GNUC__ >= 3) #if (__GNUC__ >= 3)
/* This enables printf like format checking by the compiler */ /* This enables printf like format checking by the compiler */
@@ -232,44 +265,29 @@ static UPNP_INLINE void UpnpPrintf(
const char* DbgFileName, const char* DbgFileName,
int DbgLineNo, int DbgLineNo,
const char* FmtStr, const char* FmtStr,
...) ...) {}
{
}
#endif /* DEBUG */ #endif /* DEBUG */
/*! /***************************************************************************
* \brief Writes the file name and file number from where debug statement is * Function : UpnpDisplayBanner
* coming to the log file. *
*/ * Parameters:
#ifdef DEBUG * IN FILE *fd: file descriptor where the banner will be written
void UpnpDisplayFileAndLine( * IN char **lines: The buffer that will be written
/*! [in] File descriptor where line number and file name will be written. */ * IN int size: Size of the buffer
FILE *fd, * IN int starLength: This parameter provides the width of the banner
/*! [in] Name of the file. */ *
const char *DbgFileName, * Description:
/*! [in] Line number of the file. */ * This functions takes the buffer and writes the buffer in the file as
int DbgLineNo); * per the requested banner
#else * Returns: void
static UPNP_INLINE void UpnpDisplayFileAndLine( ***************************************************************************/
FILE *fd,
const char *DbgFileName,
int DbgLineNo) {}
#endif
/*!
* \brief Writes the buffer in the file as per the requested banner
*/
#ifdef DEBUG #ifdef DEBUG
void UpnpDisplayBanner( void UpnpDisplayBanner(
/*! [in] file descriptor where the banner will be written. */
FILE *fd, FILE *fd,
/*! [in] The buffer that will be written. */
const char **lines, const char **lines,
/*! [in] Size of the buffer. */
size_t size, size_t size,
/*! [in] This parameter provides the width of the banner. */
int starlength); int starlength);
#else #else
static UPNP_INLINE void UpnpDisplayBanner( static UPNP_INLINE void UpnpDisplayBanner(
@@ -280,31 +298,33 @@ static UPNP_INLINE void UpnpDisplayBanner(
#endif #endif
/*! /***************************************************************************
* \brief Prints thread pool statistics. * Function : UpnpDisplayFileAndLine
*/ *
* Parameters:
* IN FILE *fd: File descriptor where line number and file name will be
* written
* IN char *DbgFileName: Name of the file
* IN int DbgLineNo : Line number of the file
*
* Description:
* This function writes the file name and file number from where
* debug statement is coming to the log file
* Returns: void
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void PrintThreadPoolStats( void UpnpDisplayFileAndLine(
/*! [in] The thread pool. */ FILE *fd,
ThreadPool *tp,
/*! [in] The file name that called this function, use the macro __FILE__. */
const char *DbgFileName, const char *DbgFileName,
/*! [in] The line number that the function was called, use the macro __LINE__. */ int DbgLineNo);
int DbgLineNo,
/*! [in] The message. */
const char *msg);
#else #else
static UPNP_INLINE void PrintThreadPoolStats( static UPNP_INLINE void UpnpDisplayFileAndLine(
ThreadPool *tp, FILE *fd,
const char *DbgFileName, const char *DbgFileName,
int DbgLineNo, int DbgLineNo) {}
const char *msg)
{
}
#endif #endif
/*! @} */
/*@}*/
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -29,237 +29,201 @@
* *
******************************************************************************/ ******************************************************************************/
/** @name Optional Tool APIs
* The Linux SDK for UPnP Devices contains some additional, optional
* utility APIs that can be helpful in writing applications using the
* SDK. These additional APIs can be compiled out in order to save code
* size in the SDK. Refer to the README for details.
*/
/*! @{ */
#ifndef UPNP_TOOLS_H #ifndef UPNP_TOOLS_H
#define UPNP_TOOLS_H #define UPNP_TOOLS_H
#include "upnp.h"
/*!
* \file
*
* \defgroup UPnPTools Optional Tool API
*
* \brief Additional, optional utility API that can be helpful in writing
* applications.
*
* This additional API can be compiled out in order to save code size in the
* library. Refer to the file README for details.
*
* @{
*/
#include "ixml.h" /* for IXML_Document */
/* Function declarations only if tools compiled into the library */ /* Function declarations only if tools compiled into the library */
#if UPNP_HAVE_TOOLS #if UPNP_HAVE_TOOLS
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/** {\bf UpnpResolveURL} combines a base URL and a relative URL into
/*! * a single absolute URL. The memory for {\bf AbsURL} needs to be
* \brief Converts an SDK error code into a string error message suitable for * allocated by the caller and must be large enough to hold the
* display. The memory returned from this function should NOT be freed. * {\bf BaseURL} and {\bf RelURL} combined.
* *
* \return An ASCII text string representation of the error message associated * @return [int] An integer representing one of the following:
* with the error code or the string "Unknown error code" * \begin{itemize}
*/ * \item {\tt UPNP_E_SUCCESS}: The operation completed successfully.
EXPORT_SPEC const char *UpnpGetErrorMessage( * \item {\tt UPNP_E_INVALID_PARAM}: {\bf RelURL} is {\tt NULL}.
/*! [in] The SDK error code to convert. */ * \item {\tt UPNP_E_INVALID_URL}: The {\bf BaseURL} / {\bf RelURL}
int errorcode);
/*!
* \brief Combines a base URL and a relative URL into a single absolute URL.
*
* The memory for \b AbsURL needs to be allocated by the caller and must
* be large enough to hold the \b BaseURL and \b RelURL combined.
*
* \return An integer representing one of the following:
* \li <tt>UPNP_E_SUCCESS</tt>: The operation completed successfully.
* \li <tt>UPNP_E_INVALID_PARAM</tt>: \b RelURL is <tt>NULL</tt>.
* \li <tt>UPNP_E_INVALID_URL</tt>: The \b BaseURL / \b RelURL
* combination does not form a valid URL. * combination does not form a valid URL.
* \li <tt>UPNP_E_OUTOF_MEMORY</tt>: Insufficient resources exist to * \item {\tt UPNP_E_OUTOF_MEMORY}: Insufficient resources exist to
* complete this operation. * complete this operation.
* \end{itemize}
*/ */
EXPORT_SPEC int UpnpResolveURL( EXPORT_SPEC int UpnpResolveURL(
/*! [in] The base URL to combine. */ IN const char * BaseURL, /** The base URL to combine. */
const char *BaseURL, IN const char * RelURL, /** The relative URL to {\bf BaseURL}. */
/*! [in] The relative URL to \b BaseURL. */ OUT char * AbsURL /** A pointer to a buffer to store the
const char *RelURL, absolute URL. */
/*! [out] A pointer to a buffer to store the absolute URL. */ );
char *AbsURL);
/** {\bf UpnpMakeAction} creates an action request packet based on its input
/*! * parameters (status variable name and value pair). Any number of input
* \brief Creates an action request packet based on its input parameters * parameters can be passed to this function but every input variable name
* (status variable name and value pair). * should have a matching value argument.
* *
* Any number of input parameters can be passed to this function but every * @return [IXML_Document*] The action node of {\bf Upnp_Document} type or
* input variable name should have a matching value argument. * {\tt NULL} if the operation failed.
*
* It is a wrapper function that calls makeAction() function to create the
* action request.
*
* \return The action node of \b Upnp_Document type or <tt>NULL</tt> if the
* operation failed.
*/ */
EXPORT_SPEC IXML_Document *UpnpMakeAction(
/*! [in] Name of the action request or response. */
const char *ActionName,
/*! [in] The service type. */
const char *ServType,
/*! [in] Number of argument pairs to be passed. */
int NumArg,
/*! [in] pointer to the first argument. */
const char *Arg,
/*! [in] Argument list. */
...);
EXPORT_SPEC IXML_Document* UpnpMakeAction(
IN const char * ActionName, /** The action name. */
IN const char * ServType, /** The service type. */
IN int NumArg, /** Number of argument pairs to be passed. */
IN const char * Arg, /** Status variable name and value pair. */
IN ... /* Other status variable name and value pairs. */
);
/*! /** {\bf UpnpAddToAction} creates an action request packet based on its input
* \brief Ceates an action response packet based on its output parameters * parameters (status variable name and value pair). This API is specially
* (status variable name and value pair). * suitable inside a loop to add any number input parameters into an existing
* action. If no action document exists in the beginning then a
* {\bf Upnp_Document} variable initialized with {\tt NULL} should be passed
* as a parameter.
* *
* Any number of input parameters can be passed to this function but every * @return [int] An integer representing one of the following:
* output variable name should have a matching value argument. * \begin{itemize}
* * \item {\tt UPNP_E_SUCCESS}: The operation completed successfully.
* It is a wrapper function that calls makeAction() function to create the * \item {\tt UPNP_E_INVALID_PARAM}: One or more of the parameters
* action request. * are invalid.
* * \item {\tt UPNP_E_OUTOF_MEMORY}: Insufficient resources exist to
* \return The action node of \b Upnp_Document type or <tt>NULL</tt> if the
* operation failed.
*/
EXPORT_SPEC IXML_Document *UpnpMakeActionResponse(
/*! [in] The action name. */
const char *ActionName,
/*! [in] The service type.. */
const char *ServType,
/*! [in] The number of argument pairs passed. */
int NumArg,
/*! [in] The status variable name and value pair. */
const char *Arg,
/*! [in] Other status variable name and value pairs. */
...);
/*!
* \brief Adds the argument in the action request.
*
* This API is specially suitable inside a loop to add any number input
* parameters into an existing action. If no action document exists in the
* beginning then a <b>Upnp_Document variable initialized with <tt>NULL</tt></b>
* should be passed as a parameter.
*
* It is a wrapper function that calls addToAction() function to add the
* argument in the action request.
*
* \return An integer representing one of the following:
* \li <tt>UPNP_E_SUCCESS</tt>: The operation completed successfully.
* \li <tt>UPNP_E_INVALID_PARAM</tt>: One or more of the parameters are invalid.
* \li <tt>UPNP_E_OUTOF_MEMORY</tt>: Insufficient resources exist to
* complete this operation. * complete this operation.
* \end{itemize}
*/ */
EXPORT_SPEC int UpnpAddToAction( EXPORT_SPEC int UpnpAddToAction(
/*! [in,out] A pointer to store the action document node. */ IN OUT IXML_Document ** ActionDoc,
IXML_Document **ActionDoc, /** A pointer to store the action
/*! [in] The action name. */ document node. */
const char *ActionName, IN const char * ActionName, /** The action name. */
/*! [in] The service type. */ IN const char * ServType, /** The service type. */
const char *ServType, IN const char * ArgName, /** The status variable name. */
/*! [in] The status variable name. */ IN const char * ArgVal /** The status variable value. */
const char *ArgName, );
/*! [in] The status variable value. */
const char *ArgVal);
/** {\bf UpnpMakeActionResponse} creates an action response packet based
/*! * on its output parameters (status variable name and value pair). Any
* \brief Creates an action response packet based on its output parameters * number of input parameters can be passed to this function but every output
* (status variable name and value pair). * variable name should have a matching value argument.
* *
* This API is especially suitable inside a loop to add any number of input * @return [IXML_Document*] The action node of {\bf Upnp_Document} type or
* parameters into an existing action response. If no action document exists * {\tt NULL} if the operation failed.
* in the beginning, a \b Upnp_Document variable initialized with <tt>NULL</tt>
* should be passed as a parameter.
*
* It is a wrapper function that calls addToAction() function to add the
* argument in the action request.
*
* \return An integer representing one of the following:
* \li <tt>UPNP_E_SUCCESS</tt>: The operation completed successfully.
* \li <tt>UPNP_E_INVALID_PARAM</tt>: One or more of the parameters are invalid.
* \li <tt>UPNP_E_OUTOF_MEMORY</tt>: Insufficient resources exist to
* complete this operation.
*/ */
EXPORT_SPEC IXML_Document* UpnpMakeActionResponse(
IN const char * ActionName, /** The action name. */
IN const char * ServType, /** The service type. */
IN int NumArg, /** The number of argument pairs passed. */
IN const char * Arg, /** The status variable name and value pair. */
IN ... /* Other status variable name and value pairs. */
);
/** {\bf UpnpAddToActionResponse} creates an action response
* packet based on its output parameters (status variable name
* and value pair). This API is especially suitable inside
* a loop to add any number of input parameters into an existing action
* response. If no action document exists in the beginning, a
* {\bf Upnp_Document} variable initialized with {\tt NULL} should be passed
* as a parameter.
*
* @return [int] An integer representing one of the following:
* \begin{itemize}
* \item {\tt UPNP_E_SUCCESS}: The operation completed successfully.
* \item {\tt UPNP_E_INVALID_PARAM}: One or more of the parameters
* are invalid.
* \item {\tt UPNP_E_OUTOF_MEMORY}: Insufficient resources exist to
* complete this operation.
* \end{itemize}
*/
EXPORT_SPEC int UpnpAddToActionResponse( EXPORT_SPEC int UpnpAddToActionResponse(
/*! [in,out] Pointer to a document to store the action document node. */ IN OUT IXML_Document ** ActionResponse,
IXML_Document **ActionResponse, /** Pointer to a document to
/*! [in] The action name. */ store the action document
const char *ActionName, node. */
/*! [in] The service type. */ IN const char * ActionName, /** The action name. */
const char *ServType, IN const char * ServType, /** The service type. */
/*! [in] The status variable name. */ IN const char * ArgName, /** The status variable name. */
const char *ArgName, IN const char * ArgVal /** The status variable value. */
/*! [in] The status variable value. */ );
const char *ArgVal);
/** {\bf UpnpAddToPropertySet} can be used when an application needs to
/*! * transfer the status of many variables at once. It can be used
* \brief Creates a property set message packet. * (inside a loop) to add some extra status variables into an existing
* property set. If the application does not already have a property
* set document, the application should create a variable initialized
* with {\tt NULL} and pass that as the first parameter.
* *
* Any number of input parameters can be passed to this function but every * @return [int] An integer representing one of the following:
* input variable name should have a matching value input argument. * \begin{itemize}
* * \item {\tt UPNP_E_SUCCESS}: The operation completed successfully.
* \return <tt>NULL</tt> on failure, or the property-set document node. * \item {\tt UPNP_E_INVALID_PARAM}: One or more of the parameters
*/ * are invalid.
EXPORT_SPEC IXML_Document *UpnpCreatePropertySet( * \item {\tt UPNP_E_OUTOF_MEMORY}: Insufficient resources exist to
/*! [in] The number of argument pairs passed. */
int NumArg,
/*! [in] The status variable name and value pair. */
const char *Arg,
/*! [in] Variable sized list with the rest of the parameters. */
...);
/*!
* \brief Can be used when an application needs to transfer the status of many
* variables at once.
*
* It can be used (inside a loop) to add some extra status variables into an
* existing property set. If the application does not already have a property
* set document, the application should create a variable initialized with
* <tt>NULL</tt> and pass that as the first parameter.
*
* \return An integer representing one of the following:
* \li <tt>UPNP_E_SUCCESS</tt>: The operation completed successfully.
* \li <tt>UPNP_E_INVALID_PARAM</tt>: One or more of the parameters are invalid.
* \li <tt>UPNP_E_OUTOF_MEMORY</tt>: Insufficient resources exist to
* complete this operation. * complete this operation.
* \end{itemize}
*
*/ */
EXPORT_SPEC int UpnpAddToPropertySet(
/*! [in,out] A pointer to the document containing the property set document node. */
IXML_Document **PropSet,
/*! [in] The status variable name. */
const char *ArgName,
/*! [in] The status variable value. */
const char *ArgVal);
EXPORT_SPEC int UpnpAddToPropertySet(
IN OUT IXML_Document **PropSet,
/** A pointer to the document containing
the property set document node. */
IN const char * ArgName, /** The status variable name. */
IN const char * ArgVal /** The status variable value. */
);
/** {\bf UpnpCreatePropertySet} creates a property set
* message packet. Any number of input parameters can be passed
* to this function but every input variable name should have
* a matching value input argument.
*
* @return [IXML_Document*] {\tt NULL} on failure, or the property-set
* document node.
*
*/
EXPORT_SPEC IXML_Document* UpnpCreatePropertySet(
IN int NumArg, /** The number of argument pairs passed. */
IN const char* Arg, /** The status variable name and value pair. */
IN ...
);
/** {\bf UpnpGetErrorMessage} converts an SDK error code into a
* string error message suitable for display. The memory returned
* from this function should NOT be freed.
*
* @return [char*] An ASCII text string representation of the error message
* associated with the error code.
*/
EXPORT_SPEC const char * UpnpGetErrorMessage(
int errorcode /** The SDK error code to convert. */
);
/*! @} */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
/*! @} */
#endif /* UPNP_HAVE_TOOLS */ #endif /* UPNP_HAVE_TOOLS */
#endif /* UPNP_TOOLS_H */ #endif /* UPNP_TOOLS_H */

View File

@@ -1,97 +0,0 @@
# -*- Autoconf -*-
# This file is part of the aMule project.
# This file is part of the libupnp library project.
#
# Copyright (c) 2003-2008 aMule Team ( admin@amule.org / http://www.amule.org )
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#
dnl --------------------------------------------------------------------------
dnl LIBUPNP_CHECK([VERSION = 1.6.6], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
dnl
dnl Check for the libupnp library
dnl --------------------------------------------------------------------------
dnl
dnl This macro sets these variables:
dnl - LIBUPNP_VERSION
dnl Something like "1.6.7"
dnl - LIBUPNP_CPPFLAGS
dnl Flags to be added to CPPFLAGS
dnl - LIBUPNP_CFLAGS
dnl Flags to be added to CFLAGS
dnl - LIBUPNP_LDFLAGS
dnl Flags to be added to LDFLAGS
dnl - LIBUPNP_LIBS
dnl Library to be added to LIBS
dnl
dnl The LIBUPNP_CPPFLAGS, LIBUPNP_CFLAGS, LIBUPNP_LDFLAGS and LIBUPNP_LIBS variables are also substituted.
dnl
AC_DEFUN([LIBUPNP_CHECK],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
m4_define([MIN_LIBUPNP_VERSION], [m4_ifval([$1], [$1], [1.6.6])])dnl
dnl Test for --with-libupnp-prefix
AC_ARG_WITH(
[libupnp-prefix],
[AS_HELP_STRING(
[--with-libupnp-prefix=PREFIX],
[UPnP library location])],
[export PKG_CONFIG_PATH=$withval/lib/pkgconfig])
dnl Check for libupnp >= MIN_LIBUPNP_VERSION
AS_IF([test $cross_compiling = no], [
AC_MSG_CHECKING([for libupnp version >= MIN_LIBUPNP_VERSION])
AS_IF([test -n "$PKG_CONFIG"], [
AS_IF([$PKG_CONFIG libupnp --exists], [
LIBUPNP_VERSION=`$PKG_CONFIG libupnp --modversion`
AS_IF([$PKG_CONFIG libupnp --atleast-version=MIN_LIBUPNP_VERSION], [
result=yes
resultstr=" (version $LIBUPNP_VERSION)"
LIBUPNP_CPPFLAGS=`$PKG_CONFIG libupnp --cflags-only-I`
LIBUPNP_CFLAGS=`$PKG_CONFIG libupnp --cflags-only-other`
LIBUPNP_LDFLAGS=`$PKG_CONFIG libupnp --libs-only-L`
LIBUPNP_LIBS=`$PKG_CONFIG libupnp --libs-only-other`
LIBUPNP_LIBS="$LIBUPNP_LIBS `$PKG_CONFIG libupnp --libs-only-l`"
], [
result=no
resultstr=" (version $LIBUPNP_VERSION is not new enough)"
])
], [
result=no
resultstr=" (try to use --with-libupnp-prefix=PREFIX)"
])
], [
result=no
resultstr=" (pkg-config not found)"
])
AC_MSG_RESULT([$result$resultstr])
libupnp_error="libupnp >= MIN_LIBUPNP_VERSION not found$resultstr"
], [
dnl Currently cross-compilation with libupnp is not supported.
result=no
libupnp_error="cross compiling"
])
dnl Execute the right action.
AS_IF([test ${result:-no} = yes], [$2], [$3])
dnl Exported symbols
AC_SUBST([LIBUPNP_CPPFLAGS])dnl
AC_SUBST([LIBUPNP_CFLAGS])dnl
AC_SUBST([LIBUPNP_LDFLAGS])dnl
AC_SUBST([LIBUPNP_LIBS])dnl
m4_undefine([MIN_LIBUPNP_VERSION])dnl
])

View File

@@ -69,9 +69,8 @@ upnp_tv_combo_SOURCES = \
if WITH_DOCUMENTATION if WITH_DOCUMENTATION
examplesdir = $(docdir)/examples examplesdir = $(docdir)/examples
examples_DATA = \ examples_DATA = \
$(sort \
$(upnp_tv_ctrlpt_SOURCES) \ $(upnp_tv_ctrlpt_SOURCES) \
$(upnp_tv_device_SOURCES)) $(upnp_tv_device_SOURCES)
endif endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,63 +1,57 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef SAMPLE_UTIL_H #ifndef SAMPLE_UTIL_H
#define SAMPLE_UTIL_H #define SAMPLE_UTIL_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif
#include "ithread.h"
#include "ixml.h" /* for IXML_Document, IXML_Element */
#include "upnp.h" /* for Upnp_EventType */
#include "upnptools.h"
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "upnptools.h"
#include "ithread.h"
#include "ixml.h"
/* mutex to control displaying of events */ //mutex to control displaying of events
extern ithread_mutex_t display_mutex; extern ithread_mutex_t display_mutex ;
typedef enum { typedef enum {
STATE_UPDATE = 0, STATE_UPDATE = 0,
DEVICE_ADDED = 1, DEVICE_ADDED =1,
DEVICE_REMOVED = 2, DEVICE_REMOVED=2,
GET_VAR_COMPLETE = 3 GET_VAR_COMPLETE=3
} eventType; } eventType;
@@ -74,7 +68,7 @@ typedef enum {
* node -- The DOM node from which to extract the value * node -- The DOM node from which to extract the value
* *
********************************************************************************/ ********************************************************************************/
char *SampleUtil_GetElementValue(IN IXML_Element *element); char * SampleUtil_GetElementValue(IN IXML_Element *element);
/******************************************************************************** /********************************************************************************
* SampleUtil_GetFirstServiceList * SampleUtil_GetFirstServiceList
@@ -91,7 +85,7 @@ char *SampleUtil_GetElementValue(IN IXML_Element *element);
* *
********************************************************************************/ ********************************************************************************/
IXML_NodeList *SampleUtil_GetFirstServiceList(IN IXML_Document *doc); IXML_NodeList *SampleUtil_GetFirstServiceList(IN IXML_Document * doc);
/******************************************************************************** /********************************************************************************
@@ -106,7 +100,7 @@ IXML_NodeList *SampleUtil_GetFirstServiceList(IN IXML_Document *doc);
* item -- The item to search for * item -- The item to search for
* *
********************************************************************************/ ********************************************************************************/
char *SampleUtil_GetFirstDocumentItem(IN IXML_Document *doc, IN const char *item); char * SampleUtil_GetFirstDocumentItem(IN IXML_Document *doc, IN const char *item);
@@ -122,7 +116,7 @@ char *SampleUtil_GetFirstDocumentItem(IN IXML_Document *doc, IN const char *item
* item -- The item to search for * item -- The item to search for
* *
********************************************************************************/ ********************************************************************************/
char *SampleUtil_GetFirstElementItem(IN IXML_Element *element, IN const char *item); char * SampleUtil_GetFirstElementItem(IN IXML_Element *element, IN const char *item);
/******************************************************************************** /********************************************************************************
* SampleUtil_PrintEventType * SampleUtil_PrintEventType
@@ -168,13 +162,9 @@ int SampleUtil_PrintEvent(IN Upnp_EventType EventType,
* controlURL -- OUT -- The control URL for the service * controlURL -- OUT -- The control URL for the service
* *
********************************************************************************/ ********************************************************************************/
int SampleUtil_FindAndParseService ( int SampleUtil_FindAndParseService (IN IXML_Document *DescDoc, IN char* location,
IN IXML_Document *DescDoc, IN char *serviceType, OUT char **serviceId,
IN const char* location, OUT char **eventURL, OUT char **controlURL);
IN char *serviceType,
OUT char **serviceId,
OUT char **eventURL,
OUT char **controlURL);
/******************************************************************************** /********************************************************************************
@@ -206,10 +196,7 @@ extern print_string gPrintFun;
* const char * UDN * const char * UDN
* int newDevice * int newDevice
********************************************************************************/ ********************************************************************************/
typedef void (*state_update)( typedef void (*state_update)( const char *varName, const char *varValue, const char *UDN,
const char *varName,
const char *varValue,
const char *UDN,
eventType type); eventType type);
//global state update function used by smaple util //global state update function used by smaple util
@@ -237,7 +224,7 @@ int SampleUtil_Initialize(print_string print_function);
* Parameters: * Parameters:
* *
********************************************************************************/ ********************************************************************************/
int SampleUtil_Finish(); int SampleUtil_Finish(void);
/******************************************************************************** /********************************************************************************
* SampleUtil_Print * SampleUtil_Print
@@ -251,7 +238,7 @@ int SampleUtil_Finish();
* . . . - variable number of args. (see printf) * . . . - variable number of args. (see printf)
* *
********************************************************************************/ ********************************************************************************/
int SampleUtil_Print(char *fmt, ...); int SampleUtil_Print( char *fmt, ... );
/******************************************************************************** /********************************************************************************
* SampleUtil_RegisterUpdateFunction * SampleUtil_RegisterUpdateFunction
@@ -261,7 +248,7 @@ int SampleUtil_Print(char *fmt, ...);
* Parameters: * Parameters:
* *
********************************************************************************/ ********************************************************************************/
int SampleUtil_RegisterUpdateFunction(state_update update_function); int SampleUtil_RegisterUpdateFunction( state_update update_function );
/******************************************************************************** /********************************************************************************
* SampleUtil_StateUpdate * SampleUtil_StateUpdate
@@ -271,22 +258,11 @@ int SampleUtil_RegisterUpdateFunction(state_update update_function);
* Parameters: * Parameters:
* *
********************************************************************************/ ********************************************************************************/
void SampleUtil_StateUpdate( void SampleUtil_StateUpdate( const char *varName, const char *varValue, const char *UDN,
const char *varName,
const char *varValue,
const char *UDN,
eventType type); eventType type);
#ifdef __cplusplus #ifdef __cplusplus
}; };
#endif /* __cplusplus */
#ifdef WIN32
#define snprintf _snprintf
#define strcasecmp stricmp
#endif #endif
#endif /* UPNPSDK_UTIL_H */
#endif /* SAMPLE_UTIL_H */

View File

@@ -1,33 +1,33 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "sample_util.h" #include "sample_util.h"
@@ -130,8 +130,7 @@ TvCtrlPointPrintLongHelp( void )
SampleUtil_Print( "" ); SampleUtil_Print( "" );
SampleUtil_Print( "This sample control point application automatically searches" ); SampleUtil_Print( "This sample control point application automatically searches" );
SampleUtil_Print( "for and subscribes to the services of television device emulator" ); SampleUtil_Print( "for and subscribes to the services of television device emulator" );
SampleUtil_Print( "devices, described in the tvdevicedesc.xml description document." ); SampleUtil_Print( "devices. While registers a tv device itself." );
SampleUtil_Print( "It also registers itself as a tv device." );
SampleUtil_Print( "" ); SampleUtil_Print( "" );
SampleUtil_Print( "Commands:" ); SampleUtil_Print( "Commands:" );
SampleUtil_Print( " Help" ); SampleUtil_Print( " Help" );
@@ -450,18 +449,17 @@ device_main( int argc, char **argv )
port = ( unsigned short )portTemp; port = ( unsigned short )portTemp;
return TvDeviceStart( ip_address, port, desc_doc_name, web_dir_path, linux_print ); return TvDeviceStart(
ip_address, port, desc_doc_name, web_dir_path, linux_print );
} }
int main( int argc, char **argv ) int
main( int argc, char **argv )
{ {
int rc; int rc;
ithread_t cmdloop_thread; ithread_t cmdloop_thread;
#ifdef WIN32
#else
int sig; int sig;
sigset_t sigs_to_catch; sigset_t sigs_to_catch;
#endif
int code; int code;
device_main(argc, argv); device_main(argc, argv);
@@ -470,12 +468,11 @@ int main( int argc, char **argv )
SampleUtil_Print( "Error starting UPnP TV Control Point" ); SampleUtil_Print( "Error starting UPnP TV Control Point" );
return rc; return rc;
} }
/* start a command loop thread */ // start a command loop thread
code = ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop, NULL ); code =
ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop,
NULL );
#ifdef WIN32
ithread_join(cmdloop_thread, NULL);
#else
/* /*
Catch Ctrl-C and properly shutdown Catch Ctrl-C and properly shutdown
*/ */
@@ -483,9 +480,10 @@ int main( int argc, char **argv )
sigaddset( &sigs_to_catch, SIGINT ); sigaddset( &sigs_to_catch, SIGINT );
sigwait( &sigs_to_catch, &sig ); sigwait( &sigs_to_catch, &sig );
SampleUtil_Print( "Shutting down on signal %d...\n", sig ); SampleUtil_Print( "Shutting down on signal %d...", sig );
#endif
TvDeviceStop(); TvDeviceStop();
rc = TvCtrlPointStop(); rc = TvCtrlPointStop();
return rc; return rc;
} }

View File

@@ -1,33 +1,33 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "upnp_tv_ctrlpt.h" #include "upnp_tv_ctrlpt.h"
@@ -138,10 +138,11 @@ TvCtrlPointDeleteNode( struct TvDeviceNode *node )
* UDN -- The Unique Device Name for the device to remove * UDN -- The Unique Device Name for the device to remove
* *
********************************************************************************/ ********************************************************************************/
int TvCtrlPointRemoveDevice(const char *UDN) int
TvCtrlPointRemoveDevice( char *UDN )
{ {
struct TvDeviceNode *curdevnode; struct TvDeviceNode *curdevnode,
struct TvDeviceNode *prevdevnode; *prevdevnode;
ithread_mutex_lock( &DeviceListMutex ); ithread_mutex_lock( &DeviceListMutex );
@@ -223,7 +224,7 @@ TvCtrlPointRefresh( void )
{ {
int rc; int rc;
TvCtrlPointRemoveAll(); TvCtrlPointRemoveAll( );
/* /*
Search for all devices of type tvdevice version 1, Search for all devices of type tvdevice version 1,
@@ -538,7 +539,7 @@ TvCtrlPointGetDevice( int devnum,
* *
********************************************************************************/ ********************************************************************************/
int int
TvCtrlPointPrintList() TvCtrlPointPrintList( )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int i = 0; int i = 0;
@@ -667,8 +668,8 @@ TvCtrlPointPrintDevice( int devnum )
* *
********************************************************************************/ ********************************************************************************/
void void
TvCtrlPointAddDevice( IXML_Document *DescDoc, TvCtrlPointAddDevice( IXML_Document * DescDoc,
const char *location, char *location,
int expires ) int expires )
{ {
char *deviceType = NULL; char *deviceType = NULL;
@@ -681,19 +682,20 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc,
char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL };
char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL };
Upnp_SID eventSID[TV_SERVICE_SERVCOUNT]; Upnp_SID eventSID[TV_SERVICE_SERVCOUNT];
int TimeOut[TV_SERVICE_SERVCOUNT] = { int TimeOut[TV_SERVICE_SERVCOUNT] =
default_timeout, { default_timeout, default_timeout };
default_timeout };
struct TvDeviceNode *deviceNode; struct TvDeviceNode *deviceNode;
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int ret = 1; int ret = 1;
int found = 0; int found = 0;
int service; int service,
int var; var;
ithread_mutex_lock( &DeviceListMutex ); ithread_mutex_lock( &DeviceListMutex );
/* Read key elements from description document */ /*
Read key elements from description document
*/
UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" ); UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" );
deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" ); deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" );
friendlyName = friendlyName =
@@ -701,8 +703,9 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc,
baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" ); baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" );
relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" ); relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" );
ret = UpnpResolveURL( ret =
( baseURL ? baseURL : location ), relURL, presURL); UpnpResolveURL( ( baseURL ? baseURL : location ), relURL,
presURL );
if( UPNP_E_SUCCESS != ret ) if( UPNP_E_SUCCESS != ret )
SampleUtil_Print( "Error generating presURL from %s + %s", baseURL, SampleUtil_Print( "Error generating presURL from %s + %s", baseURL,
@@ -936,38 +939,34 @@ TvStateUpdate( char *UDN,
* changes -- The DOM document representing the changes * changes -- The DOM document representing the changes
* *
********************************************************************************/ ********************************************************************************/
void TvCtrlPointHandleEvent( void
const UpnpString *sid, TvCtrlPointHandleEvent( Upnp_SID sid,
int evntkey, int evntkey,
IXML_Document *changes) IXML_Document * changes )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int service; int service;
const char *aux_sid = NULL;
ithread_mutex_lock(&DeviceListMutex); ithread_mutex_lock( &DeviceListMutex );
tmpdevnode = GlobalDeviceList; tmpdevnode = GlobalDeviceList;
while (tmpdevnode) { while( tmpdevnode ) {
for (service = 0; service < TV_SERVICE_SERVCOUNT; ++service) { for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) {
aux_sid = UpnpString_get_String(sid); if( strcmp( tmpdevnode->device.TvService[service].SID, sid ) ==
if (strcmp(tmpdevnode->device.TvService[service].SID, aux_sid) == 0) { 0 ) {
SampleUtil_Print("Received Tv %s Event: %d for SID %s", SampleUtil_Print( "Received Tv %s Event: %d for SID %s",
TvServiceName[service], TvServiceName[service], evntkey, sid );
evntkey,
aux_sid); TvStateUpdate( tmpdevnode->device.UDN, service, changes,
TvStateUpdate( ( char ** )&tmpdevnode->device.
tmpdevnode->device.UDN, TvService[service].VariableStrVal );
service,
changes,
(char **)&tmpdevnode->device.TvService[service].VariableStrVal);
break; break;
} }
} }
tmpdevnode = tmpdevnode->next; tmpdevnode = tmpdevnode->next;
} }
ithread_mutex_unlock(&DeviceListMutex); ithread_mutex_unlock( &DeviceListMutex );
} }
/******************************************************************************** /********************************************************************************
@@ -984,10 +983,10 @@ void TvCtrlPointHandleEvent(
* timeout -- The new timeout for the subscription * timeout -- The new timeout for the subscription
* *
********************************************************************************/ ********************************************************************************/
void TvCtrlPointHandleSubscribeUpdate( void
const char *eventURL, TvCtrlPointHandleSubscribeUpdate( char *eventURL,
const Upnp_SID sid, Upnp_SID sid,
int timeout) int timeout )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int service; int service;
@@ -1015,10 +1014,10 @@ void TvCtrlPointHandleSubscribeUpdate(
ithread_mutex_unlock( &DeviceListMutex ); ithread_mutex_unlock( &DeviceListMutex );
} }
void TvCtrlPointHandleGetVar( void
const char *controlURL, TvCtrlPointHandleGetVar( char *controlURL,
const char *varName, char *varName,
const DOMString varValue) DOMString varValue )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
@@ -1027,11 +1026,14 @@ void TvCtrlPointHandleGetVar(
ithread_mutex_lock( &DeviceListMutex ); ithread_mutex_lock( &DeviceListMutex );
tmpdevnode = GlobalDeviceList; tmpdevnode = GlobalDeviceList;
while (tmpdevnode) { while( tmpdevnode ) {
for (service = 0; service < TV_SERVICE_SERVCOUNT; service++) { for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) {
if (strcmp(tmpdevnode->device.TvService[service].ControlURL, controlURL) == 0) { if( strcmp
SampleUtil_StateUpdate( ( tmpdevnode->device.TvService[service].ControlURL,
varName, varValue, tmpdevnode->device.UDN, GET_VAR_COMPLETE); controlURL ) == 0 ) {
SampleUtil_StateUpdate( varName, varValue,
tmpdevnode->device.UDN,
GET_VAR_COMPLETE );
break; break;
} }
} }
@@ -1055,135 +1057,179 @@ void TvCtrlPointHandleGetVar(
* Cookie -- Optional data specified during callback registration * Cookie -- Optional data specified during callback registration
* *
********************************************************************************/ ********************************************************************************/
int TvCtrlPointCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Cookie) int
TvCtrlPointCallbackEventHandler( Upnp_EventType EventType,
void *Event,
void *Cookie )
{ {
int errCode = 0; SampleUtil_PrintEvent( EventType, Event );
SampleUtil_PrintEvent(EventType, Event);
switch ( EventType ) { switch ( EventType ) {
/* SSDP Stuff */ /*
SSDP Stuff
*/
case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE:
case UPNP_DISCOVERY_SEARCH_RESULT: { case UPNP_DISCOVERY_SEARCH_RESULT:
UpnpDiscovery *d_event = (UpnpDiscovery *)Event; {
struct Upnp_Discovery *d_event =
( struct Upnp_Discovery * )Event;
IXML_Document *DescDoc = NULL; IXML_Document *DescDoc = NULL;
const char *location = NULL; int ret;
int errCode = UpnpDiscovery_get_ErrCode(d_event);
if (errCode != UPNP_E_SUCCESS) { if( d_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print( SampleUtil_Print( "Error in Discovery Callback -- %d",
"Error in Discovery Callback -- %d", errCode); d_event->ErrCode );
} }
location = UpnpString_get_String(UpnpDiscovery_get_Location(d_event));
errCode = UpnpDownloadXmlDoc(location, &DescDoc); if( ( ret =
if (errCode != UPNP_E_SUCCESS) { UpnpDownloadXmlDoc( d_event->Location,
SampleUtil_Print( &DescDoc ) ) !=
"Error obtaining device description from %s -- error = %d", UPNP_E_SUCCESS ) {
location, errCode); SampleUtil_Print
( "Error obtaining device description from %s -- error = %d",
d_event->Location, ret );
} else { } else {
TvCtrlPointAddDevice( TvCtrlPointAddDevice( DescDoc, d_event->Location,
DescDoc, location, UpnpDiscovery_get_Expires(d_event)); d_event->Expires );
} }
if (DescDoc) {
ixmlDocument_free(DescDoc); if( DescDoc )
} ixmlDocument_free( DescDoc );
TvCtrlPointPrintList();
TvCtrlPointPrintList( );
break; break;
} }
case UPNP_DISCOVERY_SEARCH_TIMEOUT: case UPNP_DISCOVERY_SEARCH_TIMEOUT:
/* Nothing to do here... */ /*
Nothing to do here...
*/
break; break;
case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: {
UpnpDiscovery *d_event = (UpnpDiscovery *)Event;
int errCode = UpnpDiscovery_get_ErrCode(d_event);
const char *deviceId = UpnpString_get_String(
UpnpDiscovery_get_DeviceID(d_event));
if (errCode != UPNP_E_SUCCESS) { case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE:
SampleUtil_Print( {
"Error in Discovery ByeBye Callback -- %d", errCode); struct Upnp_Discovery *d_event =
( struct Upnp_Discovery * )Event;
if( d_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print
( "Error in Discovery ByeBye Callback -- %d",
d_event->ErrCode );
} }
SampleUtil_Print("Received ByeBye for Device: %s", deviceId);
TvCtrlPointRemoveDevice(deviceId); SampleUtil_Print( "Received ByeBye for Device: %s",
SampleUtil_Print("After byebye:"); d_event->DeviceId );
TvCtrlPointPrintList(); TvCtrlPointRemoveDevice( d_event->DeviceId );
SampleUtil_Print( "After byebye:" );
TvCtrlPointPrintList( );
break; break;
} }
/* SOAP Stuff */
case UPNP_CONTROL_ACTION_COMPLETE: { /*
UpnpActionComplete *a_event = (UpnpActionComplete *)Event; SOAP Stuff
int errCode = UpnpActionComplete_get_ErrCode(a_event); */
if (errCode != UPNP_E_SUCCESS) { case UPNP_CONTROL_ACTION_COMPLETE:
SampleUtil_Print( {
"Error in Action Complete Callback -- %d", struct Upnp_Action_Complete *a_event =
errCode); ( struct Upnp_Action_Complete * )Event;
if( a_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print
( "Error in Action Complete Callback -- %d",
a_event->ErrCode );
} }
/* No need for any processing here, just print out results.
* Service state table updates are handled by events. */ /*
No need for any processing here, just print out results. Service state
table updates are handled by events.
*/
break; break;
} }
case UPNP_CONTROL_GET_VAR_COMPLETE: {
UpnpStateVarComplete *sv_event = (UpnpStateVarComplete *)Event; case UPNP_CONTROL_GET_VAR_COMPLETE:
int errCode = UpnpStateVarComplete_get_ErrCode(sv_event); {
if (errCode != UPNP_E_SUCCESS) { struct Upnp_State_Var_Complete *sv_event =
SampleUtil_Print( ( struct Upnp_State_Var_Complete * )Event;
"Error in Get Var Complete Callback -- %d", errCode);
if( sv_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print
( "Error in Get Var Complete Callback -- %d",
sv_event->ErrCode );
} else { } else {
TvCtrlPointHandleGetVar( TvCtrlPointHandleGetVar( sv_event->CtrlUrl,
UpnpString_get_String(UpnpStateVarComplete_get_CtrlUrl(sv_event)), sv_event->StateVarName,
UpnpString_get_String(UpnpStateVarComplete_get_StateVarName(sv_event)), sv_event->CurrentVal );
UpnpStateVarComplete_get_CurrentVal(sv_event));
} }
break; break;
} }
/* GENA Stuff */
case UPNP_EVENT_RECEIVED: { /*
UpnpEvent *e_event = (UpnpEvent *)Event; GENA Stuff
TvCtrlPointHandleEvent( */
UpnpEvent_get_SID(e_event), case UPNP_EVENT_RECEIVED:
UpnpEvent_get_EventKey(e_event), {
UpnpEvent_get_ChangedVariables(e_event)); struct Upnp_Event *e_event = ( struct Upnp_Event * )Event;
TvCtrlPointHandleEvent( e_event->Sid, e_event->EventKey,
e_event->ChangedVariables );
break; break;
} }
case UPNP_EVENT_SUBSCRIBE_COMPLETE: case UPNP_EVENT_SUBSCRIBE_COMPLETE:
case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: case UPNP_EVENT_UNSUBSCRIBE_COMPLETE:
case UPNP_EVENT_RENEWAL_COMPLETE: { case UPNP_EVENT_RENEWAL_COMPLETE:
UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; {
struct Upnp_Event_Subscribe *es_event =
( struct Upnp_Event_Subscribe * )Event;
errCode = UpnpEventSubscribe_get_ErrCode(es_event); if( es_event->ErrCode != UPNP_E_SUCCESS ) {
if (errCode != UPNP_E_SUCCESS) { SampleUtil_Print
SampleUtil_Print( ( "Error in Event Subscribe Callback -- %d",
"Error in Event Subscribe Callback -- %d", errCode); es_event->ErrCode );
} else { } else {
TvCtrlPointHandleSubscribeUpdate( TvCtrlPointHandleSubscribeUpdate( es_event->
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)), PublisherUrl,
UpnpString_get_String(UpnpEventSubscribe_get_SID(es_event)), es_event->Sid,
UpnpEventSubscribe_get_TimeOut(es_event)); es_event->TimeOut );
} }
break; break;
} }
case UPNP_EVENT_AUTORENEWAL_FAILED: case UPNP_EVENT_AUTORENEWAL_FAILED:
case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { case UPNP_EVENT_SUBSCRIPTION_EXPIRED:
UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; {
int TimeOut = default_timeout; int TimeOut = default_timeout;
Upnp_SID newSID; Upnp_SID newSID;
int ret;
errCode = UpnpSubscribe( struct Upnp_Event_Subscribe *es_event =
ctrlpt_handle, ( struct Upnp_Event_Subscribe * )Event;
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)),
&TimeOut, ret =
newSID); UpnpSubscribe( ctrlpt_handle, es_event->PublisherUrl,
if (errCode == UPNP_E_SUCCESS) { &TimeOut, newSID );
SampleUtil_Print("Subscribed to EventURL with SID=%s", newSID);
TvCtrlPointHandleSubscribeUpdate( if( ret == UPNP_E_SUCCESS ) {
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)), SampleUtil_Print( "Subscribed to EventURL with SID=%s",
newSID, newSID );
TimeOut); TvCtrlPointHandleSubscribeUpdate( es_event->
PublisherUrl, newSID,
TimeOut );
} else { } else {
SampleUtil_Print("Error Subscribing to EventURL -- %d", errCode); SampleUtil_Print
( "Error Subscribing to EventURL -- %d", ret );
} }
break; break;
} }
/* ignore these cases, since this is not a device */
/*
ignore these cases, since this is not a device
*/
case UPNP_EVENT_SUBSCRIPTION_REQUEST: case UPNP_EVENT_SUBSCRIPTION_REQUEST:
case UPNP_CONTROL_GET_VAR_REQUEST: case UPNP_CONTROL_GET_VAR_REQUEST:
case UPNP_CONTROL_ACTION_REQUEST: case UPNP_CONTROL_ACTION_REQUEST:
@@ -1274,12 +1320,12 @@ TvCtrlPointVerifyTimeouts( int incr )
* None * None
* *
********************************************************************************/ ********************************************************************************/
static int TvCtrlPointTimerLoopRun = 1; void *
void *TvCtrlPointTimerLoop(void *args) TvCtrlPointTimerLoop( void *args )
{ {
int incr = 30; // how often to verify the timeouts, in seconds int incr = 30; // how often to verify the timeouts, in seconds
while (TvCtrlPointTimerLoopRun) { while( 1 ) {
isleep( incr ); isleep( incr );
TvCtrlPointVerifyTimeouts( incr ); TvCtrlPointVerifyTimeouts( incr );
} }
@@ -1302,72 +1348,62 @@ void *TvCtrlPointTimerLoop(void *args)
* TV_SUCCESS if everything went well, else TV_ERROR * TV_SUCCESS if everything went well, else TV_ERROR
* *
********************************************************************************/ ********************************************************************************/
int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionPtr) int
TvCtrlPointStart( print_string printFunctionPtr,
state_update updateFunctionPtr )
{ {
ithread_t timer_thread; ithread_t timer_thread;
int rc; int rc;
unsigned short port = 0; short int port = 0;
char *ip_address = NULL; char *ip_address = NULL;
SampleUtil_Initialize(printFunctionPtr); SampleUtil_Initialize( printFunctionPtr );
SampleUtil_RegisterUpdateFunction(updateFunctionPtr); SampleUtil_RegisterUpdateFunction( updateFunctionPtr );
ithread_mutex_init(&DeviceListMutex, 0); ithread_mutex_init( &DeviceListMutex, 0 );
SampleUtil_Print( SampleUtil_Print( "Intializing UPnP with ipaddress=%s port=%d",
"Initializing UPnP Sdk with\n" ip_address, port );
"\tipaddress = %s port = %u\n", rc = UpnpInit( ip_address, port );
ip_address, port); if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc );
rc = UpnpInit(ip_address, port); //UpnpFinish( );
if (rc != UPNP_E_SUCCESS) { //return TV_ERROR;
SampleUtil_Print("WinCEStart: UpnpInit() Error: %d", rc);
/*
UpnpFinish();
return TV_ERROR;
*/
}
if (!ip_address) {
ip_address = UpnpGetServerIpAddress();
}
if (!port) {
port = UpnpGetServerPort();
} }
SampleUtil_Print( if( NULL == ip_address )
"UPnP Initialized\n" ip_address = UpnpGetServerIpAddress( );
"\tipaddress= %s port = %u\n", if( 0 == port )
ip_address, port); port = UpnpGetServerPort( );
SampleUtil_Print("Registering Control Point"); SampleUtil_Print( "UPnP Initialized (%s:%d)", ip_address, port );
rc = UpnpRegisterClient(TvCtrlPointCallbackEventHandler,
&ctrlpt_handle, &ctrlpt_handle); SampleUtil_Print( "Registering Control Point" );
if (rc != UPNP_E_SUCCESS) { rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler,
&ctrlpt_handle, &ctrlpt_handle );
if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "Error registering CP: %d", rc ); SampleUtil_Print( "Error registering CP: %d", rc );
UpnpFinish(); UpnpFinish( );
return TV_ERROR; return TV_ERROR;
} }
SampleUtil_Print("Control Point Registered"); SampleUtil_Print( "Control Point Registered" );
TvCtrlPointRefresh(); TvCtrlPointRefresh( );
/* start a timer thread */ // start a timer thread
ithread_create(&timer_thread, NULL, TvCtrlPointTimerLoop, NULL); ithread_create( &timer_thread, NULL, TvCtrlPointTimerLoop, NULL );
ithread_detach(timer_thread);
return TV_SUCCESS; return TV_SUCCESS;
} }
int TvCtrlPointStop(void) int
TvCtrlPointStop( void )
{ {
TvCtrlPointTimerLoopRun = 0; TvCtrlPointRemoveAll( );
TvCtrlPointRemoveAll();
UpnpUnRegisterClient( ctrlpt_handle ); UpnpUnRegisterClient( ctrlpt_handle );
UpnpFinish(); UpnpFinish( );
SampleUtil_Finish(); SampleUtil_Finish( );
return TV_SUCCESS; return TV_SUCCESS;
} }

View File

@@ -1,65 +1,53 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef UPNP_TV_CTRLPT_H #ifndef UPNP_TV_CTRLPT_H
#define UPNP_TV_CTRLPT_H #define UPNP_TV_CTRLPT_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <stdio.h>
#include "sample_util.h"
#include "ithread.h" #include "ithread.h"
#include "upnp.h" #include <unistd.h>
#include "upnptools.h"
#include <signal.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <signal.h>
#include <string.h> #include <string.h>
#include "upnp.h"
#ifdef WIN32 #include "upnptools.h"
/* Do not #include <unistd.h> */ #include "sample_util.h"
#else
#include <unistd.h>
#endif
#define TV_SERVICE_SERVCOUNT 2 #define TV_SERVICE_SERVCOUNT 2
#define TV_SERVICE_CONTROL 0 #define TV_SERVICE_CONTROL 0
@@ -120,11 +108,11 @@ extern ithread_mutex_t DeviceListMutex;
extern UpnpClient_Handle ctrlpt_handle; extern UpnpClient_Handle ctrlpt_handle;
void TvCtrlPointPrintHelp(); void TvCtrlPointPrintHelp( void );
int TvCtrlPointDeleteNode(struct TvDeviceNode*); int TvCtrlPointDeleteNode(struct TvDeviceNode*);
int TvCtrlPointRemoveDevice(const char *); int TvCtrlPointRemoveDevice(char*);
int TvCtrlPointRemoveAll(); int TvCtrlPointRemoveAll( void );
int TvCtrlPointRefresh(); int TvCtrlPointRefresh( void );
int TvCtrlPointSendAction(int, int, char *, char **, char **, int); int TvCtrlPointSendAction(int, int, char *, char **, char **, int);
@@ -150,11 +138,11 @@ int TvCtrlPointGetBrightness(int);
int TvCtrlPointGetDevice(int, struct TvDeviceNode **); int TvCtrlPointGetDevice(int, struct TvDeviceNode **);
int TvCtrlPointPrintList( void ); int TvCtrlPointPrintList( void );
int TvCtrlPointPrintDevice(int); int TvCtrlPointPrintDevice(int);
void TvCtrlPointAddDevice(IXML_Document *, const char *, int); void TvCtrlPointAddDevice (IXML_Document *, char *, int);
void TvCtrlPointHandleGetVar(const char *, const char *, const DOMString); void TvCtrlPointHandleGetVar(char *,char *,DOMString);
void TvStateUpdate(char*,int, IXML_Document * , char **); void TvStateUpdate(char*,int, IXML_Document * , char **);
void TvCtrlPointHandleEvent(const UpnpString *, int, IXML_Document *); void TvCtrlPointHandleEvent(Upnp_SID, int, IXML_Document *);
void TvCtrlPointHandleSubscribeUpdate(const char *, const Upnp_SID, int); void TvCtrlPointHandleSubscribeUpdate(char *, Upnp_SID, int);
int TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *); int TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *);
void TvCtrlPointVerifyTimeouts(int); void TvCtrlPointVerifyTimeouts(int);
void TvCtrlPointPrintCommands( void ); void TvCtrlPointPrintCommands( void );

View File

@@ -1,41 +1,36 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "upnp_tv_device.h" #include "upnp_tv_device.h"
#include <assert.h>
#define DEFAULT_WEB_DIR "./web" #define DEFAULT_WEB_DIR "./web"
#define DESC_URL_SIZE 200 #define DESC_URL_SIZE 200
@@ -183,6 +178,7 @@ SetServiceTable( IN int serviceType,
} }
return SetActionTable( serviceType, out ); return SetActionTable( serviceType, out );
} }
/****************************************************************************** /******************************************************************************
@@ -253,6 +249,7 @@ SetActionTable( IN int serviceType,
} }
return 0; return 0;
} }
/****************************************************************************** /******************************************************************************
@@ -369,68 +366,61 @@ TvDeviceStateTableInit( IN char *DescDocURL )
* sr_event -- The subscription request event structure * sr_event -- The subscription request event structure
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceHandleSubscriptionRequest(IN const UpnpSubscriptionRequest *sr_event) int
TvDeviceHandleSubscriptionRequest( IN struct Upnp_Subscription_Request
*sr_event )
{ {
unsigned int i = 0; unsigned int i = 0; //,j=0;
//unsigned int j = 0;
int cmp1 = 0;
int cmp2 = 0;
const char *l_serviceId = NULL;
const char *l_udn = NULL;
const char *l_sid = NULL;
// IXML_Document *PropSet = NULL;
// lock state mutex // IXML_Document *PropSet=NULL;
//lock state mutex
ithread_mutex_lock( &TVDevMutex ); ithread_mutex_lock( &TVDevMutex );
l_serviceId = UpnpString_get_String(UpnpSubscriptionRequest_get_ServiceId(sr_event)); for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) {
l_udn = UpnpString_get_String(UpnpSubscriptionRequest_get_UDN(sr_event)); if( ( strcmp( sr_event->UDN, tv_service_table[i].UDN ) == 0 ) &&
l_sid = UpnpString_get_String(UpnpSubscriptionRequest_get_SID(sr_event)); ( strcmp( sr_event->ServiceId, tv_service_table[i].ServiceId )
for (i = 0; i < TV_SERVICE_SERVCOUNT; ++i) { == 0 ) ) {
cmp1 = strcmp(l_udn, tv_service_table[i].UDN);
cmp2 = strcmp(l_serviceId, tv_service_table[i].ServiceId); /*
if (cmp1 == 0 && cmp2 == 0) {
#if 0
PropSet = NULL; PropSet = NULL;
for (j = 0; j< tv_service_table[i].VariableCount; ++j) { for (j=0; j< tv_service_table[i].VariableCount; j++)
// add each variable to the property set {
// for initial state dump //add each variable to the property set
UpnpAddToPropertySet( //for initial state dump
&PropSet, UpnpAddToPropertySet(&PropSet,
tv_service_table[i].VariableName[j], tv_service_table[i].VariableName[j],
tv_service_table[i].VariableStrVal[j]); tv_service_table[i].VariableStrVal[j]);
} }
// dump initial state //dump initial state
UpnpAcceptSubscriptionExt( UpnpAcceptSubscriptionExt(device_handle, sr_event->UDN,
device_handle, sr_event->ServiceId,
l_udn, PropSet,sr_event->Sid);
l_serviceId, //free document
PropSet,
l_sid);
// free document
Document_free(PropSet); Document_free(PropSet);
#endif
UpnpAcceptSubscription( */
device_handle,
l_udn, UpnpAcceptSubscription( device_handle,
l_serviceId, sr_event->UDN,
(const char **)tv_service_table[i]. sr_event->ServiceId,
( const char ** )tv_service_table[i].
VariableName, VariableName,
(const char **)tv_service_table[i]. ( const char ** )tv_service_table[i].
VariableStrVal, VariableStrVal,
tv_service_table[i].VariableCount, tv_service_table[i].VariableCount,
l_sid); sr_event->Sid );
} }
} }
ithread_mutex_unlock( &TVDevMutex ); ithread_mutex_unlock( &TVDevMutex );
return 1; return ( 1 );
} }
/****************************************************************************** /******************************************************************************
* TvDeviceHandleGetVarRequest * TvDeviceHandleGetVarRequest
* *
@@ -444,32 +434,31 @@ int TvDeviceHandleSubscriptionRequest(IN const UpnpSubscriptionRequest *sr_event
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceHandleGetVarRequest( INOUT UpnpStateVarRequest *cgv_event ) TvDeviceHandleGetVarRequest( INOUT struct Upnp_State_Var_Request
*cgv_event )
{ {
unsigned int i = 0; unsigned int i = 0,
unsigned int j = 0; j = 0;
int getvar_succeeded = 0; int getvar_succeeded = 0;
UpnpStateVarRequest_set_CurrentVal(cgv_event, NULL); cgv_event->CurrentVal = NULL;
ithread_mutex_lock( &TVDevMutex ); ithread_mutex_lock( &TVDevMutex );
for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) { for( i = 0; i < TV_SERVICE_SERVCOUNT; i++ ) {
// check udn and service id //check udn and service id
const char *devUDN = if( ( strcmp( cgv_event->DevUDN, tv_service_table[i].UDN ) == 0 )
UpnpString_get_String(UpnpStateVarRequest_get_DevUDN(cgv_event)); &&
const char *serviceID = ( strcmp( cgv_event->ServiceID, tv_service_table[i].ServiceId )
UpnpString_get_String(UpnpStateVarRequest_get_ServiceID(cgv_event)); == 0 ) ) {
if( ( strcmp( devUDN, tv_service_table[i].UDN ) == 0 ) && //check variable name
( strcmp( serviceID, tv_service_table[i].ServiceId ) == 0 ) ) {
// check variable name
for( j = 0; j < tv_service_table[i].VariableCount; j++ ) { for( j = 0; j < tv_service_table[i].VariableCount; j++ ) {
const char *stateVarName = if( strcmp( cgv_event->StateVarName,
UpnpString_get_String(UpnpStateVarRequest_get_StateVarName(cgv_event)); tv_service_table[i].VariableName[j] ) == 0 ) {
if( strcmp( stateVarName, tv_service_table[i].VariableName[j] ) == 0 ) {
getvar_succeeded = 1; getvar_succeeded = 1;
UpnpStateVarRequest_set_CurrentVal(cgv_event, cgv_event->CurrentVal =
tv_service_table[i].VariableStrVal[j] ); ixmlCloneDOMString( tv_service_table[i].
VariableStrVal[j] );
break; break;
} }
} }
@@ -477,19 +466,19 @@ TvDeviceHandleGetVarRequest( INOUT UpnpStateVarRequest *cgv_event )
} }
if( getvar_succeeded ) { if( getvar_succeeded ) {
UpnpStateVarRequest_set_ErrCode(cgv_event, UPNP_E_SUCCESS); cgv_event->ErrCode = UPNP_E_SUCCESS;
} else { } else {
SampleUtil_Print( SampleUtil_Print
"Error in UPNP_CONTROL_GET_VAR_REQUEST callback:\n" ( "Error in UPNP_CONTROL_GET_VAR_REQUEST callback:\n" );
" Unknown variable name = %s\n", SampleUtil_Print( " Unknown variable name = %s\n",
UpnpString_get_String(UpnpStateVarRequest_get_StateVarName(cgv_event)) ); cgv_event->StateVarName );
UpnpStateVarRequest_set_ErrCode(cgv_event, 404); cgv_event->ErrCode = 404;
UpnpStateVarRequest_strcpy_ErrStr(cgv_event, "Invalid Variable" ); strcpy( cgv_event->ErrStr, "Invalid Variable" );
} }
ithread_mutex_unlock( &TVDevMutex ); ithread_mutex_unlock( &TVDevMutex );
return UpnpStateVarRequest_get_ErrCode(cgv_event) == UPNP_E_SUCCESS; return ( cgv_event->ErrCode == UPNP_E_SUCCESS );
} }
/****************************************************************************** /******************************************************************************
@@ -505,8 +494,9 @@ TvDeviceHandleGetVarRequest( INOUT UpnpStateVarRequest *cgv_event )
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceHandleActionRequest( INOUT UpnpActionRequest *ca_event ) TvDeviceHandleActionRequest( INOUT struct Upnp_Action_Request *ca_event )
{ {
/* /*
Defaults if action not found Defaults if action not found
*/ */
@@ -515,38 +505,51 @@ TvDeviceHandleActionRequest( INOUT UpnpActionRequest *ca_event )
int service = -1; int service = -1;
int retCode = 0; int retCode = 0;
char *errorString = NULL; char *errorString = NULL;
const char *devUDN = NULL;
const char *serviceID = NULL;
const char *actionName = NULL;
IXML_Document *actionResult = NULL;
UpnpActionRequest_set_ErrCode(ca_event, 0); ca_event->ErrCode = 0;
UpnpActionRequest_set_ActionResult(ca_event, NULL); ca_event->ActionResult = NULL;
devUDN = UpnpString_get_String(UpnpActionRequest_get_DevUDN( ca_event)); if( ( strcmp( ca_event->DevUDN,
serviceID = UpnpString_get_String(UpnpActionRequest_get_ServiceID( ca_event)); tv_service_table[TV_SERVICE_CONTROL].UDN ) == 0 ) &&
actionName = UpnpString_get_String(UpnpActionRequest_get_ActionName(ca_event)); ( strcmp
if( ( strcmp( devUDN, tv_service_table[TV_SERVICE_CONTROL].UDN ) == 0 ) && ( ca_event->ServiceID,
( strcmp( serviceID, tv_service_table[TV_SERVICE_CONTROL].ServiceId ) == 0 ) ) { tv_service_table[TV_SERVICE_CONTROL].ServiceId ) == 0 ) ) {
/* Request for action in the TvDevice Control Service */ /*
Request for action in the TvDevice Control Service
*/
service = TV_SERVICE_CONTROL; service = TV_SERVICE_CONTROL;
} else if( ( strcmp( devUDN, tv_service_table[TV_SERVICE_PICTURE].UDN ) == 0 ) && } else if( ( strcmp( ca_event->DevUDN,
( strcmp( serviceID, tv_service_table[TV_SERVICE_PICTURE].ServiceId ) == 0 ) ) { tv_service_table[TV_SERVICE_PICTURE].UDN ) == 0 )
/* Request for action in the TvDevice Picture Service */ &&
( strcmp
( ca_event->ServiceID,
tv_service_table[TV_SERVICE_PICTURE].ServiceId ) ==
0 ) ) {
/*
Request for action in the TvDevice Picture Service
*/
service = TV_SERVICE_PICTURE; service = TV_SERVICE_PICTURE;
} }
/* Find and call appropriate procedure based on action name //Find and call appropriate procedure based on action name
* Each action name has an associated procedure stored in the //Each action name has an associated procedure stored in the
* service table. These are set at initialization. */ //service table. These are set at initialization.
for( i = 0; i < TV_MAXACTIONS && tv_service_table[service].ActionNames[i] != NULL; i++ ) {
if( !strcmp( actionName, tv_service_table[service].ActionNames[i] ) ) { for( i = 0; ( ( i < TV_MAXACTIONS ) &&
if( ( !strcmp( tv_service_table[TV_SERVICE_CONTROL].VariableStrVal[TV_CONTROL_POWER], "1" ) ) || ( tv_service_table[service].ActionNames[i] != NULL ) );
( !strcmp( actionName, "PowerOn" ) ) ) { i++ ) {
retCode = tv_service_table[service].actions[i](
UpnpActionRequest_get_ActionRequest(ca_event), if( !strcmp( ca_event->ActionName,
&actionResult, tv_service_table[service].ActionNames[i] ) ) {
if( ( !strcmp( tv_service_table[TV_SERVICE_CONTROL].
VariableStrVal[TV_CONTROL_POWER], "1" ) )
|| ( !strcmp( ca_event->ActionName, "PowerOn" ) ) ) {
retCode =
tv_service_table[service].actions[i] ( ca_event->
ActionRequest,
&ca_event->
ActionResult,
&errorString ); &errorString );
UpnpActionRequest_set_ActionResult(ca_event, actionResult);
} else { } else {
errorString = "Power is Off"; errorString = "Power is Off";
retCode = UPNP_E_INTERNAL_ERROR; retCode = UPNP_E_INTERNAL_ERROR;
@@ -557,25 +560,25 @@ TvDeviceHandleActionRequest( INOUT UpnpActionRequest *ca_event )
} }
if( !action_found ) { if( !action_found ) {
UpnpActionRequest_set_ActionResult(ca_event, NULL); ca_event->ActionResult = NULL;
UpnpActionRequest_strcpy_ErrStr(ca_event, "Invalid Action" ); strcpy( ca_event->ErrStr, "Invalid Action" );
UpnpActionRequest_set_ErrCode(ca_event, 401); ca_event->ErrCode = 401;
} else { } else {
if( retCode == UPNP_E_SUCCESS ) { if( retCode == UPNP_E_SUCCESS ) {
UpnpActionRequest_set_ErrCode(ca_event, UPNP_E_SUCCESS); ca_event->ErrCode = UPNP_E_SUCCESS;
} else { } else {
// copy the error string //copy the error string
UpnpActionRequest_strcpy_ErrStr(ca_event, errorString ); strcpy( ca_event->ErrStr, errorString );
switch ( retCode ) { switch ( retCode ) {
case UPNP_E_INVALID_PARAM: case UPNP_E_INVALID_PARAM:
{ {
UpnpActionRequest_set_ErrCode(ca_event, 402); ca_event->ErrCode = 402;
break; break;
} }
case UPNP_E_INTERNAL_ERROR: case UPNP_E_INTERNAL_ERROR:
default: default:
{ {
UpnpActionRequest_set_ErrCode(ca_event, 501); ca_event->ErrCode = 501;
break; break;
} }
@@ -583,7 +586,7 @@ TvDeviceHandleActionRequest( INOUT UpnpActionRequest *ca_event )
} }
} }
return UpnpActionRequest_get_ErrCode(ca_event); return ( ca_event->ErrCode );
} }
/****************************************************************************** /******************************************************************************
@@ -646,6 +649,7 @@ TvDeviceSetServiceTableVar( IN unsigned int service,
ithread_mutex_unlock( &TVDevMutex ); ithread_mutex_unlock( &TVDevMutex );
return ( 1 ); return ( 1 );
} }
/****************************************************************************** /******************************************************************************
@@ -668,7 +672,7 @@ TvDeviceSetPower( IN int on )
if( on != POWER_ON && on != POWER_OFF ) { if( on != POWER_ON && on != POWER_OFF ) {
SampleUtil_Print( "error: can't set power to value %d\n", on ); SampleUtil_Print( "error: can't set power to value %d\n", on );
return 0; return ( 0 );
} }
/* /*
@@ -679,7 +683,7 @@ TvDeviceSetPower( IN int on )
ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER, ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER,
value ); value );
return ret; return ( ret );
} }
/****************************************************************************** /******************************************************************************
@@ -696,7 +700,9 @@ TvDeviceSetPower( IN int on )
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDevicePowerOn( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
( *out ) = NULL; ( *out ) = NULL;
( *errorString ) = NULL; ( *errorString ) = NULL;
@@ -716,6 +722,7 @@ TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -733,7 +740,7 @@ TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error
*****************************************************************************/ *****************************************************************************/
int int
TvDevicePowerOff( IN IXML_Document * in, TvDevicePowerOff( IN IXML_Document * in,
OUT IXML_Document **out, OUT IXML_Document ** out,
OUT char **errorString ) OUT char **errorString )
{ {
( *out ) = NULL; ( *out ) = NULL;
@@ -772,8 +779,11 @@ TvDevicePowerOff( IN IXML_Document * in,
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetChannel( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int channel = 0; int channel = 0;
@@ -818,6 +828,7 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -835,10 +846,13 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString ) IncrementChannel( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curchannel; int curchannel,
int newchannel; newchannel;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -900,9 +914,12 @@ IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, O
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseChannel( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementChannel( -1, in, out, errorString ); return IncrementChannel( -1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -919,9 +936,12 @@ TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseChannel( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementChannel( 1, in, out, errorString ); return IncrementChannel( 1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -940,9 +960,13 @@ TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetVolume( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int volume = 0; int volume = 0;
( *out ) = NULL; ( *out ) = NULL;
@@ -983,6 +1007,7 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1001,7 +1026,10 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err
* *
*****************************************************************************/ *****************************************************************************/
int int
IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT char **errorString ) IncrementVolume( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curvolume, int curvolume,
newvolume; newvolume;
@@ -1038,7 +1066,8 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT
TV_CONTROL_VOLUME, value ) ) { TV_CONTROL_VOLUME, value ) ) {
if( UpnpAddToActionResponse( out, actionName, if( UpnpAddToActionResponse( out, actionName,
TvServiceType[TV_SERVICE_CONTROL], TvServiceType[TV_SERVICE_CONTROL],
"Volume", value ) != UPNP_E_SUCCESS ) { "Volume", value ) != UPNP_E_SUCCESS )
{
( *out ) = NULL; ( *out ) = NULL;
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
@@ -1048,6 +1077,7 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1064,9 +1094,13 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseVolume( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementVolume( 1, in, out, errorString ); return IncrementVolume( 1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -1083,9 +1117,13 @@ TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseVolume( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementVolume( -1, in, out, errorString ); return IncrementVolume( -1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -1104,9 +1142,13 @@ TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetColor( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int color = 0; int color = 0;
( *out ) = NULL; ( *out ) = NULL;
@@ -1146,6 +1188,7 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1162,11 +1205,16 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementColor( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curcolor; int curcolor,
int newcolor; newcolor;
char *actionName; char *actionName;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1224,8 +1272,11 @@ IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseColor( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementColor( -1, in, out, errorString ); return IncrementColor( -1, in, out, errorString );
} }
@@ -1242,8 +1293,11 @@ TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseColor( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementColor( 1, in, out, errorString ); return IncrementColor( 1, in, out, errorString );
} }
@@ -1263,9 +1317,13 @@ TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetTint( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int tint = -1; int tint = -1;
( *out ) = NULL; ( *out ) = NULL;
@@ -1324,10 +1382,14 @@ TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementTint( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curtint; int curtint,
int newtint; newtint;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1370,6 +1432,7 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1386,8 +1449,11 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseTint( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementTint( 1, in, out, errorString ); return IncrementTint( 1, in, out, errorString );
} }
@@ -1405,8 +1471,11 @@ TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseTint( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementTint( -1, in, out, errorString ); return IncrementTint( -1, in, out, errorString );
} }
@@ -1426,8 +1495,11 @@ TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **
* *
****************************************************************************/ ****************************************************************************/
int int
TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetContrast( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int contrast = -1; int contrast = -1;
@@ -1488,10 +1560,14 @@ TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **e
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementContrast( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curcontrast; int curcontrast,
int newcontrast; newcontrast;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1553,8 +1629,11 @@ IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, O
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseContrast( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementContrast( 1, in, out, errorString ); return IncrementContrast( 1, in, out, errorString );
} }
@@ -1572,7 +1651,9 @@ TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseContrast( IXML_Document * in,
IXML_Document ** out,
char **errorString )
{ {
return IncrementContrast( -1, in, out, errorString ); return IncrementContrast( -1, in, out, errorString );
} }
@@ -1590,8 +1671,11 @@ TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetBrightness( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int brightness = -1; int brightness = -1;
@@ -1634,6 +1718,7 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1651,10 +1736,13 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementBrightness( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curbrightness; int curbrightness,
int newbrightness; newbrightness;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1715,7 +1803,9 @@ IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out,
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseBrightness( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementBrightness( 1, in, out, errorString ); return IncrementBrightness( 1, in, out, errorString );
} }
@@ -1733,7 +1823,9 @@ TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT c
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseBrightness( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementBrightness( -1, in, out, errorString ); return IncrementBrightness( -1, in, out, errorString );
} }
@@ -1757,19 +1849,29 @@ TvDeviceDecreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT c
* Cookie -- Optional data specified during callback registration * Cookie -- Optional data specified during callback registration
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Cookie) int
TvDeviceCallbackEventHandler( Upnp_EventType EventType,
void *Event,
void *Cookie )
{ {
switch ( EventType ) { switch ( EventType ) {
case UPNP_EVENT_SUBSCRIPTION_REQUEST: case UPNP_EVENT_SUBSCRIPTION_REQUEST:
TvDeviceHandleSubscriptionRequest((UpnpSubscriptionRequest *)Event);
TvDeviceHandleSubscriptionRequest( ( struct
Upnp_Subscription_Request
* )Event );
break; break;
case UPNP_CONTROL_GET_VAR_REQUEST: case UPNP_CONTROL_GET_VAR_REQUEST:
TvDeviceHandleGetVarRequest( (UpnpStateVarRequest *)Event ); TvDeviceHandleGetVarRequest( ( struct Upnp_State_Var_Request
* )Event );
break; break;
case UPNP_CONTROL_ACTION_REQUEST: case UPNP_CONTROL_ACTION_REQUEST:
TvDeviceHandleActionRequest( (UpnpActionRequest *)Event ); TvDeviceHandleActionRequest( ( struct Upnp_Action_Request * )
Event );
break; break;
/* /*
@@ -1788,14 +1890,17 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co
break; break;
default: default:
SampleUtil_Print( "Error in TvDeviceCallbackEventHandler: unknown event type %d\n", SampleUtil_Print
( "Error in TvDeviceCallbackEventHandler: unknown event type %d\n",
EventType ); EventType );
} }
/* Print a summary of the event received */ /*
Print a summary of the event received
*/
SampleUtil_PrintEvent( EventType, Event ); SampleUtil_PrintEvent( EventType, Event );
return 0; return ( 0 );
} }
/****************************************************************************** /******************************************************************************
@@ -1808,13 +1913,12 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceStop() TvDeviceStop( )
{ {
UpnpUnRegisterRootDevice( device_handle ); UpnpUnRegisterRootDevice( device_handle );
UpnpFinish(); UpnpFinish( );
SampleUtil_Finish(); SampleUtil_Finish( );
ithread_mutex_destroy( &TVDevMutex ); ithread_mutex_destroy( &TVDevMutex );
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
@@ -1847,83 +1951,81 @@ TvDeviceStart( char *ip_address,
print_string pfun ) print_string pfun )
{ {
int ret = UPNP_E_SUCCESS; int ret = UPNP_E_SUCCESS;
char desc_doc_url[DESC_URL_SIZE]; char desc_doc_url[DESC_URL_SIZE];
ithread_mutex_init( &TVDevMutex, NULL ); ithread_mutex_init( &TVDevMutex, NULL );
SampleUtil_Initialize( pfun ); SampleUtil_Initialize( pfun );
SampleUtil_Print( SampleUtil_Print
"Initializing UPnP Sdk with\n" ( "Initializing UPnP Sdk with \n \t ipaddress = %s port = %d\n",
"\tipaddress = %s port = %u\n",
ip_address, port ); ip_address, port );
ret = UpnpInit( ip_address, port ); if( ( ret = UpnpInit( ip_address, port ) ) != UPNP_E_SUCCESS ) {
if( ret != UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error with UpnpInit -- %d\n", ret ); SampleUtil_Print( "Error with UpnpInit -- %d\n", ret );
UpnpFinish(); UpnpFinish( );
return ret; return ret;
} }
ip_address = UpnpGetServerIpAddress(); if( ip_address == NULL ) {
port = UpnpGetServerPort(); ip_address = UpnpGetServerIpAddress( );
}
SampleUtil_Print( if( port == 0 ) {
"UPnP Initialized\n" port = UpnpGetServerPort( );
"\tipaddress= %s port = %u\n", }
SampleUtil_Print( "UPnP Initialized\n \t ipaddress= %s port = %d\n",
ip_address, port ); ip_address, port );
if( desc_doc_name == NULL ) { if( desc_doc_name == NULL )
desc_doc_name = "tvcombodesc.xml"; desc_doc_name = "tvcombodesc.xml";
}
if( web_dir_path == NULL ) { if( web_dir_path == NULL )
web_dir_path = DEFAULT_WEB_DIR; web_dir_path = DEFAULT_WEB_DIR;
}
snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address, snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address,
port, desc_doc_name ); port, desc_doc_name );
SampleUtil_Print( "Specifying the webserver root directory -- %s\n", SampleUtil_Print( "Specifying the webserver root directory -- %s\n",
web_dir_path ); web_dir_path );
ret = UpnpSetWebServerRootDir( web_dir_path ); if( ( ret =
if( ret != UPNP_E_SUCCESS ) { UpnpSetWebServerRootDir( web_dir_path ) ) != UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error specifying webserver root directory -- %s: %d\n", SampleUtil_Print
( "Error specifying webserver root directory -- %s: %d\n",
web_dir_path, ret ); web_dir_path, ret );
UpnpFinish(); UpnpFinish( );
return ret; return ret;
} }
SampleUtil_Print( SampleUtil_Print
"Registering the RootDevice\n" ( "Registering the RootDevice\n\t with desc_doc_url: %s\n",
"\t with desc_doc_url: %s\n",
desc_doc_url ); desc_doc_url );
ret = UpnpRegisterRootDevice( desc_doc_url, TvDeviceCallbackEventHandler, if( ( ret = UpnpRegisterRootDevice( desc_doc_url,
&device_handle, &device_handle ); TvDeviceCallbackEventHandler,
if( ret != UPNP_E_SUCCESS ) { &device_handle, &device_handle ) )
!= UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error registering the rootdevice : %d\n", ret ); SampleUtil_Print( "Error registering the rootdevice : %d\n", ret );
UpnpFinish(); UpnpFinish( );
return ret; return ret;
} else { } else {
SampleUtil_Print( SampleUtil_Print( "RootDevice Registered\n" );
"RootDevice Registered\n"
"Initializing State Table\n");
TvDeviceStateTableInit( desc_doc_url );
SampleUtil_Print("State Table Initialized\n");
ret = UpnpSendAdvertisement( device_handle, default_advr_expire );
if( ret != UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error sending advertisements : %d\n", ret );
UpnpFinish();
SampleUtil_Print( "Initializing State Table\n" );
TvDeviceStateTableInit( desc_doc_url );
SampleUtil_Print( "State Table Initialized\n" );
if( ( ret =
UpnpSendAdvertisement( device_handle, default_advr_expire ) )
!= UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error sending advertisements : %d\n", ret );
UpnpFinish( );
return ret; return ret;
} }
SampleUtil_Print("Advertisements Sent\n"); SampleUtil_Print( "Advertisements Sent\n" );
} }
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }

View File

@@ -1,65 +1,50 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef UPNP_TV_DEVICE_H #ifndef UPNP_TV_DEVICE_H
#define UPNP_TV_DEVICE_H #define UPNP_TV_DEVICE_H
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include "sample_util.h"
#include "ithread.h" #include "ithread.h"
#include "upnp.h"
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h>
#include <string.h> #include <string.h>
#include "upnp.h"
#include "sample_util.h"
#ifdef WIN32
/* Do not #include <unistd.h> */
#else
#include <unistd.h>
#endif
//Color constants //Color constants
#define MAX_COLOR 10 #define MAX_COLOR 10
@@ -161,7 +146,8 @@ extern char *TvServiceType[];
* *
*****************************************************************************/ *****************************************************************************/
typedef int (*upnp_action) (IXML_Document *request, IXML_Document **out, char **errorString); typedef int (*upnp_action) (IXML_Document *request, IXML_Document **out,
char **errorString);
/* Structure for storing Tv Service /* Structure for storing Tv Service
identifiers and state table */ identifiers and state table */
@@ -205,7 +191,7 @@ extern ithread_mutex_t TVDevMutex;
* struct TvService *out - service containing action table to set. * struct TvService *out - service containing action table to set.
* *
*****************************************************************************/ *****************************************************************************/
int SetActionTable(int serviceType, struct TvService *out); int SetActionTable(int serviceType, struct TvService * out);
/****************************************************************************** /******************************************************************************
* TvDeviceStateTableInit * TvDeviceStateTableInit
@@ -239,7 +225,7 @@ int TvDeviceStateTableInit(char*);
* sr_event -- The subscription request event structure * sr_event -- The subscription request event structure
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceHandleSubscriptionRequest(const UpnpSubscriptionRequest *); int TvDeviceHandleSubscriptionRequest(struct Upnp_Subscription_Request *);
/****************************************************************************** /******************************************************************************
* TvDeviceHandleGetVarRequest * TvDeviceHandleGetVarRequest
@@ -253,7 +239,7 @@ int TvDeviceHandleSubscriptionRequest(const UpnpSubscriptionRequest *);
* cgv_event -- The control get variable request event structure * cgv_event -- The control get variable request event structure
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceHandleGetVarRequest(UpnpStateVarRequest *); int TvDeviceHandleGetVarRequest(struct Upnp_State_Var_Request *);
/****************************************************************************** /******************************************************************************
* TvDeviceHandleActionRequest * TvDeviceHandleActionRequest
@@ -267,7 +253,7 @@ int TvDeviceHandleGetVarRequest(UpnpStateVarRequest *);
* ca_event -- The control action request event structure * ca_event -- The control action request event structure
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceHandleActionRequest(UpnpActionRequest *); int TvDeviceHandleActionRequest(struct Upnp_Action_Request *);
/****************************************************************************** /******************************************************************************
* TvDeviceCallbackEventHandler * TvDeviceCallbackEventHandler
@@ -325,7 +311,8 @@ int TvDeviceSetServiceTableVar(unsigned int, unsigned int, char*);
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString); int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDevicePowerOff * TvDevicePowerOff
@@ -340,7 +327,8 @@ int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out, OUT char **e
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetChannel * TvDeviceSetChannel
@@ -357,7 +345,8 @@ int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out, OUT char **e
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseChannel * TvDeviceIncreaseChannel
@@ -372,7 +361,8 @@ int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseChannel * TvDeviceDecreaseChannel
* *
@@ -386,7 +376,8 @@ int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT c
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetVolume * TvDeviceSetVolume
* *
@@ -402,7 +393,8 @@ int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT c
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseVolume * TvDeviceIncreaseVolume
@@ -417,7 +409,8 @@ int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
@@ -433,7 +426,8 @@ int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT ch
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
OUT char **errorString);
//Picture Service Actions //Picture Service Actions
@@ -453,7 +447,8 @@ int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT ch
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
@@ -468,7 +463,8 @@ int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out, OUT char **e
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseColor * TvDeviceDecreaseColor
@@ -482,7 +478,8 @@ int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT ch
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetTint * TvDeviceSetTint
@@ -499,7 +496,8 @@ int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT ch
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseTint * TvDeviceIncreaseTint
@@ -514,7 +512,8 @@ int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **er
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseTint * TvDeviceDecreaseTint
@@ -529,7 +528,8 @@ int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/***************************************************************************** /*****************************************************************************
* TvDeviceSetContrast * TvDeviceSetContrast
@@ -546,7 +546,8 @@ int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
****************************************************************************/ ****************************************************************************/
int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseContrast * TvDeviceIncreaseContrast
@@ -562,7 +563,8 @@ int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseContrast * TvDeviceDecreaseContrast
* *
@@ -576,7 +578,8 @@ int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetBrightness * TvDeviceSetBrightness
@@ -590,7 +593,8 @@ int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT
* brightness -- The brightness value to change to. * brightness -- The brightness value to change to.
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseBrightness * TvDeviceIncreaseBrightness
@@ -605,7 +609,8 @@ int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT cha
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseBrightness * TvDeviceDecreaseBrightness
@@ -619,7 +624,8 @@ int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out, OU
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
int TvDeviceStart(char * ip_address, unsigned short port,char * desc_doc_name, int TvDeviceStart(char * ip_address, unsigned short port,char * desc_doc_name,
char *web_dir_path, print_string pfun); char *web_dir_path, print_string pfun);

View File

@@ -1,40 +1,37 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "sample_util.h"
#include "upnp_tv_ctrlpt.h"
#include <stdio.h> #include <stdio.h>
#include "sample_util.h"
#include "upnp_tv_ctrlpt.h"
#include <string.h> #include <string.h>
/* /*
@@ -127,72 +124,108 @@ TvCtrlPointPrintLongHelp( void )
SampleUtil_Print( "* TV Control Point Help Info *" ); SampleUtil_Print( "* TV Control Point Help Info *" );
SampleUtil_Print( "******************************" ); SampleUtil_Print( "******************************" );
SampleUtil_Print( "" ); SampleUtil_Print( "" );
SampleUtil_Print( "This sample control point application automatically searches" ); SampleUtil_Print
SampleUtil_Print( "for and subscribes to the services of television device emulator" ); ( "This sample control point application automatically searches" );
SampleUtil_Print( "devices, described in the tvdevicedesc.xml description document." ); SampleUtil_Print
( "for and subscribes to the services of television device emulator" );
SampleUtil_Print
( "devices, described in the tvdevicedesc.xml description document." );
SampleUtil_Print( "" ); SampleUtil_Print( "" );
SampleUtil_Print( "Commands:" ); SampleUtil_Print( "Commands:" );
SampleUtil_Print( " Help" ); SampleUtil_Print( " Help" );
SampleUtil_Print( " Print this help info." ); SampleUtil_Print( " Print this help info." );
SampleUtil_Print( " ListDev" ); SampleUtil_Print( " ListDev" );
SampleUtil_Print( " Print the current list of TV Device Emulators that this" ); SampleUtil_Print
SampleUtil_Print( " control point is aware of. Each device is preceded by a" ); ( " Print the current list of TV Device Emulators that this" );
SampleUtil_Print( " device number which corresponds to the devnum argument of" ); SampleUtil_Print
( " control point is aware of. Each device is preceded by a" );
SampleUtil_Print
( " device number which corresponds to the devnum argument of" );
SampleUtil_Print( " commands listed below." ); SampleUtil_Print( " commands listed below." );
SampleUtil_Print( " Refresh" ); SampleUtil_Print( " Refresh" );
SampleUtil_Print( " Delete all of the devices from the device list and issue new" ); SampleUtil_Print
SampleUtil_Print( " search request to rebuild the list from scratch." ); ( " Delete all of the devices from the device list and issue new" );
SampleUtil_Print
( " search request to rebuild the list from scratch." );
SampleUtil_Print( " PrintDev <devnum>" ); SampleUtil_Print( " PrintDev <devnum>" );
SampleUtil_Print( " Print the state table for the device <devnum>." ); SampleUtil_Print
SampleUtil_Print( " e.g., 'PrintDev 1' prints the state table for the first" ); ( " Print the state table for the device <devnum>." );
SampleUtil_Print
( " e.g., 'PrintDev 1' prints the state table for the first" );
SampleUtil_Print( " device in the device list." ); SampleUtil_Print( " device in the device list." );
SampleUtil_Print( " PowerOn <devnum>" ); SampleUtil_Print( " PowerOn <devnum>" );
SampleUtil_Print( " Sends the PowerOn action to the Control Service of" ); SampleUtil_Print
( " Sends the PowerOn action to the Control Service of" );
SampleUtil_Print( " device <devnum>." ); SampleUtil_Print( " device <devnum>." );
SampleUtil_Print( " PowerOff <devnum>" ); SampleUtil_Print( " PowerOff <devnum>" );
SampleUtil_Print( " Sends the PowerOff action to the Control Service of" ); SampleUtil_Print
( " Sends the PowerOff action to the Control Service of" );
SampleUtil_Print( " device <devnum>." ); SampleUtil_Print( " device <devnum>." );
SampleUtil_Print( " SetChannel <devnum> <channel>" ); SampleUtil_Print( " SetChannel <devnum> <channel>" );
SampleUtil_Print( " Sends the SetChannel action to the Control Service of" ); SampleUtil_Print
SampleUtil_Print( " device <devnum>, requesting the channel to be changed" ); ( " Sends the SetChannel action to the Control Service of" );
SampleUtil_Print
( " device <devnum>, requesting the channel to be changed" );
SampleUtil_Print( " to <channel>." ); SampleUtil_Print( " to <channel>." );
SampleUtil_Print( " SetVolume <devnum> <volume>" ); SampleUtil_Print( " SetVolume <devnum> <volume>" );
SampleUtil_Print( " Sends the SetVolume action to the Control Service of" ); SampleUtil_Print
SampleUtil_Print( " device <devnum>, requesting the volume to be changed" ); ( " Sends the SetVolume action to the Control Service of" );
SampleUtil_Print
( " device <devnum>, requesting the volume to be changed" );
SampleUtil_Print( " to <volume>." ); SampleUtil_Print( " to <volume>." );
SampleUtil_Print( " SetColor <devnum> <color>" ); SampleUtil_Print( " SetColor <devnum> <color>" );
SampleUtil_Print( " Sends the SetColor action to the Control Service of" ); SampleUtil_Print
SampleUtil_Print( " device <devnum>, requesting the color to be changed" ); ( " Sends the SetColor action to the Control Service of" );
SampleUtil_Print
( " device <devnum>, requesting the color to be changed" );
SampleUtil_Print( " to <color>." ); SampleUtil_Print( " to <color>." );
SampleUtil_Print( " SetTint <devnum> <tint>" ); SampleUtil_Print( " SetTint <devnum> <tint>" );
SampleUtil_Print( " Sends the SetTint action to the Control Service of" ); SampleUtil_Print
SampleUtil_Print( " device <devnum>, requesting the tint to be changed" ); ( " Sends the SetTint action to the Control Service of" );
SampleUtil_Print
( " device <devnum>, requesting the tint to be changed" );
SampleUtil_Print( " to <tint>." ); SampleUtil_Print( " to <tint>." );
SampleUtil_Print( " SetContrast <devnum> <contrast>" ); SampleUtil_Print( " SetContrast <devnum> <contrast>" );
SampleUtil_Print( " Sends the SetContrast action to the Control Service of" ); SampleUtil_Print
SampleUtil_Print( " device <devnum>, requesting the contrast to be changed" ); ( " Sends the SetContrast action to the Control Service of" );
SampleUtil_Print
( " device <devnum>, requesting the contrast to be changed" );
SampleUtil_Print( " to <contrast>." ); SampleUtil_Print( " to <contrast>." );
SampleUtil_Print( " SetBrightness <devnum> <brightness>" ); SampleUtil_Print( " SetBrightness <devnum> <brightness>" );
SampleUtil_Print( " Sends the SetBrightness action to the Control Service of" ); SampleUtil_Print
SampleUtil_Print( " device <devnum>, requesting the brightness to be changed" ); ( " Sends the SetBrightness action to the Control Service of" );
SampleUtil_Print
( " device <devnum>, requesting the brightness to be changed" );
SampleUtil_Print( " to <brightness>." ); SampleUtil_Print( " to <brightness>." );
SampleUtil_Print( " CtrlAction <devnum> <action>" ); SampleUtil_Print( " CtrlAction <devnum> <action>" );
SampleUtil_Print( " Sends an action request specified by the string <action>" ); SampleUtil_Print
SampleUtil_Print( " to the Control Service of device <devnum>. This command" ); ( " Sends an action request specified by the string <action>" );
SampleUtil_Print( " only works for actions that have no arguments." ); SampleUtil_Print
SampleUtil_Print( " (e.g., \"CtrlAction 1 IncreaseChannel\")" ); ( " to the Control Service of device <devnum>. This command" );
SampleUtil_Print
( " only works for actions that have no arguments." );
SampleUtil_Print
( " (e.g., \"CtrlAction 1 IncreaseChannel\")" );
SampleUtil_Print( " PictAction <devnum> <action>" ); SampleUtil_Print( " PictAction <devnum> <action>" );
SampleUtil_Print( " Sends an action request specified by the string <action>" ); SampleUtil_Print
SampleUtil_Print( " to the Picture Service of device <devnum>. This command" ); ( " Sends an action request specified by the string <action>" );
SampleUtil_Print( " only works for actions that have no arguments." ); SampleUtil_Print
SampleUtil_Print( " (e.g., \"PictAction 1 DecreaseContrast\")" ); ( " to the Picture Service of device <devnum>. This command" );
SampleUtil_Print
( " only works for actions that have no arguments." );
SampleUtil_Print
( " (e.g., \"PictAction 1 DecreaseContrast\")" );
SampleUtil_Print( " CtrlGetVar <devnum> <varname>" ); SampleUtil_Print( " CtrlGetVar <devnum> <varname>" );
SampleUtil_Print( " Requests the value of a variable specified by the string <varname>" ); SampleUtil_Print
SampleUtil_Print( " from the Control Service of device <devnum>." ); ( " Requests the value of a variable specified by the string <varname>" );
SampleUtil_Print
( " from the Control Service of device <devnum>." );
SampleUtil_Print( " (e.g., \"CtrlGetVar 1 Volume\")" ); SampleUtil_Print( " (e.g., \"CtrlGetVar 1 Volume\")" );
SampleUtil_Print( " PictGetVar <devnum> <action>" ); SampleUtil_Print( " PictGetVar <devnum> <action>" );
SampleUtil_Print( " Requests the value of a variable specified by the string <varname>" ); SampleUtil_Print
SampleUtil_Print( " from the Picture Service of device <devnum>." ); ( " Requests the value of a variable specified by the string <varname>" );
SampleUtil_Print
( " from the Picture Service of device <devnum>." );
SampleUtil_Print( " (e.g., \"PictGetVar 1 Tint\")" ); SampleUtil_Print( " (e.g., \"PictGetVar 1 Tint\")" );
SampleUtil_Print( " Exit" ); SampleUtil_Print( " Exit" );
SampleUtil_Print( " Exits the control point application." ); SampleUtil_Print( " Exits the control point application." );
@@ -209,7 +242,7 @@ TvCtrlPointPrintLongHelp( void )
* *
********************************************************************************/ ********************************************************************************/
void void
TvCtrlPointPrintCommands() TvCtrlPointPrintCommands( )
{ {
int i; int i;
int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands ); int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands );
@@ -288,11 +321,11 @@ TvCtrlPointProcessCommand( char *cmdline )
switch ( cmdnum ) { switch ( cmdnum ) {
case PRTHELP: case PRTHELP:
TvCtrlPointPrintShortHelp(); TvCtrlPointPrintShortHelp( );
break; break;
case PRTFULLHELP: case PRTFULLHELP:
TvCtrlPointPrintLongHelp(); TvCtrlPointPrintLongHelp( );
break; break;
case POWON: case POWON:
@@ -378,15 +411,15 @@ TvCtrlPointProcessCommand( char *cmdline )
break; break;
case LSTDEV: case LSTDEV:
TvCtrlPointPrintList(); TvCtrlPointPrintList( );
break; break;
case REFRESH: case REFRESH:
TvCtrlPointRefresh(); TvCtrlPointRefresh( );
break; break;
case EXITCMD: case EXITCMD:
rc = TvCtrlPointStop(); rc = TvCtrlPointStop( );
exit( rc ); exit( rc );
break; break;
@@ -401,29 +434,26 @@ TvCtrlPointProcessCommand( char *cmdline )
return TV_SUCCESS; return TV_SUCCESS;
} }
int main( int argc, char **argv ) int
main( int argc,
char **argv )
{ {
int rc; int rc;
ithread_t cmdloop_thread; ithread_t cmdloop_thread;
#ifdef WIN32
#else
int sig; int sig;
sigset_t sigs_to_catch; sigset_t sigs_to_catch;
#endif
int code; int code;
rc = TvCtrlPointStart( linux_print, NULL ); rc = TvCtrlPointStart( linux_print, NULL );
if( rc != TV_SUCCESS ) { if( rc != TV_SUCCESS ) {
SampleUtil_Print( "Error starting UPnP TV Control Point" ); SampleUtil_Print( "Error starting UPnP TV Control Point" );
return rc; exit( rc );
} }
/* start a command loop thread */ // start a command loop thread
code = ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop, NULL ); code =
ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop,
NULL );
#ifdef WIN32
ithread_join(cmdloop_thread, NULL);
#else
/* /*
Catch Ctrl-C and properly shutdown Catch Ctrl-C and properly shutdown
*/ */
@@ -431,11 +461,7 @@ int main( int argc, char **argv )
sigaddset( &sigs_to_catch, SIGINT ); sigaddset( &sigs_to_catch, SIGINT );
sigwait( &sigs_to_catch, &sig ); sigwait( &sigs_to_catch, &sig );
SampleUtil_Print( "Shutting down on signal %d...\n", sig ); SampleUtil_Print( "Shutting down on signal %d...", sig );
#endif rc = TvCtrlPointStop( );
exit( rc );
rc = TvCtrlPointStop();
return rc;
} }

View File

@@ -1,42 +1,37 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "upnp_tv_ctrlpt.h" #include "upnp_tv_ctrlpt.h"
/*
#include "upnp.h"
/*!
Mutex for protecting the global device list Mutex for protecting the global device list
in a multi-threaded, asynchronous environment. in a multi-threaded, asynchronous environment.
All functions should lock this mutex before reading All functions should lock this mutex before reading
@@ -53,7 +48,7 @@ char *TvServiceType[] = {
}; };
char *TvServiceName[] = { "Control", "Picture" }; char *TvServiceName[] = { "Control", "Picture" };
/*! /*
Global arrays for storing variable names and counts for Global arrays for storing variable names and counts for
TvControl and TvPicture services TvControl and TvPicture services
*/ */
@@ -64,12 +59,12 @@ char *TvVarName[TV_SERVICE_SERVCOUNT][TV_MAXVARS] = {
char TvVarCount[TV_SERVICE_SERVCOUNT] = char TvVarCount[TV_SERVICE_SERVCOUNT] =
{ TV_CONTROL_VARCOUNT, TV_PICTURE_VARCOUNT }; { TV_CONTROL_VARCOUNT, TV_PICTURE_VARCOUNT };
/*! /*
Timeout to request during subscriptions Timeout to request during subscriptions
*/ */
int default_timeout = 1801; int default_timeout = 1801;
/*! /*
The first node in the global device list, or NULL if empty The first node in the global device list, or NULL if empty
*/ */
struct TvDeviceNode *GlobalDeviceList = NULL; struct TvDeviceNode *GlobalDeviceList = NULL;
@@ -144,10 +139,10 @@ TvCtrlPointDeleteNode( struct TvDeviceNode *node )
* *
********************************************************************************/ ********************************************************************************/
int int
TvCtrlPointRemoveDevice(const char *UDN) TvCtrlPointRemoveDevice( char *UDN )
{ {
struct TvDeviceNode *curdevnode; struct TvDeviceNode *curdevnode,
struct TvDeviceNode *prevdevnode; *prevdevnode;
ithread_mutex_lock( &DeviceListMutex ); ithread_mutex_lock( &DeviceListMutex );
@@ -229,7 +224,7 @@ TvCtrlPointRefresh( void )
{ {
int rc; int rc;
TvCtrlPointRemoveAll(); TvCtrlPointRemoveAll( );
/* /*
Search for all devices of type tvdevice version 1, Search for all devices of type tvdevice version 1,
@@ -544,7 +539,7 @@ TvCtrlPointGetDevice( int devnum,
* *
********************************************************************************/ ********************************************************************************/
int int
TvCtrlPointPrintList() TvCtrlPointPrintList( )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int i = 0; int i = 0;
@@ -673,8 +668,8 @@ TvCtrlPointPrintDevice( int devnum )
* *
********************************************************************************/ ********************************************************************************/
void void
TvCtrlPointAddDevice( IXML_Document *DescDoc, TvCtrlPointAddDevice( IXML_Document * DescDoc,
const char *location, char *location,
int expires ) int expires )
{ {
char *deviceType = NULL; char *deviceType = NULL;
@@ -687,19 +682,20 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc,
char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL };
char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL }; char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL };
Upnp_SID eventSID[TV_SERVICE_SERVCOUNT]; Upnp_SID eventSID[TV_SERVICE_SERVCOUNT];
int TimeOut[TV_SERVICE_SERVCOUNT] = { int TimeOut[TV_SERVICE_SERVCOUNT] =
default_timeout, { default_timeout, default_timeout };
default_timeout };
struct TvDeviceNode *deviceNode; struct TvDeviceNode *deviceNode;
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int ret = 1; int ret = 1;
int found = 0; int found = 0;
int service; int service,
int var; var;
ithread_mutex_lock( &DeviceListMutex ); ithread_mutex_lock( &DeviceListMutex );
/* Read key elements from description document */ /*
Read key elements from description document
*/
UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" ); UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" );
deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" ); deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" );
friendlyName = friendlyName =
@@ -707,8 +703,9 @@ TvCtrlPointAddDevice( IXML_Document *DescDoc,
baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" ); baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" );
relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" ); relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" );
ret = UpnpResolveURL( ret =
( baseURL ? baseURL : location ), relURL, presURL); UpnpResolveURL( ( baseURL ? baseURL : location ), relURL,
presURL );
if( UPNP_E_SUCCESS != ret ) if( UPNP_E_SUCCESS != ret )
SampleUtil_Print( "Error generating presURL from %s + %s", baseURL, SampleUtil_Print( "Error generating presURL from %s + %s", baseURL,
@@ -942,38 +939,34 @@ TvStateUpdate( char *UDN,
* changes -- The DOM document representing the changes * changes -- The DOM document representing the changes
* *
********************************************************************************/ ********************************************************************************/
void TvCtrlPointHandleEvent( void
const UpnpString *sid, TvCtrlPointHandleEvent( Upnp_SID sid,
int evntkey, int evntkey,
IXML_Document *changes) IXML_Document * changes )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int service; int service;
const char *aux_sid = NULL;
ithread_mutex_lock(&DeviceListMutex); ithread_mutex_lock( &DeviceListMutex );
tmpdevnode = GlobalDeviceList; tmpdevnode = GlobalDeviceList;
while (tmpdevnode) { while( tmpdevnode ) {
for (service = 0; service < TV_SERVICE_SERVCOUNT; ++service) { for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) {
aux_sid = UpnpString_get_String(sid); if( strcmp( tmpdevnode->device.TvService[service].SID, sid ) ==
if (strcmp(tmpdevnode->device.TvService[service].SID, aux_sid) == 0) { 0 ) {
SampleUtil_Print("Received Tv %s Event: %d for SID %s", SampleUtil_Print( "Received Tv %s Event: %d for SID %s",
TvServiceName[service], TvServiceName[service], evntkey, sid );
evntkey,
aux_sid); TvStateUpdate( tmpdevnode->device.UDN, service, changes,
TvStateUpdate( ( char ** )&tmpdevnode->device.
tmpdevnode->device.UDN, TvService[service].VariableStrVal );
service,
changes,
(char **)&tmpdevnode->device.TvService[service].VariableStrVal);
break; break;
} }
} }
tmpdevnode = tmpdevnode->next; tmpdevnode = tmpdevnode->next;
} }
ithread_mutex_unlock(&DeviceListMutex); ithread_mutex_unlock( &DeviceListMutex );
} }
/******************************************************************************** /********************************************************************************
@@ -990,10 +983,10 @@ void TvCtrlPointHandleEvent(
* timeout -- The new timeout for the subscription * timeout -- The new timeout for the subscription
* *
********************************************************************************/ ********************************************************************************/
void TvCtrlPointHandleSubscribeUpdate( void
const char *eventURL, TvCtrlPointHandleSubscribeUpdate( char *eventURL,
const Upnp_SID sid, Upnp_SID sid,
int timeout) int timeout )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
int service; int service;
@@ -1022,9 +1015,9 @@ void TvCtrlPointHandleSubscribeUpdate(
} }
void void
TvCtrlPointHandleGetVar( const char *controlURL, TvCtrlPointHandleGetVar( char *controlURL,
const char *varName, char *varName,
const DOMString varValue ) DOMString varValue )
{ {
struct TvDeviceNode *tmpdevnode; struct TvDeviceNode *tmpdevnode;
@@ -1033,11 +1026,14 @@ TvCtrlPointHandleGetVar( const char *controlURL,
ithread_mutex_lock( &DeviceListMutex ); ithread_mutex_lock( &DeviceListMutex );
tmpdevnode = GlobalDeviceList; tmpdevnode = GlobalDeviceList;
while (tmpdevnode) { while( tmpdevnode ) {
for (service = 0; service < TV_SERVICE_SERVCOUNT; service++) { for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) {
if (strcmp(tmpdevnode->device.TvService[service].ControlURL, controlURL ) == 0 ) { if( strcmp
SampleUtil_StateUpdate( ( tmpdevnode->device.TvService[service].ControlURL,
varName, varValue, tmpdevnode->device.UDN, GET_VAR_COMPLETE ); controlURL ) == 0 ) {
SampleUtil_StateUpdate( varName, varValue,
tmpdevnode->device.UDN,
GET_VAR_COMPLETE );
break; break;
} }
} }
@@ -1061,153 +1057,179 @@ TvCtrlPointHandleGetVar( const char *controlURL,
* Cookie -- Optional data specified during callback registration * Cookie -- Optional data specified during callback registration
* *
********************************************************************************/ ********************************************************************************/
int TvCtrlPointCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Cookie) int
TvCtrlPointCallbackEventHandler( Upnp_EventType EventType,
void *Event,
void *Cookie )
{ {
int errCode = 0; SampleUtil_PrintEvent( EventType, Event );
SampleUtil_PrintEvent(EventType, Event);
switch ( EventType ) { switch ( EventType ) {
/* SSDP Stuff */ /*
SSDP Stuff
*/
case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE:
case UPNP_DISCOVERY_SEARCH_RESULT: { case UPNP_DISCOVERY_SEARCH_RESULT:
UpnpDiscovery *d_event = (UpnpDiscovery *)Event; {
struct Upnp_Discovery *d_event =
( struct Upnp_Discovery * )Event;
IXML_Document *DescDoc = NULL; IXML_Document *DescDoc = NULL;
const char *location = NULL; int ret;
int errCode = UpnpDiscovery_get_ErrCode(d_event);
if (errCode != UPNP_E_SUCCESS) { if( d_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print( SampleUtil_Print( "Error in Discovery Callback -- %d",
"Error in Discovery Callback -- %d", errCode); d_event->ErrCode );
} }
location = UpnpString_get_String(UpnpDiscovery_get_Location(d_event)); if( ( ret =
errCode = UpnpDownloadXmlDoc(location, &DescDoc); UpnpDownloadXmlDoc( d_event->Location,
if (errCode != UPNP_E_SUCCESS) { &DescDoc ) ) !=
SampleUtil_Print( UPNP_E_SUCCESS ) {
"Error obtaining device description from %s -- error = %d", SampleUtil_Print
location, errCode); ( "Error obtaining device description from %s -- error = %d",
d_event->Location, ret );
} else { } else {
TvCtrlPointAddDevice( TvCtrlPointAddDevice( DescDoc, d_event->Location,
DescDoc, location, UpnpDiscovery_get_Expires(d_event)); d_event->Expires );
} }
if( DescDoc ) { if( DescDoc )
ixmlDocument_free(DescDoc); ixmlDocument_free( DescDoc );
}
TvCtrlPointPrintList(); TvCtrlPointPrintList( );
break; break;
} }
case UPNP_DISCOVERY_SEARCH_TIMEOUT: case UPNP_DISCOVERY_SEARCH_TIMEOUT:
/* Nothing to do here... */ /*
Nothing to do here...
*/
break; break;
case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: { case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE:
UpnpDiscovery *d_event = (UpnpDiscovery *)Event; {
int errCode = UpnpDiscovery_get_ErrCode(d_event); struct Upnp_Discovery *d_event =
const char *deviceId = UpnpString_get_String( ( struct Upnp_Discovery * )Event;
UpnpDiscovery_get_DeviceID(d_event));
if (errCode != UPNP_E_SUCCESS) { if( d_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print( SampleUtil_Print
"Error in Discovery ByeBye Callback -- %d", errCode); ( "Error in Discovery ByeBye Callback -- %d",
d_event->ErrCode );
} }
SampleUtil_Print("Received ByeBye for Device: %s", deviceId); SampleUtil_Print( "Received ByeBye for Device: %s",
TvCtrlPointRemoveDevice(deviceId); d_event->DeviceId );
TvCtrlPointRemoveDevice( d_event->DeviceId );
SampleUtil_Print("After byebye:"); SampleUtil_Print( "After byebye:" );
TvCtrlPointPrintList(); TvCtrlPointPrintList( );
break; break;
} }
/* SOAP Stuff */ /*
case UPNP_CONTROL_ACTION_COMPLETE: { SOAP Stuff
UpnpActionComplete *a_event = (UpnpActionComplete *)Event; */
int errCode = UpnpActionComplete_get_ErrCode(a_event); case UPNP_CONTROL_ACTION_COMPLETE:
if (errCode != UPNP_E_SUCCESS) { {
SampleUtil_Print( struct Upnp_Action_Complete *a_event =
"Error in Action Complete Callback -- %d", ( struct Upnp_Action_Complete * )Event;
errCode);
if( a_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print
( "Error in Action Complete Callback -- %d",
a_event->ErrCode );
} }
/* No need for any processing here, just print out results. /*
* Service state table updates are handled by events. */ No need for any processing here, just print out results. Service state
table updates are handled by events.
*/
break; break;
} }
case UPNP_CONTROL_GET_VAR_COMPLETE: { case UPNP_CONTROL_GET_VAR_COMPLETE:
UpnpStateVarComplete *sv_event = (UpnpStateVarComplete *)Event; {
int errCode = UpnpStateVarComplete_get_ErrCode(sv_event); struct Upnp_State_Var_Complete *sv_event =
if (errCode != UPNP_E_SUCCESS) { ( struct Upnp_State_Var_Complete * )Event;
SampleUtil_Print(
"Error in Get Var Complete Callback -- %d", if( sv_event->ErrCode != UPNP_E_SUCCESS ) {
errCode ); SampleUtil_Print
( "Error in Get Var Complete Callback -- %d",
sv_event->ErrCode );
} else { } else {
TvCtrlPointHandleGetVar( TvCtrlPointHandleGetVar( sv_event->CtrlUrl,
UpnpString_get_String(UpnpStateVarComplete_get_CtrlUrl(sv_event)), sv_event->StateVarName,
UpnpString_get_String(UpnpStateVarComplete_get_StateVarName(sv_event)), sv_event->CurrentVal );
UpnpStateVarComplete_get_CurrentVal(sv_event) );
} }
break; break;
} }
/* GENA Stuff */ /*
case UPNP_EVENT_RECEIVED: { GENA Stuff
UpnpEvent *e_event = (UpnpEvent *)Event; */
TvCtrlPointHandleEvent( case UPNP_EVENT_RECEIVED:
UpnpEvent_get_SID(e_event), {
UpnpEvent_get_EventKey(e_event), struct Upnp_Event *e_event = ( struct Upnp_Event * )Event;
UpnpEvent_get_ChangedVariables(e_event));
TvCtrlPointHandleEvent( e_event->Sid, e_event->EventKey,
e_event->ChangedVariables );
break; break;
} }
case UPNP_EVENT_SUBSCRIBE_COMPLETE: case UPNP_EVENT_SUBSCRIBE_COMPLETE:
case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: case UPNP_EVENT_UNSUBSCRIBE_COMPLETE:
case UPNP_EVENT_RENEWAL_COMPLETE: { case UPNP_EVENT_RENEWAL_COMPLETE:
UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; {
errCode = UpnpEventSubscribe_get_ErrCode(es_event); struct Upnp_Event_Subscribe *es_event =
if (errCode != UPNP_E_SUCCESS) { ( struct Upnp_Event_Subscribe * )Event;
SampleUtil_Print(
"Error in Event Subscribe Callback -- %d", if( es_event->ErrCode != UPNP_E_SUCCESS ) {
errCode); SampleUtil_Print
( "Error in Event Subscribe Callback -- %d",
es_event->ErrCode );
} else { } else {
TvCtrlPointHandleSubscribeUpdate( TvCtrlPointHandleSubscribeUpdate( es_event->
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)), PublisherUrl,
UpnpString_get_String(UpnpEventSubscribe_get_SID(es_event)), es_event->Sid,
UpnpEventSubscribe_get_TimeOut(es_event)); es_event->TimeOut );
} }
break; break;
} }
case UPNP_EVENT_AUTORENEWAL_FAILED: case UPNP_EVENT_AUTORENEWAL_FAILED:
case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { case UPNP_EVENT_SUBSCRIPTION_EXPIRED:
UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; {
int TimeOut = default_timeout; int TimeOut = default_timeout;
Upnp_SID newSID; Upnp_SID newSID;
int ret;
errCode = UpnpSubscribe( struct Upnp_Event_Subscribe *es_event =
ctrlpt_handle, ( struct Upnp_Event_Subscribe * )Event;
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)),
&TimeOut,
newSID);
if (errCode == UPNP_E_SUCCESS) { ret =
SampleUtil_Print("Subscribed to EventURL with SID=%s", newSID); UpnpSubscribe( ctrlpt_handle, es_event->PublisherUrl,
TvCtrlPointHandleSubscribeUpdate( &TimeOut, newSID );
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)),
newSID, if( ret == UPNP_E_SUCCESS ) {
TimeOut); SampleUtil_Print( "Subscribed to EventURL with SID=%s",
newSID );
TvCtrlPointHandleSubscribeUpdate( es_event->
PublisherUrl, newSID,
TimeOut );
} else { } else {
SampleUtil_Print("Error Subscribing to EventURL -- %d", errCode); SampleUtil_Print
( "Error Subscribing to EventURL -- %d", ret );
} }
break; break;
} }
/* ignore these cases, since this is not a device */ /*
ignore these cases, since this is not a device
*/
case UPNP_EVENT_SUBSCRIPTION_REQUEST: case UPNP_EVENT_SUBSCRIPTION_REQUEST:
case UPNP_CONTROL_GET_VAR_REQUEST: case UPNP_CONTROL_GET_VAR_REQUEST:
case UPNP_CONTROL_ACTION_REQUEST: case UPNP_CONTROL_ACTION_REQUEST:
@@ -1298,12 +1320,12 @@ TvCtrlPointVerifyTimeouts( int incr )
* None * None
* *
********************************************************************************/ ********************************************************************************/
static int TvCtrlPointTimerLoopRun = 1; void *
void *TvCtrlPointTimerLoop(void *args) TvCtrlPointTimerLoop( void *args )
{ {
int incr = 30; // how often to verify the timeouts, in seconds int incr = 30; // how often to verify the timeouts, in seconds
while (TvCtrlPointTimerLoopRun) { while( 1 ) {
isleep( incr ); isleep( incr );
TvCtrlPointVerifyTimeouts( incr ); TvCtrlPointVerifyTimeouts( incr );
} }
@@ -1326,70 +1348,62 @@ void *TvCtrlPointTimerLoop(void *args)
* TV_SUCCESS if everything went well, else TV_ERROR * TV_SUCCESS if everything went well, else TV_ERROR
* *
********************************************************************************/ ********************************************************************************/
int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionPtr) int
TvCtrlPointStart( print_string printFunctionPtr,
state_update updateFunctionPtr )
{ {
ithread_t timer_thread; ithread_t timer_thread;
int rc; int rc;
unsigned short port = 0; short int port = 0;
char *ip_address = NULL; char *ip_address = NULL;
SampleUtil_Initialize(printFunctionPtr); SampleUtil_Initialize( printFunctionPtr );
SampleUtil_RegisterUpdateFunction(updateFunctionPtr); SampleUtil_RegisterUpdateFunction( updateFunctionPtr );
ithread_mutex_init(&DeviceListMutex, 0); ithread_mutex_init( &DeviceListMutex, 0 );
SampleUtil_Print( SampleUtil_Print( "Initializing UPnP with ipaddress=%s port=%d",
"Initializing UPnP Sdk with\n" ip_address, port );
"\tipaddress = %s port = %u\n", rc = UpnpInit( ip_address, port );
ip_address, port); if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc );
rc = UpnpInit(ip_address, port); UpnpFinish( );
if (rc != UPNP_E_SUCCESS) {
SampleUtil_Print("WinCEStart: UpnpInit() Error: %d", rc);
UpnpFinish();
return TV_ERROR; return TV_ERROR;
} }
if (!ip_address) {
ip_address = UpnpGetServerIpAddress();
}
if (!port) {
port = UpnpGetServerPort();
}
SampleUtil_Print( if( NULL == ip_address )
"UPnP Initialized\n" ip_address = UpnpGetServerIpAddress( );
"\tipaddress= %s port = %u\n", if( 0 == port )
ip_address, port); port = UpnpGetServerPort( );
SampleUtil_Print("Registering Control Point"); SampleUtil_Print( "UPnP Initialized (%s:%d)", ip_address, port );
rc = UpnpRegisterClient(TvCtrlPointCallbackEventHandler,
&ctrlpt_handle, &ctrlpt_handle); SampleUtil_Print( "Registering Control Point" );
if (rc != UPNP_E_SUCCESS) { rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler,
&ctrlpt_handle, &ctrlpt_handle );
if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "Error registering CP: %d", rc ); SampleUtil_Print( "Error registering CP: %d", rc );
UpnpFinish(); UpnpFinish( );
return TV_ERROR; return TV_ERROR;
} }
SampleUtil_Print("Control Point Registered"); SampleUtil_Print( "Control Point Registered" );
TvCtrlPointRefresh(); TvCtrlPointRefresh( );
/* start a timer thread */ // start a timer thread
ithread_create(&timer_thread, NULL, TvCtrlPointTimerLoop, NULL); ithread_create( &timer_thread, NULL, TvCtrlPointTimerLoop, NULL );
ithread_detach(timer_thread);
return TV_SUCCESS; return TV_SUCCESS;
} }
int TvCtrlPointStop(void) int
TvCtrlPointStop( void )
{ {
TvCtrlPointTimerLoopRun = 0; TvCtrlPointRemoveAll( );
TvCtrlPointRemoveAll();
UpnpUnRegisterClient( ctrlpt_handle ); UpnpUnRegisterClient( ctrlpt_handle );
UpnpFinish(); UpnpFinish( );
SampleUtil_Finish(); SampleUtil_Finish( );
return TV_SUCCESS; return TV_SUCCESS;
} }

View File

@@ -1,65 +1,53 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef UPNP_TV_CTRLPT_H #ifndef UPNP_TV_CTRLPT_H
#define UPNP_TV_CTRLPT_H #define UPNP_TV_CTRLPT_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <stdio.h>
#include "sample_util.h"
#include "ithread.h" #include "ithread.h"
#include "upnp.h" #include <unistd.h>
#include "upnptools.h"
#include <signal.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <signal.h>
#include <string.h> #include <string.h>
#include "upnp.h"
#ifdef WIN32 #include "upnptools.h"
/* Do not #include <unistd.h> */ #include "sample_util.h"
#else
#include <unistd.h>
#endif
#define TV_SERVICE_SERVCOUNT 2 #define TV_SERVICE_SERVCOUNT 2
#define TV_SERVICE_CONTROL 0 #define TV_SERVICE_CONTROL 0
@@ -120,11 +108,11 @@ extern ithread_mutex_t DeviceListMutex;
extern UpnpClient_Handle ctrlpt_handle; extern UpnpClient_Handle ctrlpt_handle;
void TvCtrlPointPrintHelp(); void TvCtrlPointPrintHelp( void );
int TvCtrlPointDeleteNode(struct TvDeviceNode*); int TvCtrlPointDeleteNode(struct TvDeviceNode*);
int TvCtrlPointRemoveDevice(const char *); int TvCtrlPointRemoveDevice(char*);
int TvCtrlPointRemoveAll(); int TvCtrlPointRemoveAll( void );
int TvCtrlPointRefresh(); int TvCtrlPointRefresh( void );
int TvCtrlPointSendAction(int, int, char *, char **, char **, int); int TvCtrlPointSendAction(int, int, char *, char **, char **, int);
@@ -150,11 +138,11 @@ int TvCtrlPointGetBrightness(int);
int TvCtrlPointGetDevice(int, struct TvDeviceNode **); int TvCtrlPointGetDevice(int, struct TvDeviceNode **);
int TvCtrlPointPrintList( void ); int TvCtrlPointPrintList( void );
int TvCtrlPointPrintDevice(int); int TvCtrlPointPrintDevice(int);
void TvCtrlPointAddDevice(IXML_Document *, const char *, int); void TvCtrlPointAddDevice (IXML_Document *, char *, int);
void TvCtrlPointHandleGetVar(const char *, const char *, const DOMString); void TvCtrlPointHandleGetVar(char *,char *,DOMString);
void TvStateUpdate(char*,int, IXML_Document * , char **); void TvStateUpdate(char*,int, IXML_Document * , char **);
void TvCtrlPointHandleEvent(const UpnpString *, int, IXML_Document *); void TvCtrlPointHandleEvent(Upnp_SID, int, IXML_Document *);
void TvCtrlPointHandleSubscribeUpdate(const char *, const Upnp_SID, int); void TvCtrlPointHandleSubscribeUpdate(char *, Upnp_SID, int);
int TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *); int TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *);
void TvCtrlPointVerifyTimeouts(int); void TvCtrlPointVerifyTimeouts(int);
void TvCtrlPointPrintCommands( void ); void TvCtrlPointPrintCommands( void );

View File

@@ -1,41 +1,37 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "sample_util.h"
#include "upnp_tv_device.h"
#include <stdio.h> #include <stdio.h>
#include "sample_util.h"
#include "upnp_tv_device.h"
/****************************************************************************** /******************************************************************************
* linux_print * linux_print
@@ -86,7 +82,7 @@ TvDeviceCommandLoop( void *args )
if( strcasecmp( cmd, "exit" ) == 0 ) { if( strcasecmp( cmd, "exit" ) == 0 ) {
SampleUtil_Print( "Shutting down...\n" ); SampleUtil_Print( "Shutting down...\n" );
TvDeviceStop(); TvDeviceStop( );
exit( 0 ); exit( 0 );
} else { } else {
SampleUtil_Print( "\n Unknown command: %s\n\n", cmd ); SampleUtil_Print( "\n Unknown command: %s\n\n", cmd );
@@ -121,27 +117,26 @@ TvDeviceCommandLoop( void *args )
* *
* *
*****************************************************************************/ *****************************************************************************/
int main( IN int argc, IN char **argv ) int
main( IN int argc,
IN char **argv )
{ {
unsigned int portTemp = 0; unsigned int portTemp = 0;
char *ip_address = NULL, char *ip_address = NULL,
*desc_doc_name = NULL, *desc_doc_name = NULL,
*web_dir_path = NULL; *web_dir_path = NULL;
int rc;
ithread_t cmdloop_thread; ithread_t cmdloop_thread;
#ifdef WIN32
#else
int sig;
sigset_t sigs_to_catch;
#endif
int code; int code;
unsigned int port = 0; unsigned int port = 0;
int sig;
sigset_t sigs_to_catch;
int i = 0; int i = 0;
SampleUtil_Initialize( linux_print ); SampleUtil_Initialize( linux_print );
// Parse options //Parse options
for( i = 1; i < argc; i++ ) { for( i = 1; i < argc; i++ ) {
if( strcmp( argv[i], "-ip" ) == 0 ) { if( strcmp( argv[i], "-ip" ) == 0 ) {
ip_address = argv[++i]; ip_address = argv[++i];
@@ -168,20 +163,21 @@ int main( IN int argc, IN char **argv )
( "\tweb_dir_path: Filesystem path where web files " ( "\tweb_dir_path: Filesystem path where web files "
"related to the device are stored\n" ); "related to the device are stored\n" );
SampleUtil_Print( "\t\te.g.: /upnp/sample/tvdevice/web\n" ); SampleUtil_Print( "\t\te.g.: /upnp/sample/tvdevice/web\n" );
return 1; exit( 1 );
} }
} }
port = ( unsigned short )portTemp; port = ( unsigned short )portTemp;
TvDeviceStart( ip_address, port, desc_doc_name, web_dir_path, linux_print ); TvDeviceStart( ip_address, port, desc_doc_name, web_dir_path,
linux_print );
/* start a command loop thread */ /*
code = ithread_create( &cmdloop_thread, NULL, TvDeviceCommandLoop, NULL ); start a command loop thread
*/
code = ithread_create( &cmdloop_thread, NULL, TvDeviceCommandLoop,
NULL );
#ifdef WIN32
ithread_join(cmdloop_thread, NULL);
#else
/* /*
Catch Ctrl-C and properly shutdown Catch Ctrl-C and properly shutdown
*/ */
@@ -190,9 +186,6 @@ int main( IN int argc, IN char **argv )
sigwait( &sigs_to_catch, &sig ); sigwait( &sigs_to_catch, &sig );
SampleUtil_Print( "Shutting down on signal %d...\n", sig ); SampleUtil_Print( "Shutting down on signal %d...\n", sig );
#endif TvDeviceStop( );
rc = TvDeviceStop(); exit( 0 );
return rc;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,65 +1,50 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef UPNP_TV_DEVICE_H #ifndef UPNP_TV_DEVICE_H
#define UPNP_TV_DEVICE_H #define UPNP_TV_DEVICE_H
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include "sample_util.h"
#include "ithread.h" #include "ithread.h"
#include "upnp.h"
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h>
#include <string.h> #include <string.h>
#include "upnp.h"
#include "sample_util.h"
#ifdef WIN32
/* Do not #include <unistd.h> */
#else
#include <unistd.h>
#endif
//Color constants //Color constants
#define MAX_COLOR 10 #define MAX_COLOR 10
@@ -161,7 +146,8 @@ extern char *TvServiceType[];
* *
*****************************************************************************/ *****************************************************************************/
typedef int (*upnp_action) (IXML_Document *request, IXML_Document **out, char **errorString); typedef int (*upnp_action) (IXML_Document *request, IXML_Document **out,
char **errorString);
/* Structure for storing Tv Service /* Structure for storing Tv Service
identifiers and state table */ identifiers and state table */
@@ -205,7 +191,7 @@ extern ithread_mutex_t TVDevMutex;
* struct TvService *out - service containing action table to set. * struct TvService *out - service containing action table to set.
* *
*****************************************************************************/ *****************************************************************************/
int SetActionTable(int serviceType, struct TvService *out); int SetActionTable(int serviceType, struct TvService * out);
/****************************************************************************** /******************************************************************************
* TvDeviceStateTableInit * TvDeviceStateTableInit
@@ -239,7 +225,7 @@ int TvDeviceStateTableInit(char*);
* sr_event -- The subscription request event structure * sr_event -- The subscription request event structure
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceHandleSubscriptionRequest(const UpnpSubscriptionRequest *); int TvDeviceHandleSubscriptionRequest(struct Upnp_Subscription_Request *);
/****************************************************************************** /******************************************************************************
* TvDeviceHandleGetVarRequest * TvDeviceHandleGetVarRequest
@@ -253,7 +239,7 @@ int TvDeviceHandleSubscriptionRequest(const UpnpSubscriptionRequest *);
* cgv_event -- The control get variable request event structure * cgv_event -- The control get variable request event structure
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceHandleGetVarRequest(UpnpStateVarRequest *); int TvDeviceHandleGetVarRequest(struct Upnp_State_Var_Request *);
/****************************************************************************** /******************************************************************************
* TvDeviceHandleActionRequest * TvDeviceHandleActionRequest
@@ -267,7 +253,7 @@ int TvDeviceHandleGetVarRequest(UpnpStateVarRequest *);
* ca_event -- The control action request event structure * ca_event -- The control action request event structure
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceHandleActionRequest(UpnpActionRequest *); int TvDeviceHandleActionRequest(struct Upnp_Action_Request *);
/****************************************************************************** /******************************************************************************
* TvDeviceCallbackEventHandler * TvDeviceCallbackEventHandler
@@ -325,7 +311,8 @@ int TvDeviceSetServiceTableVar(unsigned int, unsigned int, char*);
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString); int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDevicePowerOff * TvDevicePowerOff
@@ -340,7 +327,8 @@ int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out, OUT char **e
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetChannel * TvDeviceSetChannel
@@ -357,7 +345,8 @@ int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out, OUT char **e
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseChannel * TvDeviceIncreaseChannel
@@ -372,7 +361,8 @@ int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseChannel * TvDeviceDecreaseChannel
* *
@@ -386,7 +376,8 @@ int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT c
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetVolume * TvDeviceSetVolume
* *
@@ -402,7 +393,8 @@ int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out, OUT c
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseVolume * TvDeviceIncreaseVolume
@@ -417,7 +409,8 @@ int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
@@ -433,7 +426,8 @@ int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT ch
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
OUT char **errorString);
//Picture Service Actions //Picture Service Actions
@@ -453,7 +447,8 @@ int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document **out, OUT ch
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
@@ -468,7 +463,8 @@ int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out, OUT char **e
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseColor * TvDeviceDecreaseColor
@@ -482,7 +478,8 @@ int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT ch
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetTint * TvDeviceSetTint
@@ -499,7 +496,8 @@ int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out, OUT ch
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseTint * TvDeviceIncreaseTint
@@ -514,7 +512,8 @@ int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **er
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseTint * TvDeviceDecreaseTint
@@ -529,7 +528,8 @@ int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/***************************************************************************** /*****************************************************************************
* TvDeviceSetContrast * TvDeviceSetContrast
@@ -546,7 +546,8 @@ int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out, OUT char
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
****************************************************************************/ ****************************************************************************/
int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseContrast * TvDeviceIncreaseContrast
@@ -562,7 +563,8 @@ int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseContrast * TvDeviceDecreaseContrast
* *
@@ -576,7 +578,8 @@ int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceSetBrightness * TvDeviceSetBrightness
@@ -590,7 +593,8 @@ int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out, OUT
* brightness -- The brightness value to change to. * brightness -- The brightness value to change to.
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceIncreaseBrightness * TvDeviceIncreaseBrightness
@@ -605,7 +609,8 @@ int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT cha
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
/****************************************************************************** /******************************************************************************
* TvDeviceDecreaseBrightness * TvDeviceDecreaseBrightness
@@ -619,11 +624,12 @@ int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out, OU
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
* *
*****************************************************************************/ *****************************************************************************/
int TvDeviceDecreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString); int TvDeviceDecreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out,
OUT char **errorString);
int TvDeviceStart(char * ip_address, unsigned short port,char * desc_doc_name, int TvDeviceStart(char * ip_address, unsigned short port,char * desc_doc_name,
char *web_dir_path, print_string pfun); char *web_dir_path, print_string pfun);
int TvDeviceStop(void); int TvDeviceStop();
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -1,157 +0,0 @@
/*!
* \file
*
* \brief UpnpActionComplete object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "ActionComplete.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for strlen(), strdup() */
/*!
* \brief Internal implementation of the UpnpActionComplete object.
*/
struct SUpnpActionComplete
{
/*! The result of the operation */
int m_errCode;
/*! The control URL for service. */
UpnpString *m_ctrlUrl;
/*! The DOM document describing the action. */
IXML_Document *m_actionRequest;
/*! The DOM document describing the result of the action */
IXML_Document *m_actionResult;
};
UpnpActionComplete *UpnpActionComplete_new()
{
struct SUpnpActionComplete *p = calloc(1, sizeof (struct SUpnpActionComplete));
#if 0
p->m_errCode = 0;
#endif
p->m_ctrlUrl = UpnpString_new();
#if 0
p->m_actionRequest = NULL;
p->m_actionResult = NULL;
#endif
return (UpnpActionComplete *)p;
}
void UpnpActionComplete_delete(UpnpActionComplete *p)
{
struct SUpnpActionComplete *q = (struct SUpnpActionComplete *)p;
if (!q) return;
q->m_errCode = 0;
UpnpString_delete(q->m_ctrlUrl);
q->m_ctrlUrl = NULL;
UpnpActionComplete_set_ActionRequest(p, NULL);
UpnpActionComplete_set_ActionResult(p, NULL);
free(p);
}
UpnpActionComplete *UpnpActionComplete_dup(const UpnpActionComplete *p)
{
UpnpActionComplete *q = UpnpActionComplete_new();
UpnpActionComplete_assign(q, p);
return q;
}
void UpnpActionComplete_assign(UpnpActionComplete *p, const UpnpActionComplete *q)
{
if (p != q) {
UpnpActionComplete_set_ErrCode(p, UpnpActionComplete_get_ErrCode(q));
UpnpActionComplete_set_CtrlUrl(p, UpnpActionComplete_get_CtrlUrl(q));
UpnpActionComplete_set_ActionRequest(p, UpnpActionComplete_get_ActionRequest(q));
UpnpActionComplete_set_ActionResult(p, UpnpActionComplete_get_ActionResult(q));
}
}
int UpnpActionComplete_get_ErrCode(const UpnpActionComplete *p)
{
return ((struct SUpnpActionComplete *)p)->m_errCode;
}
void UpnpActionComplete_set_ErrCode(UpnpActionComplete *p, int n)
{
((struct SUpnpActionComplete *)p)->m_errCode = n;
}
const UpnpString *UpnpActionComplete_get_CtrlUrl(const UpnpActionComplete *p)
{
return ((struct SUpnpActionComplete *)p)->m_ctrlUrl;
}
const char *UpnpActionComplete_get_CtrlUrl_cstr(const UpnpActionComplete *p)
{
return UpnpString_get_String(UpnpActionComplete_get_CtrlUrl(p));
}
void UpnpActionComplete_set_CtrlUrl(UpnpActionComplete *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpActionComplete *)p)->m_ctrlUrl);
((struct SUpnpActionComplete *)p)->m_ctrlUrl = UpnpString_dup(s);
}
void UpnpActionComplete_strcpy_CtrlUrl(UpnpActionComplete *p, const char *s)
{
UpnpString_delete(((struct SUpnpActionComplete *)p)->m_ctrlUrl);
((struct SUpnpActionComplete *)p)->m_ctrlUrl = UpnpString_new();
UpnpString_set_String(((struct SUpnpActionComplete *)p)->m_ctrlUrl, s);
}
IXML_Document *UpnpActionComplete_get_ActionRequest(const UpnpActionComplete *p)
{
return ((struct SUpnpActionComplete *)p)->m_actionRequest;
}
void UpnpActionComplete_set_ActionRequest(UpnpActionComplete *p, IXML_Document *d)
{
ixmlDocument_free(((struct SUpnpActionComplete *)p)->m_actionRequest);
((struct SUpnpActionComplete *)p)->m_actionRequest = d;
}
IXML_Document *UpnpActionComplete_get_ActionResult(const UpnpActionComplete *p)
{
return ((struct SUpnpActionComplete *)p)->m_actionResult;
}
void UpnpActionComplete_set_ActionResult(UpnpActionComplete *p, IXML_Document *d)
{
ixmlDocument_free(((struct SUpnpActionComplete *)p)->m_actionResult);
((struct SUpnpActionComplete *)p)->m_actionResult = d;
}

View File

@@ -1,283 +0,0 @@
/*!
* \file
*
* \brief UpnpActionRequest object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "ActionRequest.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for memset(), strlen(), strdup() */
struct SUpnpActionRequest
{
int m_errCode;
int m_socket;
UpnpString *m_errStr;
UpnpString *m_actionName;
UpnpString *m_devUDN;
UpnpString *m_serviceID;
IXML_Document *m_actionRequest;
IXML_Document *m_actionResult;
IXML_Document *m_soapHeader;
/* Variables should be declared with struct sockaddr_storage,
* but users must only see a struct sockaddr pointer */
struct sockaddr_storage m_ctrlPtIPAddr;
};
UpnpActionRequest *UpnpActionRequest_new()
{
struct SUpnpActionRequest *p = calloc(1, sizeof (struct SUpnpActionRequest));
#if 0
p->m_errCode = 0;
p->m_socket = 0;
#endif
p->m_errStr = UpnpString_new();
p->m_actionName = UpnpString_new();
p->m_devUDN = UpnpString_new();
p->m_serviceID = UpnpString_new();
#if 0
p->m_actionRequest = NULL;
p->m_actionResult = NULL;
p->m_soapHeader = NULL;
memset(&p->m_ctrlPtIPAddr, 0, sizeof (struct sockaddr_storage));
#endif
return (UpnpActionRequest *)p;
}
void UpnpActionRequest_delete(UpnpActionRequest *p)
{
struct SUpnpActionRequest *q = (struct SUpnpActionRequest *)p;
if (!q) return;
q->m_errCode = 0;
q->m_socket = 0;
UpnpString_delete(q->m_errStr);
q->m_errStr = NULL;
UpnpString_delete(q->m_actionName);
q->m_actionName = NULL;
UpnpString_delete(q->m_devUDN);
q->m_devUDN = NULL;
UpnpString_delete(q->m_serviceID);
q->m_serviceID = NULL;
UpnpActionRequest_set_ActionRequest(p, NULL);
UpnpActionRequest_set_ActionResult(p, NULL);
UpnpActionRequest_set_SoapHeader(p, NULL);
memset(&q->m_ctrlPtIPAddr, 0, sizeof (struct sockaddr_storage));
free(p);
}
UpnpActionRequest *UpnpActionRequest_dup(const UpnpActionRequest *p)
{
UpnpActionRequest *q = UpnpActionRequest_new();
UpnpActionRequest_assign(q, p);
return q;
}
void UpnpActionRequest_assign(UpnpActionRequest *p, const UpnpActionRequest *q)
{
if (p != q) {
UpnpActionRequest_set_ErrCode(p, UpnpActionRequest_get_ErrCode(q));
UpnpActionRequest_set_Socket(p, UpnpActionRequest_get_Socket(q));
UpnpActionRequest_set_ErrStr(p, UpnpActionRequest_get_ErrStr(q));
UpnpActionRequest_set_ActionName(p, UpnpActionRequest_get_ActionName(q));
UpnpActionRequest_set_DevUDN(p, UpnpActionRequest_get_DevUDN(q));
UpnpActionRequest_set_ServiceID(p, UpnpActionRequest_get_ServiceID(q));
UpnpActionRequest_set_ActionRequest(p, UpnpActionRequest_get_ActionRequest(q));
UpnpActionRequest_set_ActionResult(p, UpnpActionRequest_get_ActionResult(q));
UpnpActionRequest_set_CtrlPtIPAddr(p, UpnpActionRequest_get_CtrlPtIPAddr(q));
UpnpActionRequest_set_SoapHeader(p, UpnpActionRequest_get_SoapHeader(q));
}
}
int UpnpActionRequest_get_ErrCode(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_errCode;
}
void UpnpActionRequest_set_ErrCode(UpnpActionRequest *p, int n)
{
((struct SUpnpActionRequest *)p)->m_errCode = n;
}
int UpnpActionRequest_get_Socket(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_socket;
}
void UpnpActionRequest_set_Socket(UpnpActionRequest *p, int n)
{
((struct SUpnpActionRequest *)p)->m_socket = n;
}
const UpnpString *UpnpActionRequest_get_ErrStr(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_errStr;
}
const char *UpnpActionRequest_get_ErrStr_cstr(const UpnpActionRequest *p)
{
return UpnpString_get_String(UpnpActionRequest_get_ErrStr(p));
}
void UpnpActionRequest_set_ErrStr(UpnpActionRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpActionRequest *)p)->m_errStr);
((struct SUpnpActionRequest *)p)->m_errStr = UpnpString_dup(s);
}
void UpnpActionRequest_strcpy_ErrStr(UpnpActionRequest *p, const char *s)
{
UpnpString_delete(((struct SUpnpActionRequest *)p)->m_errStr);
((struct SUpnpActionRequest *)p)->m_errStr = UpnpString_new();
UpnpString_set_String(((struct SUpnpActionRequest *)p)->m_errStr, s);
}
const UpnpString *UpnpActionRequest_get_ActionName(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_actionName;
}
const char *UpnpActionRequest_get_ActionName_cstr(const UpnpActionRequest *p)
{
return UpnpString_get_String(UpnpActionRequest_get_ActionName(p));
}
void UpnpActionRequest_set_ActionName(UpnpActionRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpActionRequest *)p)->m_actionName);
((struct SUpnpActionRequest *)p)->m_actionName = UpnpString_dup(s);
}
void UpnpActionRequest_strcpy_ActionName(UpnpActionRequest *p, const char *s)
{
UpnpString_delete(((struct SUpnpActionRequest *)p)->m_actionName);
((struct SUpnpActionRequest *)p)->m_actionName = UpnpString_new();
UpnpString_set_String(((struct SUpnpActionRequest *)p)->m_actionName, s);
}
const UpnpString *UpnpActionRequest_get_DevUDN(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_devUDN;
}
const char *UpnpActionRequest_get_DevUDN_cstr(const UpnpActionRequest *p)
{
return UpnpString_get_String(UpnpActionRequest_get_DevUDN(p));
}
void UpnpActionRequest_set_DevUDN(UpnpActionRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpActionRequest *)p)->m_devUDN);
((struct SUpnpActionRequest *)p)->m_devUDN = UpnpString_dup(s);
}
const UpnpString *UpnpActionRequest_get_ServiceID(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_serviceID;
}
const char *UpnpActionRequest_get_ServiceID_cstr(const UpnpActionRequest *p)
{
return UpnpString_get_String(UpnpActionRequest_get_ServiceID(p));
}
void UpnpActionRequest_set_ServiceID(UpnpActionRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpActionRequest *)p)->m_serviceID);
((struct SUpnpActionRequest *)p)->m_serviceID = UpnpString_dup(s);
}
IXML_Document *UpnpActionRequest_get_ActionRequest(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_actionRequest;
}
void UpnpActionRequest_set_ActionRequest(UpnpActionRequest *p, IXML_Document *d)
{
ixmlDocument_free(((struct SUpnpActionRequest *)p)->m_actionRequest);
((struct SUpnpActionRequest *)p)->m_actionRequest = d;
}
IXML_Document *UpnpActionRequest_get_ActionResult(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_actionResult;
}
void UpnpActionRequest_set_ActionResult(UpnpActionRequest *p, IXML_Document *d)
{
ixmlDocument_free(((struct SUpnpActionRequest *)p)->m_actionResult);
((struct SUpnpActionRequest *)p)->m_actionResult = d;
}
const struct sockaddr *UpnpActionRequest_get_CtrlPtIPAddr(const UpnpActionRequest *p)
{
return (struct sockaddr *)&((struct SUpnpActionRequest *)p)->m_ctrlPtIPAddr;
}
void UpnpActionRequest_set_CtrlPtIPAddr(UpnpActionRequest *p, const struct sockaddr *ia)
{
((struct SUpnpActionRequest *)p)->m_ctrlPtIPAddr = *(struct sockaddr_storage *)ia;
}
IXML_Document *UpnpActionRequest_get_SoapHeader(const UpnpActionRequest *p)
{
return ((struct SUpnpActionRequest *)p)->m_soapHeader;
}
void UpnpActionRequest_set_SoapHeader(UpnpActionRequest *p, IXML_Document *d)
{
ixmlDocument_free(((struct SUpnpActionRequest *)p)->m_soapHeader);
((struct SUpnpActionRequest *)p)->m_soapHeader = d;
}

View File

@@ -1,396 +0,0 @@
/*!
* \file
*
* \brief UpnpDiscovery object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "Discovery.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for memset() */
struct SUpnpDiscovery
{
int m_errCode;
int m_expires;
UpnpString *m_deviceID;
UpnpString *m_deviceType;
UpnpString *m_serviceType;
UpnpString *m_serviceVer;
UpnpString *m_location;
UpnpString *m_os;
UpnpString *m_date;
UpnpString *m_ext;
/* Variables should be declared with struct sockaddr_storage,
* but users must only see a struct sockaddr pointer */
struct sockaddr_storage m_destAddr;
};
UpnpDiscovery *UpnpDiscovery_new()
{
struct SUpnpDiscovery *p = calloc(1, sizeof (struct SUpnpDiscovery));
#if 0
p->errCode = 0;
p->m_expires = 0;
#endif
p->m_deviceID = UpnpString_new();
p->m_deviceType = UpnpString_new();
p->m_serviceType = UpnpString_new();
p->m_serviceVer = UpnpString_new();
p->m_location = UpnpString_new();
p->m_os = UpnpString_new();
p->m_date = UpnpString_new();
p->m_ext = UpnpString_new();
memset(&p->m_destAddr, 0, sizeof(struct sockaddr_storage));
return (UpnpDiscovery *)p;
}
void UpnpDiscovery_delete(UpnpDiscovery *p)
{
struct SUpnpDiscovery *q = (struct SUpnpDiscovery *)p;
if (!q) return;
q->m_errCode = 0;
q->m_expires = 0;
UpnpString_delete(q->m_deviceID);
q->m_deviceID = NULL;
UpnpString_delete(q->m_deviceType);
q->m_deviceType = NULL;
UpnpString_delete(q->m_serviceType);
q->m_serviceType = NULL;
UpnpString_delete(q->m_serviceVer);
q->m_serviceVer = NULL;
UpnpString_delete(q->m_location);
q->m_location = NULL;
UpnpString_delete(q->m_os);
q->m_os = NULL;
UpnpString_delete(q->m_date);
q->m_date = NULL;
UpnpString_delete(q->m_ext);
q->m_ext = NULL;
memset(&q->m_destAddr, 0, sizeof(struct sockaddr_storage));
free(p);
}
UpnpDiscovery *UpnpDiscovery_dup(const UpnpDiscovery *p)
{
UpnpDiscovery *q = UpnpDiscovery_new();
UpnpDiscovery_assign(q, p);
return q;
}
void UpnpDiscovery_assign(UpnpDiscovery *p, const UpnpDiscovery *q)
{
if (p != q) {
UpnpDiscovery_set_ErrCode(p, UpnpDiscovery_get_ErrCode(q));
UpnpDiscovery_set_Expires(p, UpnpDiscovery_get_Expires(q));
UpnpDiscovery_set_DeviceID(p, UpnpDiscovery_get_DeviceID(q));
UpnpDiscovery_set_DeviceType(p, UpnpDiscovery_get_DeviceType(q));
UpnpDiscovery_set_ServiceType(p, UpnpDiscovery_get_ServiceType(q));
UpnpDiscovery_set_ServiceVer(p, UpnpDiscovery_get_ServiceVer(q));
UpnpDiscovery_set_Location(p, UpnpDiscovery_get_Location(q));
UpnpDiscovery_set_Os(p, UpnpDiscovery_get_Os(q));
UpnpDiscovery_set_Date(p, UpnpDiscovery_get_Date(q));
UpnpDiscovery_set_Ext(p, UpnpDiscovery_get_Ext(q));
UpnpDiscovery_set_DestAddr(p, UpnpDiscovery_get_DestAddr(q));
}
}
int UpnpDiscovery_get_ErrCode(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_errCode;
}
void UpnpDiscovery_set_ErrCode(UpnpDiscovery *p, int n)
{
((struct SUpnpDiscovery *)p)->m_errCode = n;
}
int UpnpDiscovery_get_Expires(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_expires;
}
void UpnpDiscovery_set_Expires(UpnpDiscovery *p, int n)
{
((struct SUpnpDiscovery *)p)->m_expires = n;
}
const UpnpString *UpnpDiscovery_get_DeviceID(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_deviceID;
}
const char *UpnpDiscovery_get_DeviceID_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_DeviceID(p));
}
void UpnpDiscovery_set_DeviceID(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_deviceID);
((struct SUpnpDiscovery *)p)->m_deviceID = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_DeviceID(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_deviceID);
((struct SUpnpDiscovery *)p)->m_deviceID = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_deviceID, s);
}
const UpnpString *UpnpDiscovery_get_DeviceType(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_deviceType;
}
const char *UpnpDiscovery_get_DeviceType_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_DeviceType(p));
}
void UpnpDiscovery_set_DeviceType(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_deviceType);
((struct SUpnpDiscovery *)p)->m_deviceType = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_DeviceType(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_deviceType);
((struct SUpnpDiscovery *)p)->m_deviceType = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_deviceType, s);
}
const UpnpString *UpnpDiscovery_get_ServiceType(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_serviceType;
}
const char *UpnpDiscovery_get_ServiceType_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_ServiceType(p));
}
void UpnpDiscovery_set_ServiceType(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_serviceType);
((struct SUpnpDiscovery *)p)->m_serviceType = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_ServiceType(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_serviceType);
((struct SUpnpDiscovery *)p)->m_serviceType = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_serviceType, s);
}
const UpnpString *UpnpDiscovery_get_ServiceVer(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_serviceVer;
}
const char *UpnpDiscovery_get_ServiceVer_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_ServiceVer(p));
}
void UpnpDiscovery_set_ServiceVer(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_serviceVer);
((struct SUpnpDiscovery *)p)->m_serviceVer = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_ServiceVer(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_serviceVer);
((struct SUpnpDiscovery *)p)->m_serviceVer = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_serviceVer, s);
}
const UpnpString *UpnpDiscovery_get_Location(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_location;
}
const char *UpnpDiscovery_get_Location_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_Location(p));
}
void UpnpDiscovery_set_Location(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_location);
((struct SUpnpDiscovery *)p)->m_location = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_Location(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_location);
((struct SUpnpDiscovery *)p)->m_location = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_location, s);
}
void UpnpDiscovery_strncpy_Location(UpnpDiscovery *p, const char *s, int n)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_location);
((struct SUpnpDiscovery *)p)->m_location = UpnpString_new();
UpnpString_set_StringN(((struct SUpnpDiscovery *)p)->m_location, s, n);
}
const UpnpString *UpnpDiscovery_get_Os(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_os;
}
const char *UpnpDiscovery_get_Os_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_Os(p));
}
void UpnpDiscovery_set_Os(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_os);
((struct SUpnpDiscovery *)p)->m_os = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_Os(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_os);
((struct SUpnpDiscovery *)p)->m_os = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_os, s);
}
void UpnpDiscovery_strncpy_Os(UpnpDiscovery *p, const char *s, int n)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_os);
((struct SUpnpDiscovery *)p)->m_os = UpnpString_new();
UpnpString_set_StringN(((struct SUpnpDiscovery *)p)->m_os, s, n);
}
const UpnpString *UpnpDiscovery_get_Date(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_date;
}
const char *UpnpDiscovery_get_Date_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_Date(p));
}
void UpnpDiscovery_set_Date(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_date);
((struct SUpnpDiscovery *)p)->m_date = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_Date(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_date);
((struct SUpnpDiscovery *)p)->m_date = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_date, s);
}
const UpnpString *UpnpDiscovery_get_Ext(const UpnpDiscovery *p)
{
return ((struct SUpnpDiscovery *)p)->m_ext;
}
const char *UpnpDiscovery_get_Ext_cstr(const UpnpDiscovery *p)
{
return UpnpString_get_String(UpnpDiscovery_get_Ext(p));
}
void UpnpDiscovery_set_Ext(UpnpDiscovery *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_ext);
((struct SUpnpDiscovery *)p)->m_ext = UpnpString_dup(s);
}
void UpnpDiscovery_strcpy_Ext(UpnpDiscovery *p, const char *s)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_ext);
((struct SUpnpDiscovery *)p)->m_ext = UpnpString_new();
UpnpString_set_String(((struct SUpnpDiscovery *)p)->m_ext, s);
}
void UpnpDiscovery_strncpy_Ext(UpnpDiscovery *p, const char *s, int n)
{
UpnpString_delete(((struct SUpnpDiscovery *)p)->m_ext);
((struct SUpnpDiscovery *)p)->m_ext = UpnpString_new();
UpnpString_set_StringN(((struct SUpnpDiscovery *)p)->m_ext, s, n);
}
const struct sockaddr *UpnpDiscovery_get_DestAddr(const UpnpDiscovery *p)
{
return (struct sockaddr *)&((struct SUpnpDiscovery *)p)->m_destAddr;
}
void UpnpDiscovery_set_DestAddr(UpnpDiscovery *p, const struct sockaddr *sa)
{
((struct SUpnpDiscovery *)p)->m_destAddr = *(struct sockaddr_storage *)sa;
}

View File

@@ -1,121 +0,0 @@
/*!
* \file
*
* \brief UpnpEvent object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "Event.h"
#include <stdlib.h> /* for calloc(), free() */
struct SUpnpEvent
{
int m_eventKey;
IXML_Document *m_changedVariables;
UpnpString *m_SID;
};
UpnpEvent *UpnpEvent_new()
{
struct SUpnpEvent *p = calloc(1, sizeof (struct SUpnpEvent));
#if 0
p->m_eventKey = 0;
p->m_changedVariables = NULL;
#endif
p->m_SID = UpnpString_new();
return (UpnpEvent *)p;
}
void UpnpEvent_delete(UpnpEvent *p)
{
struct SUpnpEvent *q = (struct SUpnpEvent *)p;
if (!q) return;
q->m_eventKey = 0;
q->m_changedVariables = NULL;
UpnpString_delete(q->m_SID);
q->m_SID = NULL;
free(p);
}
UpnpEvent *UpnpEvent_dup(const UpnpEvent *p)
{
UpnpEvent *q = UpnpEvent_new();
UpnpEvent_assign(q, p);
return q;
}
void UpnpEvent_assign(UpnpEvent *p, const UpnpEvent *q)
{
if (p != q) {
UpnpEvent_set_EventKey(p, UpnpEvent_get_EventKey(q));
UpnpEvent_set_ChangedVariables(p, UpnpEvent_get_ChangedVariables(q));
UpnpEvent_set_SID(p, UpnpEvent_get_SID(q));
}
}
int UpnpEvent_get_EventKey(const UpnpEvent *p)
{
return ((struct SUpnpEvent *)p)->m_eventKey;
}
void UpnpEvent_set_EventKey(UpnpEvent *p, int n)
{
((struct SUpnpEvent *)p)->m_eventKey = n;
}
IXML_Document *UpnpEvent_get_ChangedVariables(const UpnpEvent *p)
{
return ((struct SUpnpEvent *)p)->m_changedVariables;
}
void UpnpEvent_set_ChangedVariables(UpnpEvent *p, IXML_Document *d)
{
ixmlDocument_free(((struct SUpnpEvent *)p)->m_changedVariables);
((struct SUpnpEvent *)p)->m_changedVariables = d;
}
const UpnpString *UpnpEvent_get_SID(const UpnpEvent *p)
{
return ((struct SUpnpEvent *)p)->m_SID;
}
const char *UpnpEvent_get_SID_cstr(const UpnpEvent *p)
{
return UpnpString_get_String(UpnpEvent_get_SID(p));
}
void UpnpEvent_set_SID(UpnpEvent *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpEvent *)p)->m_SID);
((struct SUpnpEvent *)p)->m_SID = UpnpString_dup(s);
}

View File

@@ -1,159 +0,0 @@
/*!
* \file
*
* \brief UpnpEventSubscribe object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "EventSubscribe.h"
#include <stdlib.h> /* for calloc(), free() */
struct SEventSubscribe
{
int m_errCode;
int m_timeOut;
UpnpString *m_SID;
UpnpString *m_publisherUrl;
};
UpnpEventSubscribe *UpnpEventSubscribe_new()
{
struct SEventSubscribe *p = calloc(1, sizeof (struct SEventSubscribe));
#if 0
p->errCode = 0;
p->timeOut = 0;
#endif
p->m_SID = UpnpString_new();
p->m_publisherUrl = UpnpString_new();
return (UpnpEventSubscribe *)p;
}
void UpnpEventSubscribe_delete(UpnpEventSubscribe *p)
{
struct SEventSubscribe *q = (struct SEventSubscribe *)p;
if (!q) return;
q->m_errCode = 0;
q->m_timeOut = 0;
UpnpString_delete(q->m_publisherUrl);
q->m_publisherUrl = NULL;
UpnpString_delete(q->m_SID);
q->m_SID = NULL;
free(p);
}
UpnpEventSubscribe *UpnpEventSubscribe_dup(const UpnpEventSubscribe *p)
{
UpnpEventSubscribe *q = UpnpEventSubscribe_new();
UpnpEventSubscribe_assign(q, p);
return q;
}
void UpnpEventSubscribe_assign(UpnpEventSubscribe *p, const UpnpEventSubscribe *q)
{
if (p != q) {
UpnpEventSubscribe_set_ErrCode(p, UpnpEventSubscribe_get_ErrCode(q));
UpnpEventSubscribe_set_TimeOut(p, UpnpEventSubscribe_get_TimeOut(q));
UpnpEventSubscribe_set_SID(p, UpnpEventSubscribe_get_SID(q));
UpnpEventSubscribe_set_PublisherUrl(p, UpnpEventSubscribe_get_PublisherUrl(q));
}
}
int UpnpEventSubscribe_get_ErrCode(const UpnpEventSubscribe *p)
{
return ((struct SEventSubscribe *)p)->m_errCode;
}
void UpnpEventSubscribe_set_ErrCode(UpnpEventSubscribe *p, int n)
{
((struct SEventSubscribe *)p)->m_errCode = n;
}
int UpnpEventSubscribe_get_TimeOut(const UpnpEventSubscribe *p)
{
return ((struct SEventSubscribe *)p)->m_timeOut;
}
void UpnpEventSubscribe_set_TimeOut(UpnpEventSubscribe *p, int n)
{
((struct SEventSubscribe *)p)->m_timeOut = n;
}
const UpnpString *UpnpEventSubscribe_get_SID(const UpnpEventSubscribe *p)
{
return ((struct SEventSubscribe *)p)->m_SID;
}
const char *UpnpEventSubscribe_get_SID_cstr(const UpnpEventSubscribe *p)
{
return UpnpString_get_String(UpnpEventSubscribe_get_SID(p));
}
void UpnpEventSubscribe_set_SID(UpnpEventSubscribe *p, const UpnpString *s)
{
UpnpString_delete(((struct SEventSubscribe *)p)->m_SID);
((struct SEventSubscribe *)p)->m_SID = UpnpString_dup(s);
}
void UpnpEventSubscribe_strcpy_SID(UpnpEventSubscribe *p, const char *s)
{
UpnpString_delete(((struct SEventSubscribe *)p)->m_SID);
((struct SEventSubscribe *)p)->m_SID = UpnpString_new();
UpnpString_set_String(((struct SEventSubscribe *)p)->m_SID, s);
}
const UpnpString *UpnpEventSubscribe_get_PublisherUrl(const UpnpEventSubscribe *p)
{
return ((struct SEventSubscribe *)p)->m_publisherUrl;
}
const char *UpnpEventSubscribe_get_PublisherUrl_cstr(const UpnpEventSubscribe *p)
{
return UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(p));
}
void UpnpEventSubscribe_set_PublisherUrl(UpnpEventSubscribe *p, const UpnpString *s)
{
UpnpString_delete(((struct SEventSubscribe *)p)->m_publisherUrl);
((struct SEventSubscribe *)p)->m_publisherUrl = UpnpString_dup(s);
}
void UpnpEventSubscribe_strcpy_PublisherUrl(UpnpEventSubscribe *p, const char *s)
{
UpnpString_delete(((struct SEventSubscribe *)p)->m_publisherUrl);
((struct SEventSubscribe *)p)->m_publisherUrl = UpnpString_new();
UpnpString_set_String(((struct SEventSubscribe *)p)->m_publisherUrl, s);
}

View File

@@ -1,179 +0,0 @@
/*!
* \file
*
* \brief UpnpFileInfo object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "FileInfo.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for strlen(), strdup() */
struct SUpnpFileInfo
{
off_t m_fileLength;
time_t m_lastModified;
int m_isDirectory;
int m_isReadable;
DOMString m_contentType;
DOMString m_extraHeaders;
};
UpnpFileInfo *UpnpFileInfo_new()
{
struct SUpnpFileInfo *p = calloc(1, sizeof (struct SUpnpFileInfo));
#if 0
p->m_fileLength = 0;
p->m_lastModified = 0;
p->m_isDirectory = 0;
p->m_isReadable = 0;
p->m_contentType = NULL;
p->m_extraHeaders = NULL;
#endif
return (UpnpFileInfo *)p;
}
void UpnpFileInfo_delete(UpnpFileInfo *p)
{
struct SUpnpFileInfo *q = (struct SUpnpFileInfo *)p;
if (!q) return;
q->m_fileLength = 0;
q->m_lastModified = 0;
q->m_isDirectory = 0;
q->m_isReadable = 0;
ixmlFreeDOMString(q->m_contentType);
q->m_contentType = NULL;
ixmlFreeDOMString(q->m_extraHeaders);
q->m_extraHeaders = NULL;
free(p);
}
UpnpFileInfo *UpnpFileInfo_dup(const UpnpFileInfo *p)
{
UpnpFileInfo *q = UpnpFileInfo_new();
UpnpFileInfo_assign(q, p);
return q;
}
void UpnpFileInfo_assign(UpnpFileInfo *p, const UpnpFileInfo *q)
{
if (p != q) {
UpnpFileInfo_set_FileLength(p, UpnpFileInfo_get_FileLength(q));
UpnpFileInfo_set_LastModified(p, UpnpFileInfo_get_LastModified(q));
UpnpFileInfo_set_IsDirectory(p, UpnpFileInfo_get_IsDirectory(q));
UpnpFileInfo_set_IsReadable(p, UpnpFileInfo_get_IsReadable(q));
UpnpFileInfo_set_ContentType(p, UpnpFileInfo_get_ContentType(q));
UpnpFileInfo_set_ExtraHeaders(p, UpnpFileInfo_get_ExtraHeaders(q));
}
}
off_t UpnpFileInfo_get_FileLength(const UpnpFileInfo *p)
{
return ((struct SUpnpFileInfo *)p)->m_fileLength;
}
void UpnpFileInfo_set_FileLength(UpnpFileInfo *p, off_t l)
{
((struct SUpnpFileInfo *)p)->m_fileLength = l;
}
const time_t *UpnpFileInfo_get_LastModified(const UpnpFileInfo *p)
{
return &((struct SUpnpFileInfo *)p)->m_lastModified;
}
void UpnpFileInfo_set_LastModified(UpnpFileInfo *p, const time_t *t)
{
((struct SUpnpFileInfo *)p)->m_lastModified = *t;
}
int UpnpFileInfo_get_IsDirectory(const UpnpFileInfo *p)
{
return ((struct SUpnpFileInfo *)p)->m_isDirectory;
}
void UpnpFileInfo_set_IsDirectory(UpnpFileInfo *p, int b)
{
((struct SUpnpFileInfo *)p)->m_isDirectory = b;
}
int UpnpFileInfo_get_IsReadable(const UpnpFileInfo *p)
{
return ((struct SUpnpFileInfo *)p)->m_isReadable;
}
void UpnpFileInfo_set_IsReadable(UpnpFileInfo *p, int b)
{
((struct SUpnpFileInfo *)p)->m_isReadable = b;
}
const DOMString UpnpFileInfo_get_ContentType(const UpnpFileInfo *p)
{
return ((struct SUpnpFileInfo *)p)->m_contentType;
}
const char *UpnpFileInfo_get_ContentType_cstr(const UpnpFileInfo *p)
{
return (const char *)UpnpFileInfo_get_ContentType(p);
}
void UpnpFileInfo_set_ContentType(UpnpFileInfo *p, const DOMString s)
{
ixmlFreeDOMString(((struct SUpnpFileInfo *)p)->m_contentType);
((struct SUpnpFileInfo *)p)->m_contentType = ixmlCloneDOMString(s);
}
const DOMString UpnpFileInfo_get_ExtraHeaders(const UpnpFileInfo *p)
{
return ((struct SUpnpFileInfo *)p)->m_extraHeaders;
}
const char *UpnpFileInfo_get_ExtraHeaders_cstr(const UpnpFileInfo *p)
{
return (const char *)UpnpFileInfo_get_ExtraHeaders(p);
}
void UpnpFileInfo_set_ExtraHeaders(UpnpFileInfo *p, const DOMString s)
{
ixmlFreeDOMString(((struct SUpnpFileInfo *)p)->m_extraHeaders);
((struct SUpnpFileInfo *)p)->m_extraHeaders = ixmlCloneDOMString(s);
}

View File

@@ -1,170 +0,0 @@
/*!
* \file
*
* \brief UpnpStateVarComplete object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "StateVarComplete.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for strlen(), strdup() */
struct SUpnpStateVarComplete
{
int m_errCode;
UpnpString *m_ctrlUrl;
UpnpString *m_stateVarName;
DOMString m_currentVal;
};
UpnpStateVarComplete *UpnpStateVarComplete_new()
{
struct SUpnpStateVarComplete *p = calloc(1, sizeof (struct SUpnpStateVarComplete));
#if 0
p->m_errCode = 0;
#endif
p->m_ctrlUrl = UpnpString_new();
p->m_stateVarName = UpnpString_new();
#if 0
p->m_currentVal = NULL;
#endif
return (UpnpStateVarComplete *)p;
}
void UpnpStateVarComplete_delete(UpnpStateVarComplete *p)
{
struct SUpnpStateVarComplete *q = (struct SUpnpStateVarComplete *)p;
if (!q) return;
q->m_errCode = 0;
UpnpString_delete(q->m_ctrlUrl);
q->m_ctrlUrl = NULL;
UpnpString_delete(q->m_stateVarName);
q->m_stateVarName = NULL;
ixmlFreeDOMString(q->m_currentVal);
q->m_currentVal = NULL;
free(p);
}
UpnpStateVarComplete *UpnpStateVarComplete_dup(const UpnpStateVarComplete *p)
{
UpnpStateVarComplete *q = UpnpStateVarComplete_new();
UpnpStateVarComplete_assign(q, p);
return q;
}
void UpnpStateVarComplete_assign(UpnpStateVarComplete *p, const UpnpStateVarComplete *q)
{
if (p != q) {
UpnpStateVarComplete_set_ErrCode(p, UpnpStateVarComplete_get_ErrCode(q));
UpnpStateVarComplete_set_CtrlUrl(p, UpnpStateVarComplete_get_CtrlUrl(q));
UpnpStateVarComplete_set_StateVarName(p, UpnpStateVarComplete_get_StateVarName(q));
UpnpStateVarComplete_set_CurrentVal(p, UpnpStateVarComplete_get_CurrentVal(q));
}
}
int UpnpStateVarComplete_get_ErrCode(const UpnpStateVarComplete *p)
{
return ((struct SUpnpStateVarComplete *)p)->m_errCode;
}
void UpnpStateVarComplete_set_ErrCode(UpnpStateVarComplete *p, int n)
{
((struct SUpnpStateVarComplete *)p)->m_errCode = n;
}
const UpnpString *UpnpStateVarComplete_get_CtrlUrl(const UpnpStateVarComplete *p)
{
return ((struct SUpnpStateVarComplete *)p)->m_ctrlUrl;
}
const char *UpnpStateVarComplete_get_CtrlUrl_cstr(const UpnpStateVarComplete *p)
{
return UpnpString_get_String(UpnpStateVarComplete_get_CtrlUrl(p));
}
void UpnpStateVarComplete_set_CtrlUrl(UpnpStateVarComplete *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpStateVarComplete *)p)->m_ctrlUrl);
((struct SUpnpStateVarComplete *)p)->m_ctrlUrl = UpnpString_dup(s);
}
void UpnpStateVarComplete_strcpy_CtrlUrl(UpnpStateVarComplete *p, const char *s)
{
UpnpString_delete(((struct SUpnpStateVarComplete *)p)->m_ctrlUrl);
((struct SUpnpStateVarComplete *)p)->m_ctrlUrl = UpnpString_new();
UpnpString_set_String(((struct SUpnpStateVarComplete *)p)->m_ctrlUrl, s);
}
const UpnpString *UpnpStateVarComplete_get_StateVarName(const UpnpStateVarComplete *p)
{
return ((struct SUpnpStateVarComplete *)p)->m_stateVarName;
}
const char *UpnpStateVarComplete_get_StateVarName_cstr(const UpnpStateVarComplete *p)
{
return UpnpString_get_String(UpnpStateVarComplete_get_StateVarName(p));
}
void UpnpStateVarComplete_set_StateVarName(UpnpStateVarComplete *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpStateVarComplete *)p)->m_stateVarName);
((struct SUpnpStateVarComplete *)p)->m_stateVarName = UpnpString_dup(s);
}
void UpnpStateVarComplete_strcpy_StateVarName(UpnpStateVarComplete *p, const char *s)
{
UpnpString_delete(((struct SUpnpStateVarComplete *)p)->m_ctrlUrl);
((struct SUpnpStateVarComplete *)p)->m_ctrlUrl = UpnpString_new();
UpnpString_set_String(((struct SUpnpStateVarComplete *)p)->m_ctrlUrl, s);
}
const DOMString UpnpStateVarComplete_get_CurrentVal(const UpnpStateVarComplete *p)
{
return ((struct SUpnpStateVarComplete *)p)->m_currentVal;
}
const char *UpnpStateVarComplete_get_CurrentVal_cstr(const UpnpStateVarComplete *p)
{
return (const char *)UpnpStateVarComplete_get_CurrentVal(p);
}
void UpnpStateVarComplete_set_CurrentVal(UpnpStateVarComplete *p, const DOMString s)
{
ixmlFreeDOMString(((struct SUpnpStateVarComplete *)p)->m_currentVal);
((struct SUpnpStateVarComplete *)p)->m_currentVal = ixmlCloneDOMString(s);
}

View File

@@ -1,254 +0,0 @@
/*!
* \file
*
* \brief UpnpStateVarRequest object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "StateVarRequest.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for memset(), strlen(), strdup() */
struct SUpnpStateVarRequest
{
int m_errCode;
int m_socket;
UpnpString *m_errStr;
UpnpString *m_devUDN;
UpnpString *m_serviceID;
UpnpString *m_stateVarName;
/* Variables should be declared with struct sockaddr_storage,
* but users must only see a struct sockaddr pointer */
struct sockaddr_storage m_ctrlPtIPAddr;
DOMString m_currentVal;
};
UpnpStateVarRequest *UpnpStateVarRequest_new()
{
struct SUpnpStateVarRequest *p = calloc(1, sizeof (struct SUpnpStateVarRequest));
#if 0
p->m_errCode = 0;
p->m_socket = 0;
#endif
p->m_errStr = UpnpString_new();
p->m_devUDN = UpnpString_new();
p->m_serviceID = UpnpString_new();
p->m_stateVarName = UpnpString_new();
#if 0
memset(&q->m_ctrlPtIPAddr, 0, sizeof (struct sockaddr_storage));
p->m_currentVal = NULL;
#endif
return (UpnpStateVarRequest *)p;
}
void UpnpStateVarRequest_delete(UpnpStateVarRequest *p)
{
struct SUpnpStateVarRequest *q = (struct SUpnpStateVarRequest *)p;
if (!q) return;
q->m_errCode = 0;
q->m_socket = 0;
UpnpString_delete(q->m_errStr);
q->m_errStr = NULL;
UpnpString_delete(q->m_devUDN);
q->m_devUDN = NULL;
UpnpString_delete(q->m_serviceID);
q->m_serviceID = NULL;
UpnpString_delete(q->m_stateVarName);
q->m_stateVarName = NULL;
memset(&q->m_ctrlPtIPAddr, 0, sizeof (struct sockaddr_storage));
ixmlFreeDOMString(q->m_currentVal);
q->m_currentVal = NULL;
free(p);
}
UpnpStateVarRequest *UpnpStateVarRequest_dup(const UpnpStateVarRequest *p)
{
UpnpStateVarRequest *q = UpnpStateVarRequest_new();
UpnpStateVarRequest_assign(q, p);
return q;
}
void UpnpStateVarRequest_assign(UpnpStateVarRequest *p, const UpnpStateVarRequest *q)
{
if (p != q) {
UpnpStateVarRequest_set_ErrCode(p, UpnpStateVarRequest_get_ErrCode(q));
UpnpStateVarRequest_set_Socket(p, UpnpStateVarRequest_get_Socket(q));
UpnpStateVarRequest_set_ErrStr(p, UpnpStateVarRequest_get_ErrStr(q));
UpnpStateVarRequest_set_StateVarName(p, UpnpStateVarRequest_get_StateVarName(q));
UpnpStateVarRequest_set_DevUDN(p, UpnpStateVarRequest_get_DevUDN(q));
UpnpStateVarRequest_set_ServiceID(p, UpnpStateVarRequest_get_ServiceID(q));
UpnpStateVarRequest_set_CtrlPtIPAddr(p, UpnpStateVarRequest_get_CtrlPtIPAddr(q));
UpnpStateVarRequest_set_CurrentVal(p, UpnpStateVarRequest_get_CurrentVal(q));
}
}
int UpnpStateVarRequest_get_ErrCode(const UpnpStateVarRequest *p)
{
return ((struct SUpnpStateVarRequest *)p)->m_errCode;
}
void UpnpStateVarRequest_set_ErrCode(UpnpStateVarRequest *p, int n)
{
((struct SUpnpStateVarRequest *)p)->m_errCode = n;
}
int UpnpStateVarRequest_get_Socket(const UpnpStateVarRequest *p)
{
return ((struct SUpnpStateVarRequest *)p)->m_socket;
}
void UpnpStateVarRequest_set_Socket(UpnpStateVarRequest *p, int n)
{
((struct SUpnpStateVarRequest *)p)->m_socket = n;
}
const UpnpString *UpnpStateVarRequest_get_ErrStr(const UpnpStateVarRequest *p)
{
return ((struct SUpnpStateVarRequest *)p)->m_errStr;
}
const char *UpnpStateVarRequest_get_ErrStr_cstr(const UpnpStateVarRequest *p)
{
return UpnpString_get_String(UpnpStateVarRequest_get_ErrStr(p));
}
void UpnpStateVarRequest_set_ErrStr(UpnpStateVarRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpStateVarRequest *)p)->m_errStr);
((struct SUpnpStateVarRequest *)p)->m_errStr = UpnpString_dup(s);
}
void UpnpStateVarRequest_strcpy_ErrStr(UpnpStateVarRequest *p, const char *s)
{
UpnpString_delete(((struct SUpnpStateVarRequest *)p)->m_errStr);
((struct SUpnpStateVarRequest *)p)->m_errStr = UpnpString_new();
UpnpString_set_String(((struct SUpnpStateVarRequest *)p)->m_errStr, s);
}
const UpnpString *UpnpStateVarRequest_get_DevUDN(const UpnpStateVarRequest *p)
{
return ((struct SUpnpStateVarRequest *)p)->m_devUDN;
}
const char *UpnpStateVarRequest_get_DevUDN_cstr(const UpnpStateVarRequest *p)
{
return UpnpString_get_String(UpnpStateVarRequest_get_DevUDN(p));
}
void UpnpStateVarRequest_set_DevUDN(UpnpStateVarRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpStateVarRequest *)p)->m_devUDN);
((struct SUpnpStateVarRequest *)p)->m_devUDN = UpnpString_dup(s);
}
const UpnpString *UpnpStateVarRequest_get_ServiceID(const UpnpStateVarRequest *p)
{
return ((struct SUpnpStateVarRequest *)p)->m_serviceID;
}
const char *UpnpStateVarRequest_get_ServiceID_cstr(const UpnpStateVarRequest *p)
{
return UpnpString_get_String(UpnpStateVarRequest_get_ServiceID(p));
}
void UpnpStateVarRequest_set_ServiceID(UpnpStateVarRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpStateVarRequest *)p)->m_serviceID);
((struct SUpnpStateVarRequest *)p)->m_serviceID = UpnpString_dup(s);
}
const UpnpString *UpnpStateVarRequest_get_StateVarName(const UpnpStateVarRequest *p)
{
return ((struct SUpnpStateVarRequest *)p)->m_stateVarName;
}
const char *UpnpStateVarRequest_get_StateVarName_cstr(const UpnpStateVarRequest *p)
{
return UpnpString_get_String(UpnpStateVarRequest_get_StateVarName(p));
}
void UpnpStateVarRequest_set_StateVarName(UpnpStateVarRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpStateVarRequest *)p)->m_stateVarName);
((struct SUpnpStateVarRequest *)p)->m_stateVarName = UpnpString_dup(s);
}
void UpnpStateVarRequest_strcpy_StateVarName(UpnpStateVarRequest *p, const char *s)
{
UpnpString_delete(((struct SUpnpStateVarRequest *)p)->m_errStr);
((struct SUpnpStateVarRequest *)p)->m_errStr = UpnpString_new();
UpnpString_set_String(((struct SUpnpStateVarRequest *)p)->m_errStr, s);
}
const struct sockaddr *UpnpStateVarRequest_get_CtrlPtIPAddr(const UpnpStateVarRequest *p)
{
return (struct sockaddr *)&((struct SUpnpStateVarRequest *)p)->m_ctrlPtIPAddr;
}
void UpnpStateVarRequest_set_CtrlPtIPAddr(UpnpStateVarRequest *p, const struct sockaddr *sa)
{
((struct SUpnpStateVarRequest *)p)->m_ctrlPtIPAddr = *(struct sockaddr_storage *)sa;
}
const DOMString UpnpStateVarRequest_get_CurrentVal(const UpnpStateVarRequest *p)
{
return ((struct SUpnpStateVarRequest *)p)->m_currentVal;
}
const char *UpnpStateVarRequest_get_CurrentVal_cstr(const UpnpStateVarRequest *p)
{
return (const char *)UpnpStateVarRequest_get_CurrentVal(p);
}
void UpnpStateVarRequest_set_CurrentVal(UpnpStateVarRequest *p, const DOMString s)
{
ixmlFreeDOMString(((struct SUpnpStateVarRequest *)p)->m_currentVal);
((struct SUpnpStateVarRequest *)p)->m_currentVal = ixmlCloneDOMString(s);
}

View File

@@ -1,157 +0,0 @@
/*!
* \file
*
* \brief UpnpSubscriptionRequest object implementation.
*
* \author Marcelo Roberto Jimenez
*/
#include "config.h"
#include "SubscriptionRequest.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for memset(), strlen(), strdup() */
struct SUpnpSubscriptionRequest
{
UpnpString *m_serviceId;
UpnpString *m_UDN;
UpnpString *m_SID;
};
UpnpSubscriptionRequest *UpnpSubscriptionRequest_new()
{
struct SUpnpSubscriptionRequest *p = calloc(1, sizeof (struct SUpnpSubscriptionRequest));
p->m_serviceId = UpnpString_new();
p->m_UDN = UpnpString_new();
p->m_SID = UpnpString_new();
return (UpnpSubscriptionRequest *)p;
}
void UpnpSubscriptionRequest_delete(UpnpSubscriptionRequest *p)
{
struct SUpnpSubscriptionRequest *q = (struct SUpnpSubscriptionRequest *)p;
if (!q) return;
UpnpString_delete(q->m_serviceId);
q->m_serviceId = NULL;
UpnpString_delete(q->m_UDN);
q->m_UDN = NULL;
UpnpString_delete(q->m_SID);
q->m_SID = NULL;
free(p);
}
UpnpSubscriptionRequest *UpnpSubscriptionRequest_dup(const UpnpSubscriptionRequest *p)
{
UpnpSubscriptionRequest *q = UpnpSubscriptionRequest_new();
UpnpSubscriptionRequest_assign(q, p);
return q;
}
void UpnpSubscriptionRequest_assign(UpnpSubscriptionRequest *p, const UpnpSubscriptionRequest *q)
{
if (p != q) {
UpnpSubscriptionRequest_set_ServiceId(p, UpnpSubscriptionRequest_get_ServiceId(q));
UpnpSubscriptionRequest_set_UDN(p, UpnpSubscriptionRequest_get_UDN(q));
UpnpSubscriptionRequest_set_SID(p, UpnpSubscriptionRequest_get_SID(q));
}
}
const UpnpString *UpnpSubscriptionRequest_get_ServiceId(const UpnpSubscriptionRequest *p)
{
return ((struct SUpnpSubscriptionRequest *)p)->m_serviceId;
}
const char *UpnpSubscriptionRequest_get_ServiceId_cstr(const UpnpSubscriptionRequest *p)
{
return UpnpString_get_String(UpnpSubscriptionRequest_get_ServiceId(p));
}
void UpnpSubscriptionRequest_set_ServiceId(UpnpSubscriptionRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpSubscriptionRequest *)p)->m_serviceId);
((struct SUpnpSubscriptionRequest *)p)->m_serviceId = UpnpString_dup(s);
}
void UpnpSubscriptionRequest_strcpy_ServiceId(UpnpSubscriptionRequest *p, const char *s)
{
UpnpString_delete(((struct SUpnpSubscriptionRequest *)p)->m_serviceId);
((struct SUpnpSubscriptionRequest *)p)->m_serviceId = UpnpString_new();
UpnpString_set_String(((struct SUpnpSubscriptionRequest *)p)->m_serviceId, s);
}
const UpnpString *UpnpSubscriptionRequest_get_UDN(const UpnpSubscriptionRequest *p)
{
return ((struct SUpnpSubscriptionRequest *)p)->m_UDN;
}
const char *UpnpSubscriptionRequest_get_UDN_cstr(const UpnpSubscriptionRequest *p)
{
return UpnpString_get_String(UpnpSubscriptionRequest_get_UDN(p));
}
void UpnpSubscriptionRequest_set_UDN(UpnpSubscriptionRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpSubscriptionRequest *)p)->m_UDN);
((struct SUpnpSubscriptionRequest *)p)->m_UDN = UpnpString_dup(s);
}
void UpnpSubscriptionRequest_strcpy_UDN(UpnpSubscriptionRequest *p, const char *s)
{
UpnpString_delete(((struct SUpnpSubscriptionRequest *)p)->m_UDN);
((struct SUpnpSubscriptionRequest *)p)->m_UDN = UpnpString_new();
UpnpString_set_String(((struct SUpnpSubscriptionRequest *)p)->m_UDN, s);
}
const UpnpString *UpnpSubscriptionRequest_get_SID(const UpnpSubscriptionRequest *p)
{
return ((struct SUpnpSubscriptionRequest *)p)->m_SID;
}
const char *UpnpSubscriptionRequest_get_SID_cstr(const UpnpSubscriptionRequest *p)
{
return UpnpString_get_String(UpnpSubscriptionRequest_get_SID(p));
}
void UpnpSubscriptionRequest_set_SID(UpnpSubscriptionRequest *p, const UpnpString *s)
{
UpnpString_delete(((struct SUpnpSubscriptionRequest *)p)->m_SID);
((struct SUpnpSubscriptionRequest *)p)->m_SID = UpnpString_dup(s);
}
void UpnpSubscriptionRequest_strcpy_SID(UpnpSubscriptionRequest *p, const char *s)
{
UpnpString_delete(((struct SUpnpSubscriptionRequest *)p)->m_SID);
((struct SUpnpSubscriptionRequest *)p)->m_SID = UpnpString_new();
UpnpString_set_String(((struct SUpnpSubscriptionRequest *)p)->m_SID, s);
}

View File

@@ -1,156 +0,0 @@
/*!
* \addtogroup UpnpString
*
* Due to its heavy use, this class is coded for efficiency, not for beauty.
* Do not use this as example to other classes. Please take a look at any
* other one.
*
* \todo Always alloc a minimum size like 64 bytes or so and when shrinking
* do not perform a new memory allocation.
*
* @{
*
* \file
*
* \brief UpnpString object implementation.
*/
#include "config.h"
#include "UpnpString.h"
#include <stdlib.h> /* for calloc(), free() */
#include <string.h> /* for strlen(), strdup() */
/*!
* \brief Internal implementation of the class UpnpString.
*
* \internal
*/
struct SUpnpString
{
/*! \brief Length of the string. */
int m_length;
/*! \brief Pointer to a dynamically allocated area that holds the NULL
* terminated string. */
char *m_string;
};
UpnpString *UpnpString_new()
{
// All bytes are zero, and so is the length of the string.
struct SUpnpString *p = calloc(1, sizeof (struct SUpnpString));
if (p == NULL) {
goto error_handler1;
}
#if 0
p->m_length = 0;
#endif
// This byte is zero, calloc does initialize it.
p->m_string = calloc(1, 1);
if (p->m_string == NULL) {
goto error_handler2;
}
return (UpnpString *)p;
//free(p->m_string);
error_handler2:
free(p);
error_handler1:
return NULL;
}
void UpnpString_delete(UpnpString *p)
{
struct SUpnpString *q = (struct SUpnpString *)p;
if (!q) return;
q->m_length = 0;
free(q->m_string);
q->m_string = NULL;
free(p);
}
UpnpString *UpnpString_dup(const UpnpString *p)
{
struct SUpnpString *q = calloc(1, sizeof (struct SUpnpString));
if (q == NULL) {
goto error_handler1;
}
q->m_length = ((struct SUpnpString *)p)->m_length;
q->m_string = strdup(((struct SUpnpString *)p)->m_string);
if (q->m_string == NULL) {
goto error_handler2;
}
return (UpnpString *)q;
//free(q->m_string);
error_handler2:
free(q);
error_handler1:
return NULL;
}
void UpnpString_assign(UpnpString *p, const UpnpString *q)
{
if (p != q) {
UpnpString_set_String(p, UpnpString_get_String(q));
}
}
int UpnpString_get_Length(const UpnpString *p)
{
return ((struct SUpnpString *)p)->m_length;
}
const char *UpnpString_get_String(const UpnpString *p)
{
return ((struct SUpnpString *)p)->m_string;
}
void UpnpString_set_String(UpnpString *p, const char *s)
{
free(((struct SUpnpString *)p)->m_string);
((struct SUpnpString *)p)->m_length = strlen(s);
((struct SUpnpString *)p)->m_string = strdup(s);
}
void UpnpString_set_StringN(UpnpString *p, const char *s, int n)
{
free(((struct SUpnpString *)p)->m_string);
((struct SUpnpString *)p)->m_length = n;
((struct SUpnpString *)p)->m_string = (char *)malloc(n+1);
strncpy(((struct SUpnpString *)p)->m_string, s, n);
((struct SUpnpString *)p)->m_string[n] = 0;
}
void UpnpString_clear(UpnpString *p)
{
((struct SUpnpString *)p)->m_length = 0;
// No need to realloc now, will do later when needed
((struct SUpnpString *)p)->m_string[0] = 0;
}
/* @} UpnpString */

File diff suppressed because it is too large Load Diff

View File

@@ -1,121 +1,177 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "config.h" #include "config.h"
#include "ithread.h"
#include "ixml.h"
#include "upnp.h"
#include "upnpdebug.h" #include "upnpdebug.h"
#include <stdarg.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include "ithread.h"
#include "upnp.h"
#include <stdarg.h>
#include <string.h> #include <string.h>
/*! Mutex to synchronize all the log file opeartions in the debug mode */ //Mutex to synchronize all the log file opeartions in the debug mode
static ithread_mutex_t GlobalDebugMutex; static ithread_mutex_t GlobalDebugMutex;
/*! Global log level */ // Global log level
static Upnp_LogLevel g_log_level = UPNP_DEFAULT_LOG_LEVEL; static Upnp_LogLevel g_log_level = UPNP_DEFAULT_LOG_LEVEL;
/*! File handle for the error log file */ //File handle for the error log file
static FILE *ErrFileHnd = NULL; static FILE *ErrFileHnd = NULL;
/*! File handle for the information log file */ //File handle for the information log file
static FILE *InfoFileHnd = NULL; static FILE *InfoFileHnd = NULL;
/*! Name of the error file */ //Name of the error file
static const char *errFileName = "IUpnpErrFile.txt"; static const char *errFileName = "IUpnpErrFile.txt";
/*! Name of the info file */ //Name of the info file
static const char *infoFileName = "IUpnpInfoFile.txt"; static const char *infoFileName = "IUpnpInfoFile.txt";
#ifdef DEBUG
/***************************************************************************
int UpnpInitLog(void) * Function : UpnpSetLogFileNames
*
* Parameters:
* IN const char* ErrFileName: name of the error file
* IN const char *InfoFileName: name of the information file
* IN int size: Size of the buffer
* IN int starLength: This parameter provides the width of the banner
*
* Description:
* This functions takes the buffer and writes the buffer in the file as
* per the requested banner
* Returns: void
***************************************************************************/
void
UpnpSetLogFileNames ( IN const char *ErrFileName,
IN const char *InfoFileName )
{ {
ithread_mutex_init(&GlobalDebugMutex, NULL); if( ErrFileName ) {
if(DEBUG_TARGET == 1) {
if((ErrFileHnd = fopen( errFileName, "a")) == NULL) {
return -1;
}
if((InfoFileHnd = fopen( infoFileName, "a")) == NULL) {
return -1;
}
}
return UPNP_E_SUCCESS;
}
void UpnpSetLogLevel(Upnp_LogLevel log_level)
{
g_log_level = log_level;
}
void UpnpCloseLog(void)
{
if (DEBUG_TARGET == 1) {
fflush(ErrFileHnd);
fflush(InfoFileHnd);
fclose(ErrFileHnd);
fclose(InfoFileHnd);
}
ithread_mutex_destroy(&GlobalDebugMutex);
}
void UpnpSetLogFileNames(
const char *ErrFileName,
const char *InfoFileName)
{
if (ErrFileName) {
errFileName = ErrFileName; errFileName = ErrFileName;
} }
if (InfoFileName) { if( InfoFileName ) {
infoFileName = InfoFileName; infoFileName = InfoFileName;
} }
} }
/***************************************************************************
* Function : UpnpInitLog
*
* Parameters: void
*
* Description:
* This functions initializes the log files
*
* Returns: int
* -1 : If fails
* UPNP_E_SUCCESS : if success
***************************************************************************/
int
UpnpInitLog()
{
ithread_mutex_init( &GlobalDebugMutex, NULL );
if( DEBUG_TARGET == 1 ) {
if( ( ErrFileHnd = fopen( errFileName, "a" ) ) == NULL )
return -1;
if( ( InfoFileHnd = fopen( infoFileName, "a" ) ) == NULL )
return -1;
}
return UPNP_E_SUCCESS;
}
/***************************************************************************
* Function : UpnpSetLogLevel
*
* Parameters: Upnp_LogLevel log_level
*
* Description:
* This functions set the log level (see {\tt Upnp_LogLevel}
* Returns: void
***************************************************************************/
void
UpnpSetLogLevel (Upnp_LogLevel log_level)
{
g_log_level = log_level;
}
/***************************************************************************
* Function : UpnpCloseLog
*
* Parameters: void
*
* Description:
* This functions closes the log files
* Returns: void
***************************************************************************/
void
UpnpCloseLog()
{
if( DEBUG_TARGET == 1 ) {
fflush( ErrFileHnd );
fflush( InfoFileHnd );
fclose( ErrFileHnd );
fclose( InfoFileHnd );
}
ithread_mutex_destroy( &GlobalDebugMutex );
}
/***************************************************************************
* Function : DebugAtThisLevel
*
* Parameters:
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
*
* Description:
* This functions returns true if debug output should be done in this
* module.
*
* Returns: int
***************************************************************************/
#ifdef DEBUG
int DebugAtThisLevel( int DebugAtThisLevel(
Upnp_LogLevel DLevel, IN Upnp_LogLevel DLevel,
Dbg_Module Module) IN Dbg_Module Module)
{ {
int ret = DLevel <= g_log_level; int ret = DLevel <= g_log_level;
ret &= ret &=
@@ -130,15 +186,38 @@ int DebugAtThisLevel(
return ret; return ret;
} }
#endif
/***************************************************************************
* Function : UpnpPrintf
*
* Parameters:
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
* IN char *DbgFileName: Name of the file from where debug statement is
* coming
* IN int DbgLineNo : Line number of the file from where debug statement
* is coming
* IN char * FmtStr, ...: Variable number of arguments that will go
* in the debug statement
*
* Description:
* This functions prints the debug statement either on the startdard
* output or log file along with the information from where this debug
* statement is coming
* Returns: void
***************************************************************************/
#ifdef DEBUG
void UpnpPrintf( void UpnpPrintf(
Upnp_LogLevel DLevel, IN Upnp_LogLevel DLevel,
Dbg_Module Module, IN Dbg_Module Module,
const char *DbgFileName, IN const char *DbgFileName,
int DbgLineNo, IN int DbgLineNo,
const char *FmtStr, IN const char *FmtStr,
...) ... )
{ {
va_list ArgList; va_list ArgList;
@@ -149,7 +228,7 @@ void UpnpPrintf(
ithread_mutex_lock(&GlobalDebugMutex); ithread_mutex_lock(&GlobalDebugMutex);
va_start(ArgList, FmtStr); va_start(ArgList, FmtStr);
if (!DEBUG_TARGET) { if (!DEBUG_TARGET) {
if (DbgFileName) { if( DbgFileName ) {
UpnpDisplayFileAndLine(stdout, DbgFileName, DbgLineNo); UpnpDisplayFileAndLine(stdout, DbgFileName, DbgLineNo);
} }
vfprintf(stdout, FmtStr, ArgList); vfprintf(stdout, FmtStr, ArgList);
@@ -170,9 +249,27 @@ void UpnpPrintf(
va_end(ArgList); va_end(ArgList);
ithread_mutex_unlock(&GlobalDebugMutex); ithread_mutex_unlock(&GlobalDebugMutex);
} }
#endif
FILE *GetDebugFile(Upnp_LogLevel DLevel, Dbg_Module Module) /***************************************************************************
* Function : UpnpGetDebugFile
*
* Parameters:
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
*
* Description:
* This function checks if the module is turned on for debug
* and returns the file descriptor corresponding to the debug level
* Returns: FILE *
* NULL : if the module is turn off for debug
* else returns the right file descriptor
***************************************************************************/
#ifdef DEBUG
FILE *GetDebugFile( Upnp_LogLevel DLevel, Dbg_Module Module )
{ {
FILE *ret; FILE *ret;
@@ -190,51 +287,65 @@ FILE *GetDebugFile(Upnp_LogLevel DLevel, Dbg_Module Module)
return ret; return ret;
} }
void UpnpDisplayFileAndLine(
FILE *fd,
const char *DbgFileName,
int DbgLineNo)
{
#define NLINES 2
#define MAX_LINE_SIZE 512
#define NUMBER_OF_STARS 80
const char *lines[NLINES];
char buf[NLINES][MAX_LINE_SIZE];
int i;
/* Initialize the pointer array */
for (i = 0; i < NLINES; i++) {
lines[i] = buf[i];
}
/* Put the debug lines in the buffer */
sprintf(buf[0], "DEBUG - THREAD ID: 0x%lX",
#ifdef WIN32
(unsigned long int)ithread_self().p
#else
(unsigned long int)ithread_self()
#endif #endif
);
if (DbgFileName) {
sprintf(buf[1],
"FILE: %s, LINE: %d",
DbgFileName,
DbgLineNo);
}
/* Show the lines centered */
UpnpDisplayBanner(fd, lines, NLINES, NUMBER_OF_STARS); /***************************************************************************
* Function : UpnpDisplayFileAndLine
*
* Parameters:
* IN FILE *fd: File descriptor where line number and file name will be
* written
* IN char *DbgFileName: Name of the file
* IN int DbgLineNo : Line number of the file
*
* Description:
* This function writes the file name and file number from where
* debug statement is coming to the log file
* Returns: void
***************************************************************************/
#ifdef DEBUG
void UpnpDisplayFileAndLine(
IN FILE * fd,
IN const char *DbgFileName,
IN int DbgLineNo)
{
int starlength = 66;
const char *lines[2];
char FileAndLine[500];
lines[0] = "DEBUG";
if (DbgFileName) {
sprintf(FileAndLine,
"FILE: %s, LINE: %d",
DbgFileName, DbgLineNo);
lines[1] = FileAndLine;
}
UpnpDisplayBanner(fd, lines, 2, starlength);
fflush(fd); fflush(fd);
} }
#endif
/***************************************************************************
* Function : UpnpDisplayBanner
*
* Parameters:
* IN FILE *fd: file descriptor where the banner will be written
* IN char **lines: The buffer that will be written
* IN int size: Size of the buffer
* IN int starLength: This parameter provides the width of the banner
*
* Description:
* This functions takes the buffer and writes the buffer in the file as
* per the requested banner
* Returns: void
***************************************************************************/
#ifdef DEBUG
void UpnpDisplayBanner( void UpnpDisplayBanner(
FILE * fd, IN FILE * fd,
const char **lines, IN const char **lines,
size_t size, IN size_t size,
int starLength) IN int starLength)
{ {
int leftMarginLength = starLength / 2 + 1; int leftMarginLength = starLength / 2 + 1;
int rightMarginLength = starLength / 2 + 1; int rightMarginLength = starLength / 2 + 1;
@@ -275,54 +386,12 @@ void UpnpDisplayBanner(
rightMargin[rightMarginLength] = 0; rightMargin[rightMarginLength] = 0;
fprintf( fd, "*%s%s%s*\n", leftMargin, line, rightMargin ); fprintf( fd, "*%s%s%s*\n", leftMargin, line, rightMargin );
} }
fprintf(fd, "%s\n\n", stars); fprintf( fd, "%s\n\n", stars );
free(currentLine); free( currentLine );
free(stars); free( stars );
free(rightMargin); free( rightMargin );
free(leftMargin); free( leftMargin );
} }
#endif
void PrintThreadPoolStats(
ThreadPool *tp,
const char *DbgFileName,
int DbgLineNo,
const char *msg)
{
ThreadPoolStats stats;
ThreadPoolGetStats(tp, &stats);
UpnpPrintf(UPNP_INFO, API, DbgFileName, DbgLineNo,
"%s\n"
"High Jobs pending: %d\n"
"Med Jobs Pending: %d\n"
"Low Jobs Pending: %d\n"
"Average wait in High Q in milliseconds: %lf\n"
"Average wait in Med Q in milliseconds: %lf\n"
"Average wait in Low Q in milliseconds: %lf\n"
"Max Threads Used: %d\n"
"Worker Threads: %d\n"
"Persistent Threads: %d\n"
"Idle Threads: %d\n"
"Total Threads: %d\n"
"Total Work Time: %lf\n"
"Total Idle Time: %lf\n",
msg,
stats.currentJobsHQ,
stats.currentJobsMQ,
stats.currentJobsLQ,
stats.avgWaitHQ,
stats.avgWaitMQ,
stats.avgWaitLQ,
stats.maxThreads,
stats.workerThreads,
stats.persistentThreads,
stats.idleThreads,
stats.totalThreads,
stats.totalWorkTime,
stats.totalIdleTime);
}
#endif /* DEBUG */

View File

@@ -1,191 +1,182 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "config.h" #include "config.h"
/*!
* \file
*/
#if EXCLUDE_DOM == 0 #if EXCLUDE_DOM == 0
#include "upnp.h"
#include "upnptools.h"
#include "uri.h"
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include "upnptools.h"
#include "uri.h"
/*! Maximum action header buffer length. */
#define HEADER_LENGTH 2000 #define HEADER_LENGTH 2000
// Structure to maintain a error code and string associated with the
/*! // error code
* \brief Structure to maintain a error code and string associated with the
* error code.
*/
struct ErrorString { struct ErrorString {
/*! Error code. */ int rc; /* error code */
int rc; const char *rcError; /* error description */
/*! Error description. */
const char *rcError;
}; };
// Initializing the array of error structures.
/*! struct ErrorString ErrorMessages[] = { {UPNP_E_SUCCESS, "UPNP_E_SUCCESS"},
* \brief Array of error structures. {UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"},
*/ {UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"},
struct ErrorString ErrorMessages[] = { {UPNP_E_OUTOF_HANDLE, "UPNP_E_OUTOF_HANDLE"},
{UPNP_E_SUCCESS, "UPNP_E_SUCCESS"}, {UPNP_E_OUTOF_CONTEXT, "UPNP_E_OUTOF_CONTEXT"},
{UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"}, {UPNP_E_OUTOF_MEMORY, "UPNP_E_OUTOF_MEMOR"},
{UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"}, {UPNP_E_INIT, "UPNP_E_INIT"},
{UPNP_E_OUTOF_HANDLE, "UPNP_E_OUTOF_HANDLE"}, {UPNP_E_BUFFER_TOO_SMALL, "UPNP_E_BUFFER_TOO_SMALL"},
{UPNP_E_OUTOF_CONTEXT, "UPNP_E_OUTOF_CONTEXT"}, {UPNP_E_INVALID_DESC, "UPNP_E_INVALID_DESC"},
{UPNP_E_OUTOF_MEMORY, "UPNP_E_OUTOF_MEMORY"}, {UPNP_E_INVALID_URL, "UPNP_E_INVALID_URL"},
{UPNP_E_INIT, "UPNP_E_INIT"}, {UPNP_E_INVALID_SID, "UPNP_E_INVALID_SID"},
{UPNP_E_BUFFER_TOO_SMALL, "UPNP_E_BUFFER_TOO_SMALL"}, {UPNP_E_INVALID_DEVICE, "UPNP_E_INVALID_DEVICE"},
{UPNP_E_INVALID_DESC, "UPNP_E_INVALID_DESC"}, {UPNP_E_INVALID_SERVICE, "UPNP_E_INVALID_SERVICE"},
{UPNP_E_INVALID_URL, "UPNP_E_INVALID_URL"}, {UPNP_E_BAD_RESPONSE, "UPNP_E_BAD_RESPONSE"},
{UPNP_E_INVALID_SID, "UPNP_E_INVALID_SID"}, {UPNP_E_BAD_REQUEST, "UPNP_E_BAD_REQUEST"},
{UPNP_E_INVALID_DEVICE, "UPNP_E_INVALID_DEVICE"}, {UPNP_E_INVALID_ACTION, "UPNP_E_INVALID_ACTION"},
{UPNP_E_INVALID_SERVICE, "UPNP_E_INVALID_SERVICE"}, {UPNP_E_FINISH, "UPNP_E_FINISH"},
{UPNP_E_BAD_RESPONSE, "UPNP_E_BAD_RESPONSE"}, {UPNP_E_INIT_FAILED, "UPNP_E_INIT_FAILED"},
{UPNP_E_BAD_REQUEST, "UPNP_E_BAD_REQUEST"}, {UPNP_E_BAD_HTTPMSG, "UPNP_E_BAD_HTTPMSG"},
{UPNP_E_INVALID_ACTION, "UPNP_E_INVALID_ACTION"}, {UPNP_E_NETWORK_ERROR, "UPNP_E_NETWORK_ERROR"},
{UPNP_E_FINISH, "UPNP_E_FINISH"}, {UPNP_E_SOCKET_WRITE, "UPNP_E_SOCKET_WRITE"},
{UPNP_E_INIT_FAILED, "UPNP_E_INIT_FAILED"}, {UPNP_E_SOCKET_READ, "UPNP_E_SOCKET_READ"},
{UPNP_E_URL_TOO_BIG, "UPNP_E_URL_TOO_BIG"}, {UPNP_E_SOCKET_BIND, "UPNP_E_SOCKET_BIND"},
{UPNP_E_BAD_HTTPMSG, "UPNP_E_BAD_HTTPMSG"}, {UPNP_E_SOCKET_CONNECT, "UPNP_E_SOCKET_CONNECT"},
{UPNP_E_ALREADY_REGISTERED, "UPNP_E_ALREADY_REGISTERED"}, {UPNP_E_OUTOF_SOCKET, "UPNP_E_OUTOF_SOCKET"},
{UPNP_E_INVALID_INTERFACE, "UPNP_E_INVALID_INTERFACE"}, {UPNP_E_LISTEN, "UPNP_E_LISTEN"},
{UPNP_E_NETWORK_ERROR, "UPNP_E_NETWORK_ERROR"}, {UPNP_E_EVENT_PROTOCOL, "UPNP_E_EVENT_PROTOCOL"},
{UPNP_E_SOCKET_WRITE, "UPNP_E_SOCKET_WRITE"}, {UPNP_E_SUBSCRIBE_UNACCEPTED, "UPNP_E_SUBSCRIBE_UNACCEPTED"},
{UPNP_E_SOCKET_READ, "UPNP_E_SOCKET_READ"}, {UPNP_E_UNSUBSCRIBE_UNACCEPTED, "UPNP_E_UNSUBSCRIBE_UNACCEPTED"},
{UPNP_E_SOCKET_BIND, "UPNP_E_SOCKET_BIND"}, {UPNP_E_NOTIFY_UNACCEPTED, "UPNP_E_NOTIFY_UNACCEPTED"},
{UPNP_E_SOCKET_CONNECT, "UPNP_E_SOCKET_CONNECT"}, {UPNP_E_INTERNAL_ERROR, "UPNP_E_INTERNAL_ERROR"},
{UPNP_E_OUTOF_SOCKET, "UPNP_E_OUTOF_SOCKET"}, {UPNP_E_INVALID_ARGUMENT, "UPNP_E_INVALID_ARGUMENT"},
{UPNP_E_LISTEN, "UPNP_E_LISTEN"}, {UPNP_E_OUTOF_BOUNDS, "UPNP_E_OUTOF_BOUNDS"}
{UPNP_E_TIMEDOUT, "UPNP_E_TIMEDOUT"},
{UPNP_E_SOCKET_ERROR, "UPNP_E_SOCKET_ERROR"},
{UPNP_E_FILE_WRITE_ERROR, "UPNP_E_FILE_WRITE_ERROR"},
{UPNP_E_CANCELED, "UPNP_E_CANCELED"},
{UPNP_E_EVENT_PROTOCOL, "UPNP_E_EVENT_PROTOCOL"},
{UPNP_E_SUBSCRIBE_UNACCEPTED, "UPNP_E_SUBSCRIBE_UNACCEPTED"},
{UPNP_E_UNSUBSCRIBE_UNACCEPTED, "UPNP_E_UNSUBSCRIBE_UNACCEPTED"},
{UPNP_E_NOTIFY_UNACCEPTED, "UPNP_E_NOTIFY_UNACCEPTED"},
{UPNP_E_INVALID_ARGUMENT, "UPNP_E_INVALID_ARGUMENT"},
{UPNP_E_FILE_NOT_FOUND, "UPNP_E_FILE_NOT_FOUND"},
{UPNP_E_FILE_READ_ERROR, "UPNP_E_FILE_READ_ERROR"},
{UPNP_E_EXT_NOT_XML, "UPNP_E_EXT_NOT_XML"},
{UPNP_E_NO_WEB_SERVER, "UPNP_E_NO_WEB_SERVER"},
{UPNP_E_OUTOF_BOUNDS, "UPNP_E_OUTOF_BOUNDS"},
{UPNP_E_NOT_FOUND, "UPNP_E_NOT_FOUND"},
{UPNP_E_INTERNAL_ERROR, "UPNP_E_INTERNAL_ERROR"},
}; };
/************************************************************************
const char *UpnpGetErrorMessage(int rc) * Function : UpnpGetErrorMessage
*
* Parameters:
* IN int rc: error code
*
* Description:
* This functions returns the error string mapped to the error code
* Returns: const char *
* return either the right string or "Unknown Error"
***************************************************************************/
const char *
UpnpGetErrorMessage( IN int rc )
{ {
int i; int i;
for (i = 0; i < sizeof (ErrorMessages) / sizeof (ErrorMessages[0]); ++i) { for( i = 0; i < sizeof( ErrorMessages ) / sizeof( ErrorMessages[0] );
if (rc == ErrorMessages[i].rc) { i++ ) {
if( rc == ErrorMessages[i].rc )
return ErrorMessages[i].rcError; return ErrorMessages[i].rcError;
}
} }
return "Unknown error code"; return "Unknown Error";
} }
/************************************************************************
/*! * Function : UpnpResolveURL
* \todo There is some unnecessary allocation and deallocation going on here *
* because of the way resolve_rel_url() was originally written and used. In the * Parameters:
* future it would be nice to clean this up. * IN char * BaseURL: Base URL string
*/ * IN char * RelURL: relative URL string
int UpnpResolveURL( * OUT char * AbsURL: Absolute URL string
const char *BaseURL, * Description:
const char *RelURL, * This functions concatinates the base URL and relative URL to generate
char *AbsURL) * the absolute URL
* Returns: int
* return either UPNP_E_SUCCESS or appropriate error
***************************************************************************/
int
UpnpResolveURL( IN const char *BaseURL,
IN const char *RelURL,
OUT char *AbsURL )
{ {
int ret = UPNP_E_SUCCESS; // There is some unnecessary allocation and
char *tempRel = NULL; // deallocation going on here because of the way
// resolve_rel_url was originally written and used
// in the future it would be nice to clean this up
if (RelURL == NULL) { char *tempRel;
ret = UPNP_E_INVALID_PARAM;
goto ExitFunction;
}
tempRel = resolve_rel_url((char *)BaseURL, (char *)RelURL); if( RelURL == NULL )
if (tempRel) { return UPNP_E_INVALID_PARAM;
strcpy(AbsURL, tempRel);
free(tempRel); tempRel = NULL;
tempRel = resolve_rel_url((char*) BaseURL, (char*) RelURL );
if( tempRel ) {
strcpy( AbsURL, tempRel );
free( tempRel );
} else { } else {
ret = UPNP_E_INVALID_URL; return UPNP_E_INVALID_URL;
} }
ExitFunction:
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
/************************************************************************
/*! * Function : addToAction
* \brief Adds the argument in the action request or response. *
* * Parameters:
* This function creates the action request or response if it is a first * IN int response: flag to tell if the ActionDoc is for response
* argument, otherwise it will add the argument in the document. * or request
* * INOUT IXML_Document **ActionDoc: request or response document
* \returns UPNP_E_SUCCESS if successful, otherwise the appropriate error. * IN char *ActionName: Name of the action request or response
*/ * IN char *ServType: Service type
static int addToAction( * IN char * ArgName: Name of the argument
/*! [in] flag to tell if the ActionDoc is for response or request. */ * IN char * ArgValue: Value of the argument
int response, *
/*! [in,out] Request or response document. */ * Description:
IXML_Document **ActionDoc, * This function adds the argument in the action request or response.
/*! [in] Name of the action request or response. */ * This function creates the action request or response if it is a first
const char *ActionName, * argument else it will add the argument in the document
/*! [in] Service type. */ *
const char *ServType, * Returns: int
/*! [in] Name of the argument. */ * returns UPNP_E_SUCCESS if successful else returns appropriate error
const char *ArgName, ***************************************************************************/
/*! [in] Value of the argument. */ static int
const char *ArgValue) addToAction( IN int response,
INOUT IXML_Document ** ActionDoc,
IN const char *ActionName,
IN const char *ServType,
IN const char *ArgName,
IN const char *ArgValue )
{ {
char *ActBuff = NULL; char *ActBuff = NULL;
IXML_Node *node = NULL; IXML_Node *node = NULL;
@@ -193,30 +184,30 @@ static int addToAction(
IXML_Node *Txt = NULL; IXML_Node *Txt = NULL;
int rc = 0; int rc = 0;
if (ActionName == NULL || ServType == NULL) { if( ActionName == NULL || ServType == NULL ) {
return UPNP_E_INVALID_PARAM; return UPNP_E_INVALID_PARAM;
} }
if (*ActionDoc == NULL) { if( *ActionDoc == NULL ) {
ActBuff = (char *)malloc(HEADER_LENGTH); ActBuff = ( char * )malloc( HEADER_LENGTH );
if (ActBuff == NULL) { if( ActBuff == NULL ) {
return UPNP_E_OUTOF_MEMORY; return UPNP_E_OUTOF_MEMORY;
} }
if (response) { if( response ) {
sprintf(ActBuff, sprintf( ActBuff,
"<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", "<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>",
ActionName, ServType, ActionName); ActionName, ServType, ActionName );
} else { } else {
sprintf(ActBuff, sprintf( ActBuff,
"<u:%s xmlns:u=\"%s\">\r\n</u:%s>", "<u:%s xmlns:u=\"%s\">\r\n</u:%s>",
ActionName, ServType, ActionName); ActionName, ServType, ActionName );
} }
rc = ixmlParseBufferEx(ActBuff, ActionDoc); rc = ixmlParseBufferEx( ActBuff, ActionDoc );
free(ActBuff); free( ActBuff );
if (rc != IXML_SUCCESS) { if( rc != IXML_SUCCESS ) {
if (rc == IXML_INSUFFICIENT_MEMORY) { if( rc == IXML_INSUFFICIENT_MEMORY ) {
return UPNP_E_OUTOF_MEMORY; return UPNP_E_OUTOF_MEMORY;
} else { } else {
return UPNP_E_INVALID_DESC; return UPNP_E_INVALID_DESC;
@@ -224,39 +215,46 @@ static int addToAction(
} }
} }
if (ArgName != NULL /*&& ArgValue != NULL */) { if( ArgName != NULL /*&& ArgValue != NULL */ ) {
node = ixmlNode_getFirstChild((IXML_Node *)*ActionDoc); node = ixmlNode_getFirstChild( ( IXML_Node * ) * ActionDoc );
Ele = ixmlDocument_createElement(*ActionDoc, ArgName); Ele = ixmlDocument_createElement( *ActionDoc, ArgName );
if(ArgValue) { if( ArgValue ) {
Txt = ixmlDocument_createTextNode(*ActionDoc, ArgValue); Txt = ixmlDocument_createTextNode( *ActionDoc, ArgValue );
ixmlNode_appendChild((IXML_Node *)Ele, Txt); ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt );
} }
ixmlNode_appendChild(node, (IXML_Node *)Ele);
ixmlNode_appendChild( node, ( IXML_Node * ) Ele );
} }
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
/************************************************************************
/*! * Function : makeAction
* \brief Creates the action request or response from the argument list. *
* * Parameters:
* \return Action request or response document if successful, otherwise * IN int response: flag to tell if the ActionDoc is for response
* returns NULL * or request
*/ * IN char * ActionName: Name of the action request or response
static IXML_Document *makeAction( * IN char * ServType: Service type
/*! [in] flag to tell if the ActionDoc is for response or request. */ * IN int NumArg :Number of arguments in the action request or response
int response, * IN char * Arg : pointer to the first argument
/*! [in] Name of the action request or response. */ * IN va_list ArgList: Argument list
const char *ActionName, *
/*! [in] Service type. */ * Description:
const char *ServType, * This function creates the action request or response from the argument
/*! [in] Number of arguments in the action request or response. */ * list.
int NumArg, * Returns: IXML_Document *
/*! [in] pointer to the first argument. */ * returns action request or response document if successful
const char *Arg, * else returns NULL
/*! [in] Argument list. */ ***************************************************************************/
va_list ArgList) static IXML_Document *
makeAction( IN int response,
IN const char *ActionName,
IN const char *ServType,
IN int NumArg,
IN const char *Arg,
IN va_list ArgList )
{ {
const char *ArgName; const char *ArgName;
const char *ArgValue; const char *ArgValue;
@@ -267,50 +265,56 @@ static IXML_Document *makeAction(
IXML_Element *Ele; IXML_Element *Ele;
IXML_Node *Txt = NULL; IXML_Node *Txt = NULL;
if (ActionName == NULL || ServType == NULL) { if( ActionName == NULL || ServType == NULL ) {
return NULL; return NULL;
} }
ActBuff = (char *)malloc(HEADER_LENGTH); ActBuff = ( char * )malloc( HEADER_LENGTH );
if (ActBuff == NULL) { if( ActBuff == NULL ) {
return NULL; return NULL;
} }
if (response) { if( response ) {
sprintf(ActBuff, sprintf( ActBuff,
"<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>", "<u:%sResponse xmlns:u=\"%s\">\r\n</u:%sResponse>",
ActionName, ServType, ActionName); ActionName, ServType, ActionName );
} else { } else {
sprintf(ActBuff, sprintf( ActBuff,
"<u:%s xmlns:u=\"%s\">\r\n</u:%s>", "<u:%s xmlns:u=\"%s\">\r\n</u:%s>",
ActionName, ServType, ActionName); ActionName, ServType, ActionName );
} }
if (ixmlParseBufferEx(ActBuff, &ActionDoc) != IXML_SUCCESS) {
free(ActBuff); if( ixmlParseBufferEx( ActBuff, &ActionDoc ) != IXML_SUCCESS ) {
free( ActBuff );
return NULL; return NULL;
} }
free(ActBuff); free( ActBuff );
if(ActionDoc == NULL) {
if( ActionDoc == NULL ) {
return NULL; return NULL;
} }
if (NumArg > 0) { if( NumArg > 0 ) {
//va_start(ArgList, Arg); //va_start(ArgList, Arg);
ArgName = Arg; ArgName = Arg;
for ( ; ; ) { for ( ; ; ) {
ArgValue = va_arg(ArgList, const char *); ArgValue = va_arg( ArgList, const char * );
if (ArgName != NULL) {
node = ixmlNode_getFirstChild((IXML_Node *)ActionDoc); if( ArgName != NULL ) {
Ele = ixmlDocument_createElement(ActionDoc, ArgName); node = ixmlNode_getFirstChild( ( IXML_Node * ) ActionDoc );
if (ArgValue) { Ele = ixmlDocument_createElement( ActionDoc, ArgName );
Txt = ixmlDocument_createTextNode(ActionDoc, ArgValue); if( ArgValue ) {
ixmlNode_appendChild((IXML_Node *)Ele, Txt); Txt =
ixmlDocument_createTextNode( ActionDoc, ArgValue );
ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt );
} }
ixmlNode_appendChild(node, (IXML_Node *)Ele);
ixmlNode_appendChild( node, ( IXML_Node * ) Ele );
} }
if (++Idx < NumArg) { if (++Idx < NumArg) {
ArgName = va_arg(ArgList, const char *); ArgName = va_arg( ArgList, const char * );
} else { } else {
break; break;
} }
@@ -321,75 +325,219 @@ static IXML_Document *makeAction(
return ActionDoc; return ActionDoc;
} }
/************************************************************************
IXML_Document *UpnpMakeAction( * Function : UpnpMakeAction
const char *ActionName, *
* Parameters:
* IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type
* IN int NumArg :Number of arguments in the action request or response
* IN char * Arg : pointer to the first argument
* IN ... : variable argument list
* IN va_list ArgList: Argument list
*
* Description:
* This function creates the action request from the argument
* list. Its a wrapper function that calls makeAction function to create
* the action request.
*
* Returns: IXML_Document *
* returns action request document if successful
* else returns NULL
***************************************************************************/
IXML_Document *
UpnpMakeAction( const char *ActionName,
const char *ServType, const char *ServType,
int NumArg, int NumArg,
const char *Arg, const char *Arg,
...) ... )
{ {
va_list ArgList; va_list ArgList;
IXML_Document *out = NULL; IXML_Document *out = NULL;
va_start(ArgList, Arg); va_start( ArgList, Arg );
out = makeAction(0, ActionName, ServType, NumArg, Arg, ArgList); out = makeAction( 0, ActionName, ServType, NumArg, Arg, ArgList );
va_end(ArgList); va_end( ArgList );
return out; return out;
} }
/************************************************************************
IXML_Document *UpnpMakeActionResponse( * Function : UpnpMakeActionResponse
const char *ActionName, *
* Parameters:
* IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type
* IN int NumArg :Number of arguments in the action request or response
* IN char * Arg : pointer to the first argument
* IN ... : variable argument list
* IN va_list ArgList: Argument list
*
* Description:
* This function creates the action response from the argument
* list. Its a wrapper function that calls makeAction function to create
* the action response.
*
* Returns: IXML_Document *
* returns action response document if successful
* else returns NULL
***************************************************************************/
IXML_Document *
UpnpMakeActionResponse( const char *ActionName,
const char *ServType, const char *ServType,
int NumArg, int NumArg,
const char *Arg, const char *Arg,
...) ... )
{ {
va_list ArgList; va_list ArgList;
IXML_Document *out = NULL; IXML_Document *out = NULL;
va_start(ArgList, Arg); va_start( ArgList, Arg );
out = makeAction(1, ActionName, ServType, NumArg, Arg, ArgList); out = makeAction( 1, ActionName, ServType, NumArg, Arg, ArgList );
va_end(ArgList); va_end( ArgList );
return out; return out;
} }
/************************************************************************
* Function : UpnpAddToActionResponse
*
* Parameters:
* INOUT IXML_Document **ActionResponse: action response document
* IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type
* IN int ArgName :Name of argument to be added in the action response
* IN char * ArgValue : value of the argument
*
* Description:
* This function adds the argument in the action response. Its a wrapper
* function that calls addToAction function to add the argument in the
* action response.
*
* Returns: int
* returns UPNP_E_SUCCESS if successful
* else returns appropriate error
***************************************************************************/
int
UpnpAddToActionResponse( INOUT IXML_Document ** ActionResponse,
IN const char *ActionName,
IN const char *ServType,
IN const char *ArgName,
IN const char *ArgValue )
{
return addToAction( 1, ActionResponse, ActionName, ServType, ArgName,
ArgValue );
}
int UpnpAddToAction( /************************************************************************
IXML_Document **ActionDoc, * Function : UpnpAddToAction
*
* Parameters:
* INOUT IXML_Document **ActionDoc: action request document
* IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type
* IN int ArgName :Name of argument to be added in the action response
* IN char * ArgValue : value of the argument
*
* Description:
* This function adds the argument in the action request. Its a wrapper
* function that calls addToAction function to add the argument in the
* action request.
*
* Returns: int
* returns UPNP_E_SUCCESS if successful
* else returns appropriate error
***************************************************************************/
int
UpnpAddToAction( IXML_Document ** ActionDoc,
const char *ActionName, const char *ActionName,
const char *ServType, const char *ServType,
const char *ArgName, const char *ArgName,
const char *ArgValue) const char *ArgValue )
{ {
return addToAction(0, ActionDoc, ActionName, ServType, ArgName, ArgValue);
return addToAction( 0, ActionDoc, ActionName, ServType, ArgName,
ArgValue );
} }
/************************************************************************
int UpnpAddToActionResponse( * Function : UpnpAddToPropertySet
IXML_Document **ActionResponse, *
const char *ActionName, * Parameters:
const char *ServType, * INOUT IXML_Document **PropSet: propertyset document
const char *ArgName, * IN char *ArgName: Name of the argument
const char *ArgValue) * IN char *ArgValue: value of the argument
*
* Description:
* This function adds the argument in the propertyset node
*
* Returns: int
* returns UPNP_E_SUCCESS if successful else returns appropriate error
***************************************************************************/
int
UpnpAddToPropertySet( INOUT IXML_Document ** PropSet,
IN const char *ArgName,
IN const char *ArgValue )
{ {
return addToAction(1, ActionResponse, ActionName, ServType, ArgName, ArgValue);
char BlankDoc[] = "<e:propertyset xmlns:e=\"urn:schemas"
"-upnp-org:event-1-0\"></e:propertyset>";
IXML_Node *node;
IXML_Element *Ele;
IXML_Element *Ele1;
IXML_Node *Txt;
int rc;
if( ArgName == NULL ) {
return UPNP_E_INVALID_PARAM;
}
if( *PropSet == NULL ) {
rc = ixmlParseBufferEx( BlankDoc, PropSet );
if( rc != IXML_SUCCESS ) {
return UPNP_E_OUTOF_MEMORY;
}
}
node = ixmlNode_getFirstChild( ( IXML_Node * ) * PropSet );
Ele1 = ixmlDocument_createElement( *PropSet, "e:property" );
Ele = ixmlDocument_createElement( *PropSet, ArgName );
if( ArgValue ) {
Txt = ixmlDocument_createTextNode( *PropSet, ArgValue );
ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt );
}
ixmlNode_appendChild( ( IXML_Node * ) Ele1, ( IXML_Node * ) Ele );
ixmlNode_appendChild( node, ( IXML_Node * ) Ele1 );
return UPNP_E_SUCCESS;
} }
/************************************************************************
IXML_Document *UpnpCreatePropertySet( * Function : UpnpCreatePropertySet
int NumArg, *
const char *Arg, * Parameters:
...) * IN int NumArg: Number of argument that will go in the propertyset node
* IN char * Args: argument strings
*
* Description:
* This function creates a propertyset node and put all the input
* parameters in the node as elements
*
* Returns: IXML_Document *
* returns the document containing propertyset node.
***************************************************************************/
IXML_Document *
UpnpCreatePropertySet( IN int NumArg,
IN const char *Arg,
... )
{ {
va_list ArgList; va_list ArgList;
int Idx = 0; int Idx = 0;
char BlankDoc[] = char BlankDoc[] = "<e:propertyset xmlns:e=\"urn:schemas-"
"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">" "upnp-org:event-1-0\"></e:propertyset>";
"</e:propertyset>";
const char *ArgName, const char *ArgName,
*ArgValue; *ArgValue;
IXML_Node *node; IXML_Node *node;
@@ -398,78 +546,40 @@ IXML_Document *UpnpCreatePropertySet(
IXML_Node *Txt; IXML_Node *Txt;
IXML_Document *PropSet; IXML_Document *PropSet;
if(ixmlParseBufferEx(BlankDoc, &PropSet) != IXML_SUCCESS) { if( ixmlParseBufferEx( BlankDoc, &PropSet ) != IXML_SUCCESS ) {
return NULL; return NULL;
} }
if (NumArg < 1) { if( NumArg < 1 ) {
return PropSet; return NULL;
} }
va_start(ArgList, Arg); va_start( ArgList, Arg );
ArgName = Arg; ArgName = Arg;
while (Idx++ != NumArg) {
ArgValue = va_arg(ArgList, const char *);
if (ArgName != NULL /*&& ArgValue != NULL */) {
node = ixmlNode_getFirstChild((IXML_Node *)PropSet);
Ele1 = ixmlDocument_createElement(PropSet, "e:property");
Ele = ixmlDocument_createElement(PropSet, ArgName);
if (ArgValue) {
Txt = ixmlDocument_createTextNode(PropSet, ArgValue);
ixmlNode_appendChild((IXML_Node *)Ele, Txt);
}
ixmlNode_appendChild((IXML_Node *)Ele1, (IXML_Node *)Ele);
ixmlNode_appendChild( node, (IXML_Node *)Ele1);
}
ArgName = va_arg(ArgList, const char *);
}
va_end(ArgList);
while( Idx++ != NumArg ) {
ArgValue = va_arg( ArgList, const char * );
if( ArgName != NULL /*&& ArgValue != NULL */ ) {
node = ixmlNode_getFirstChild( ( IXML_Node * ) PropSet );
Ele1 = ixmlDocument_createElement( PropSet, "e:property" );
Ele = ixmlDocument_createElement( PropSet, ArgName );
if( ArgValue ) {
Txt = ixmlDocument_createTextNode( PropSet, ArgValue );
ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt );
}
ixmlNode_appendChild( ( IXML_Node * ) Ele1,
( IXML_Node * ) Ele );
ixmlNode_appendChild( node, ( IXML_Node * ) Ele1 );
}
ArgName = va_arg( ArgList, const char * );
}
va_end( ArgList );
return PropSet; return PropSet;
} }
#endif // EXCLUDE_DOM == 0
int UpnpAddToPropertySet(
IXML_Document **PropSet,
const char *ArgName,
const char *ArgValue)
{
char BlankDoc[] =
"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">"
"</e:propertyset>";
IXML_Node *node;
IXML_Element *Ele;
IXML_Element *Ele1;
IXML_Node *Txt;
int rc;
if (ArgName == NULL) {
return UPNP_E_INVALID_PARAM;
}
if (*PropSet == NULL) {
rc = ixmlParseBufferEx(BlankDoc, PropSet);
if (rc != IXML_SUCCESS) {
return UPNP_E_OUTOF_MEMORY;
}
}
node = ixmlNode_getFirstChild((IXML_Node *)*PropSet);
Ele1 = ixmlDocument_createElement(*PropSet, "e:property");
Ele = ixmlDocument_createElement(*PropSet, ArgName);
if (ArgValue) {
Txt = ixmlDocument_createTextNode(*PropSet, ArgValue);
ixmlNode_appendChild((IXML_Node *)Ele, Txt);
}
ixmlNode_appendChild((IXML_Node *)Ele1, (IXML_Node *)Ele);
ixmlNode_appendChild(node, (IXML_Node *)Ele1);
return UPNP_E_SUCCESS;
}
#endif /* EXCLUDE_DOM == 0 */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,200 +0,0 @@
/************************************************************************
* Purpose: This file defines the functions for clients. It defines
* functions for adding and removing clients to and from the client table,
* adding and accessing subscription and other attributes pertaining to the
* client
************************************************************************/
#include "config.h"
#include "ClientSubscription.h"
#ifdef INCLUDE_CLIENT_APIS
#include <stdlib.h> // for calloc(), free()
struct SClientSubscription {
int m_renewEventId;
UpnpString *m_SID;
UpnpString *m_actualSID;
UpnpString *m_eventURL;
struct SClientSubscription *m_next;
};
ClientSubscription *GenlibClientSubscription_new()
{
struct SClientSubscription *p = calloc(1, sizeof (struct SClientSubscription));
#if 0
p->renewEventId = 0;
#endif
p->m_SID = UpnpString_new();
p->m_actualSID = UpnpString_new();
p->m_eventURL = UpnpString_new();
p->m_next = NULL;
return (ClientSubscription *)p;
}
void GenlibClientSubscription_delete(ClientSubscription *p)
{
struct SClientSubscription *q = (struct SClientSubscription *)p;
if (!q) return;
q->m_renewEventId = 0;
UpnpString_delete(q->m_SID);
q->m_SID = NULL;
UpnpString_delete(q->m_actualSID);
q->m_actualSID = NULL;
UpnpString_delete(q->m_eventURL);
q->m_eventURL = NULL;
q->m_next = NULL;
free(p);
}
ClientSubscription *GenlibClientSubscription_dup(const ClientSubscription *p)
{
ClientSubscription *q = GenlibClientSubscription_new();
GenlibClientSubscription_assign(q, p);
return q;
}
void GenlibClientSubscription_assign(ClientSubscription *q, const ClientSubscription *p)
{
if (q != p) {
/*struct SClientSubscription *_p = (struct SClientSubscription *)p;*/
struct SClientSubscription *_q = (struct SClientSubscription *)q;
// Do not copy RenewEventId
_q->m_renewEventId = -1;
GenlibClientSubscription_set_SID(q, GenlibClientSubscription_get_SID(p));
GenlibClientSubscription_set_ActualSID(q, GenlibClientSubscription_get_ActualSID(p));
GenlibClientSubscription_set_EventURL(q, GenlibClientSubscription_get_EventURL(p));
// Do not copy m_next
_q->m_next = NULL;
}
}
int GenlibClientSubscription_get_RenewEventId(const ClientSubscription *p)
{
return ((struct SClientSubscription *)p)->m_renewEventId;
}
void GenlibClientSubscription_set_RenewEventId(ClientSubscription *p, int n)
{
((struct SClientSubscription *)p)->m_renewEventId = n;
}
const UpnpString *GenlibClientSubscription_get_SID(const ClientSubscription *p)
{
return ((struct SClientSubscription *)p)->m_SID;
}
const char *GenlibClientSubscription_get_SID_cstr(const ClientSubscription *p)
{
return UpnpString_get_String(GenlibClientSubscription_get_SID(p));
}
void GenlibClientSubscription_set_SID(ClientSubscription *p, const UpnpString *s)
{
UpnpString_delete(((struct SClientSubscription *)p)->m_SID);
((struct SClientSubscription *)p)->m_SID = UpnpString_dup(s);
}
void GenlibClientSubscription_strcpy_SID(ClientSubscription *p, const char *s)
{
UpnpString_delete(((struct SClientSubscription *)p)->m_SID);
((struct SClientSubscription *)p)->m_SID = UpnpString_new();
UpnpString_set_String(((struct SClientSubscription *)p)->m_SID, s);
}
const UpnpString *GenlibClientSubscription_get_ActualSID(const ClientSubscription *p)
{
return ((struct SClientSubscription *)p)->m_actualSID;
}
const char *GenlibClientSubscription_get_ActualSID_cstr(const ClientSubscription *p)
{
return UpnpString_get_String(GenlibClientSubscription_get_ActualSID(p));
}
void GenlibClientSubscription_set_ActualSID(ClientSubscription *p, const UpnpString *s)
{
UpnpString_delete(((struct SClientSubscription *)p)->m_actualSID);
((struct SClientSubscription *)p)->m_actualSID = UpnpString_dup(s);
}
void GenlibClientSubscription_strcpy_ActualSID(ClientSubscription *p, const char *s)
{
UpnpString_delete(((struct SClientSubscription *)p)->m_actualSID);
((struct SClientSubscription *)p)->m_actualSID = UpnpString_new();
UpnpString_set_String(((struct SClientSubscription *)p)->m_actualSID, s);
}
const UpnpString *GenlibClientSubscription_get_EventURL(const ClientSubscription *p)
{
return ((struct SClientSubscription *)p)->m_eventURL;
}
const char *GenlibClientSubscription_get_EventURL_cstr(const ClientSubscription *p)
{
return UpnpString_get_String(GenlibClientSubscription_get_EventURL(p));
}
void GenlibClientSubscription_set_EventURL(ClientSubscription *p, const UpnpString *s)
{
UpnpString_delete(((struct SClientSubscription *)p)->m_eventURL);
((struct SClientSubscription *)p)->m_eventURL = UpnpString_dup(s);
}
void GenlibClientSubscription_strcpy_EventURL(ClientSubscription *p, const char *s)
{
UpnpString_delete(((struct SClientSubscription *)p)->m_eventURL);
((struct SClientSubscription *)p)->m_eventURL = UpnpString_new();
UpnpString_set_String(((struct SClientSubscription *)p)->m_eventURL, s);
}
ClientSubscription *GenlibClientSubscription_get_Next(const ClientSubscription *p)
{
return (ClientSubscription *)(((struct SClientSubscription *)p)->m_next);
}
void GenlibClientSubscription_set_Next(ClientSubscription *p, ClientSubscription *q)
{
((struct SClientSubscription *)p)->m_next = (struct SClientSubscription *)q;
}
#endif /* INCLUDE_CLIENT_APIS */

View File

@@ -1,119 +1,209 @@
///////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2003 Intel Corporation
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither name of Intel Corporation nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////
/************************************************************************ /************************************************************************
* Purpose: This file defines the functions for clients. It defines * Purpose: This file defines the functions for clients. It defines
* functions for adding and removing clients to and from the client table, * functions for adding and removing clients to and from the client table,
* adding and accessing subscription and other attributes pertaining to the * adding and accessing subscription and other attributes pertaining to the
* client * client
************************************************************************/ ************************************************************************/
#include "config.h" #include "config.h"
#include "client_table.h" #include "client_table.h"
/************************************************************************
* Function : copy_client_subscription
*
* Parameters :
* client_subscription * in ; - source client subscription
* client_subscription * out ; - destination client subscription
*
* Description : Make a copy of the client subscription data
*
* Return : int ;
* UPNP_E_OUTOF_MEMORY - On Failure to allocate memory
* HTTP_SUCCESS - On Success
*
* Note :
************************************************************************/
CLIENTONLY( int copy_client_subscription( client_subscription * in,
client_subscription * out ) {
int len = strlen( in->ActualSID ) + 1;
int len1 = strlen( in->EventURL ) + 1;
memcpy( out->sid, in->sid, SID_SIZE );
out->sid[SID_SIZE] = 0;
out->ActualSID = ( char * )malloc( len );
if( out->ActualSID == NULL )
return UPNP_E_OUTOF_MEMORY;
out->EventURL = ( char * )malloc( len1 );
if( out->EventURL == NULL ) {
free(out->ActualSID);
return UPNP_E_OUTOF_MEMORY;
}
memcpy( out->ActualSID, in->ActualSID, len );
memcpy( out->EventURL, in->EventURL, len1 );
//copies do not get RenewEvent Ids or next
out->RenewEventId = -1; out->next = NULL; return HTTP_SUCCESS;}
#ifdef INCLUDE_CLIENT_APIS /************************************************************************
* Function : free_client_subscription
*
* Parameters :
* client_subscription * sub ; - Client subscription to be freed
*
* Description : Free memory allocated for client subscription data.
* Remove timer thread associated with this subscription event.
*
* Return : void ;
*
* Note :
************************************************************************/
void free_client_subscription( client_subscription * sub ) {
upnp_timeout * event; ThreadPoolJob tempJob; if( sub ) {
if( sub->ActualSID )
free( sub->ActualSID ); if( sub->EventURL )
free( sub->EventURL ); if( sub->RenewEventId != -1 ) //do not remove timer event of copy
//invalid timer event id
{
if( TimerThreadRemove
( &gTimerThread, sub->RenewEventId, &tempJob ) == 0 ) {
event = ( upnp_timeout * ) tempJob.arg;
free_upnp_timeout( event );}
}
sub->RenewEventId = -1;}
}
#include <stdlib.h> // for calloc(), free() /************************************************************************
* Function : freeClientSubList
*
* Parameters :
* client_subscription * list ; Client subscription
*
* Description : Free the client subscription table.
*
* Return : void ;
*
* Note :
************************************************************************/
void freeClientSubList( client_subscription * list ) {
client_subscription * next; while( list ) {
free_client_subscription( list );
next = list->next; free( list ); list = next;}
}
/************************************************************************
void free_client_subscription(ClientSubscription *sub) * Function : RemoveClientSubClientSID
{ *
upnp_timeout *event; * Parameters :
ThreadPoolJob tempJob; * client_subscription **head ; Head of the subscription list
if (sub) { * const Upnp_SID sid ; Subscription ID to be mactched
int renewEventId = GenlibClientSubscription_get_RenewEventId(sub); *
GenlibClientSubscription_strcpy_ActualSID(sub, ""); * Description : Remove the client subscription matching the
GenlibClientSubscription_strcpy_EventURL(sub, ""); * subscritpion id represented by the const Upnp_SID sid parameter
if (renewEventId != -1) { * from the table and update the table.
// do not remove timer event of copy *
// invalid timer event id * Return : void ;
if (TimerThreadRemove(&gTimerThread, renewEventId, &tempJob) == 0) { *
event = (upnp_timeout *)tempJob.arg; * Note :
free_upnp_timeout(event); ************************************************************************/
void RemoveClientSubClientSID( client_subscription ** head,
const Upnp_SID sid ) {
client_subscription * finger = ( *head );
client_subscription * previous = NULL; while( finger ) {
if( !( strcmp( sid, finger->sid ) ) ) {
if( previous )
previous->next = finger->next;
else
( *head ) = finger->next;
finger->next = NULL;
freeClientSubList( finger ); finger = NULL;}
else
{
previous = finger; finger = finger->next;}
} }
} }
GenlibClientSubscription_set_RenewEventId(sub, -1);
}
}
/************************************************************************
void freeClientSubList(ClientSubscription *list) * Function : GetClientSubClientSID
{ *
ClientSubscription *next; * Parameters :
while (list) { * client_subscription *head ; Head of the subscription list
free_client_subscription(list); * const Upnp_SID sid ; Subscription ID to be matched
next = GenlibClientSubscription_get_Next(list); *
GenlibClientSubscription_delete(list); * Description : Return the client subscription from the client table
list = next; * that matches const Upnp_SID sid subscrition id value.
} *
} * Return : client_subscription * ; The matching subscription
*
* Note :
void RemoveClientSubClientSID(ClientSubscription **head, const UpnpString *sid) ************************************************************************/
{ client_subscription *
ClientSubscription *finger = *head; GetClientSubClientSID( client_subscription * head,
ClientSubscription *previous = NULL; const Upnp_SID sid ) {
int found = 0; client_subscription * next = head; while( next ) {
while (finger) { if( !strcmp( next->sid, sid ) )
found = !strcmp(
UpnpString_get_String(sid),
GenlibClientSubscription_get_SID_cstr(finger));
if (found) {
if (previous) {
GenlibClientSubscription_set_Next(previous,
GenlibClientSubscription_get_Next(finger));
} else {
*head = GenlibClientSubscription_get_Next(finger);
}
GenlibClientSubscription_set_Next(finger, NULL);
freeClientSubList(finger);
finger = NULL;
} else {
previous = finger;
finger = GenlibClientSubscription_get_Next(finger);
}
}
}
ClientSubscription *GetClientSubClientSID(ClientSubscription *head, const UpnpString *sid)
{
ClientSubscription *next = head;
int found = 0;
while (next) {
found = !strcmp(
GenlibClientSubscription_get_SID_cstr(next),
UpnpString_get_String(sid));
if(found) {
break; break;
} else { else
next = GenlibClientSubscription_get_Next(next); {
} next = next->next;}
} }
return next;}
return next; /************************************************************************
} * Function : GetClientSubActualSID
*
* Parameters :
* client_subscription *head ; Head of the subscription list
* token * sid ; Subscription ID to be matched
*
* Description : Returns the client subscription from the client
* subscription table that has the matching token * sid buffer
* value.
*
* Return : client_subscription * ; The matching subscription
*
* Note :
************************************************************************/
client_subscription *
GetClientSubActualSID( client_subscription * head,
token * sid ) {
client_subscription * next = head; while( next ) {
if( !memcmp( next->ActualSID, sid->buff, sid->size ) )
ClientSubscription *GetClientSubActualSID(ClientSubscription *head, token *sid)
{
ClientSubscription *next = head;
while (next) {
if (!memcmp(
GenlibClientSubscription_get_ActualSID_cstr(next),
sid->buff, sid->size)) {
break; break;
} else { else
next = GenlibClientSubscription_get_Next(next); {
} next = next->next;}
} }
return next;}
return next; )
}
#endif /* INCLUDE_CLIENT_APIS */

File diff suppressed because it is too large Load Diff

View File

@@ -1,65 +1,52 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/*
* \file
*
* \brief Contains functions for scanner and parser for http messages.
*/
/************************************************************************
* Purpose: This file contains functions for scanner and parser for http
* messages.
************************************************************************/
#define _GNU_SOURCE // For strcasestr() in string.h #define _GNU_SOURCE // For strcasestr() in string.h
#include "config.h" #include "config.h"
#include <assert.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <stdarg.h>
#include "strintmap.h" #include "strintmap.h"
#include "httpparser.h" #include "httpparser.h"
#include "statcodes.h" #include "statcodes.h"
#include "unixutil.h" #include "unixutil.h"
#include "upnpdebug.h"
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
/* entity positions */
// entity positions
#define NUM_HTTP_METHODS 9 #define NUM_HTTP_METHODS 9
static str_int_entry Http_Method_Table[NUM_HTTP_METHODS] = { static str_int_entry Http_Method_Table[NUM_HTTP_METHODS] = {
@@ -135,8 +122,8 @@ str_int_entry Http_Header_Names[NUM_HTTP_HEADER_NAMES] = {
* Note : * Note :
************************************************************************/ ************************************************************************/
static UPNP_INLINE void static UPNP_INLINE void
scanner_init( OUT scanner_t *scanner, scanner_init( OUT scanner_t * scanner,
IN membuffer *bufptr ) IN membuffer * bufptr )
{ {
scanner->cursor = 0; scanner->cursor = 0;
scanner->msg = bufptr; scanner->msg = bufptr;
@@ -408,13 +395,8 @@ scanner_get_str( IN scanner_t * scanner )
* *
* Note : * Note :
************************************************************************/ ************************************************************************/
#ifdef WIN32 #warning The only use of the function 'scanner_pushback()' in the code is commented out.
#pragma message ("The only use of the function 'scanner_pushback()' in the code is commented out.") #warning 'scanner_pushback()' is a candidate for removal.
#pragma message ("'scanner_pushback()' is a candidate for removal.")
#else
#warning The only use of the function 'scanner_pushback()' in the code is commented out.
#warning 'scanner_pushback()' is a candidate for removal.
#endif
static UPNP_INLINE void static UPNP_INLINE void
scanner_pushback( INOUT scanner_t * scanner, scanner_pushback( INOUT scanner_t * scanner,
IN size_t pushback_bytes ) IN size_t pushback_bytes )
@@ -983,13 +965,8 @@ read_until_crlf( INOUT scanner_t * scanner,
* PARSE_FAILURE * PARSE_FAILURE
* PARSE_INCOMPLETE * PARSE_INCOMPLETE
************************************************************************/ ************************************************************************/
#ifdef WIN32 #warning There are currently no uses of the function 'skip_to_end_of_header()' in the code.
#pragma message("There are currently no uses of the function 'skip_to_end_of_header()' in the code.") #warning 'skip_to_end_of_header()' is a candidate for removal.
#pragma message("'skip_to_end_of_header()' is a candidate for removal.")
#else
#warning There are currently no uses of the function 'skip_to_end_of_header()' in the code.
#warning 'skip_to_end_of_header()' is a candidate for removal.
#endif
static UPNP_INLINE int static UPNP_INLINE int
skip_to_end_of_header( INOUT scanner_t * scanner ) skip_to_end_of_header( INOUT scanner_t * scanner )
{ {
@@ -1545,9 +1522,7 @@ parser_parse_responseline( INOUT http_parser_t * parser )
if( num_scanned != 3 || if( num_scanned != 3 ||
hmsg->major_version < 0 || hmsg->major_version < 0 ||
/* HTTP version equals to 1.0 should fail as required by the hmsg->minor_version < 0 || hmsg->status_code < 0 ) {
* UPnP certification tool */
hmsg->minor_version < 1 || hmsg->status_code < 0 ) {
// bad response line // bad response line
return PARSE_FAILURE; return PARSE_FAILURE;
} }
@@ -2511,15 +2486,26 @@ method_to_str( IN http_method_t method )
return index == -1 ? NULL : Http_Method_Table[index].name; return index == -1 ? NULL : Http_Method_Table[index].name;
} }
/************************************************************************
* Function: print_http_headers
*
* Parameters:
* http_message_t* hmsg ; HTTP Message object
*
* Description:
*
* Returns:
* void
************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void print_http_headers(http_message_t *hmsg) void
print_http_headers( http_message_t * hmsg )
{ {
ListNode *node; ListNode *node;
/* NNS: dlist_node *node; */ // NNS: dlist_node *node;
http_header_t *header; http_header_t *header;
/* print start line */ // print start line
if( hmsg->is_request ) { if( hmsg->is_request ) {
printf( "method = %d, version = %d.%d, url = %.*s\n", printf( "method = %d, version = %d.%d, url = %.*s\n",
hmsg->method, hmsg->major_version, hmsg->minor_version, hmsg->method, hmsg->major_version, hmsg->minor_version,
@@ -2530,18 +2516,18 @@ void print_http_headers(http_message_t *hmsg)
(int)hmsg->status_msg.length, hmsg->status_msg.buf); (int)hmsg->status_msg.length, hmsg->status_msg.buf);
} }
/* print headers */ // print headers
node = ListHead( &hmsg->headers ); node = ListHead( &hmsg->headers );
/* NNS: node = dlist_first_node( &hmsg->headers ); */ // NNS: node = dlist_first_node( &hmsg->headers );
while( node != NULL ) { while( node != NULL ) {
header = ( http_header_t * ) node->item; header = ( http_header_t * ) node->item;
/* NNS: header = (http_header_t *)node->data; */ // NNS: header = (http_header_t *)node->data;
printf( "hdr name: %.*s, value: %.*s\n", printf( "hdr name: %.*s, value: %.*s\n",
(int)header->name.length, header->name.buf, (int)header->name.length, header->name.buf,
(int)header->value.length, header->value.buf ); (int)header->value.length, header->value.buf );
node = ListNext( &hmsg->headers, node ); node = ListNext( &hmsg->headers, node );
/* NNS: node = dlist_next( &hmsg->headers, node ); */ // NNS: node = dlist_next( &hmsg->headers, node );
} }
} }
#endif #endif

View File

@@ -1,34 +1,33 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/************************************************************************ /************************************************************************
* Purpose: This file defines the functionality making use of the http * Purpose: This file defines the functionality making use of the http
@@ -36,28 +35,10 @@
* messages * messages
************************************************************************/ ************************************************************************/
#include "config.h" #include "config.h"
#include "httpreadwrite.h"
#include "unixutil.h"
#include "upnp.h"
#include "upnpapi.h"
#include "membuffer.h"
#include "uri.h"
#include "statcodes.h"
#include "sock.h"
#include "UpnpInet.h"
#include "webserver.h"
#include <assert.h> #include <assert.h>
#include <stdarg.h> #include <stdarg.h>
#ifndef UPNP_USE_BCBPP #ifndef UPNP_USE_BCBPP
#ifndef UPNP_USE_MSVCPP #ifndef UPNP_USE_MSVCPP
#include <inttypes.h> #include <inttypes.h>
@@ -65,31 +46,33 @@
#endif #endif
#endif #endif
#ifndef WIN32
#ifdef WIN32
#include <malloc.h>
#else
#include <arpa/inet.h> #include <arpa/inet.h>
#include <fcntl.h> #include <fcntl.h>
#include <netinet/in.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#else
#include <winsock2.h>
#include <malloc.h>
#endif #endif
#include "unixutil.h"
#include "upnp.h"
#include "upnpapi.h"
#include "membuffer.h"
#include "uri.h"
#include "statcodes.h"
#include "httpreadwrite.h"
#include "sock.h"
#include "webserver.h"
/*
* Please, do not change these to const int while MSVC cannot understand
* const int in array dimensions.
*/
/*
const int CHUNK_HEADER_SIZE = 10; const int CHUNK_HEADER_SIZE = 10;
const int CHUNK_TAIL_SIZE = 10; const int CHUNK_TAIL_SIZE = 10;
*/
#define CHUNK_HEADER_SIZE 10
#define CHUNK_TAIL_SIZE 10
/************************************************************************ /************************************************************************
@@ -135,9 +118,9 @@ http_FixUrl( IN uri_type * url,
* Function: http_FixStrUrl * Function: http_FixStrUrl
* *
* Parameters: * Parameters:
* IN const char* urlstr; Character string as a URL * IN char* urlstr ; Character string as a URL
* IN int urlstrlen; Length of the character string * IN int urlstrlen ; Length of the character string
* OUT uri_type* fixed_url; Fixed and corrected URL * OUT uri_type* fixed_url ; Fixed and corrected URL
* *
* Description: * Description:
* Parses URL and then validates URL * Parses URL and then validates URL
@@ -147,7 +130,7 @@ http_FixUrl( IN uri_type * url,
* UPNP_E_SUCCESS * UPNP_E_SUCCESS
************************************************************************/ ************************************************************************/
int int
http_FixStrUrl( IN const char *urlstr, http_FixStrUrl( IN char *urlstr,
IN int urlstrlen, IN int urlstrlen,
OUT uri_type * fixed_url ) OUT uri_type * fixed_url )
{ {
@@ -184,13 +167,13 @@ http_Connect( IN uri_type * destination_url,
http_FixUrl( destination_url, url ); http_FixUrl( destination_url, url );
connfd = socket( url->hostport.IPaddress.ss_family, SOCK_STREAM, 0 ); connfd = socket( AF_INET, SOCK_STREAM, 0 );
if( connfd == -1 ) { if( connfd == -1 ) {
return UPNP_E_OUTOF_SOCKET; return UPNP_E_OUTOF_SOCKET;
} }
if( connect( connfd, ( struct sockaddr * )&url->hostport.IPaddress, if( connect( connfd, ( struct sockaddr * )&url->hostport.IPv4address,
sizeof( url->hostport.IPaddress ) ) == -1 ) { sizeof( struct sockaddr_in ) ) == -1 ) {
#ifdef WIN32 #ifdef WIN32
UpnpPrintf(UPNP_CRITICAL, HTTP, __FILE__, __LINE__, UpnpPrintf(UPNP_CRITICAL, HTTP, __FILE__, __LINE__,
"connect error: %d\n", WSAGetLastError()); "connect error: %d\n", WSAGetLastError());
@@ -204,12 +187,8 @@ http_Connect( IN uri_type * destination_url,
} }
/*! /************************************************************************
* \brief Get the data on the socket and take actions based on the read data to * Function: http_RecvMessage
* modify the parser objects buffer.
*
* If an error is reported while parsing the data, the error code is passed in
* the http_errr_code parameter.
* *
* Parameters: * Parameters:
* IN SOCKINFO *info; Socket information object * IN SOCKINFO *info; Socket information object
@@ -218,96 +197,81 @@ http_Connect( IN uri_type * destination_url,
* IN OUT int* timeout_secs; time out * IN OUT int* timeout_secs; time out
* OUT int* http_error_code; HTTP error code returned * OUT int* http_error_code; HTTP error code returned
* *
* \return * Description:
* UPNP_E_SUCCESS * Get the data on the socket and take actions based on the read data
* to modify the parser objects buffer. If an error is reported while
* parsing the data, the error code is passed in the http_errr_code
* parameter
*
* Returns:
* UPNP_E_BAD_HTTPMSG * UPNP_E_BAD_HTTPMSG
*/ * UPNP_E_SUCCESS
int http_RecvMessage( ************************************************************************/
IN SOCKINFO *info, int
OUT http_parser_t *parser, http_RecvMessage( IN SOCKINFO * info,
OUT http_parser_t * parser,
IN http_method_t request_method, IN http_method_t request_method,
IN OUT int *timeout_secs, IN OUT int *timeout_secs,
OUT int *http_error_code) OUT int *http_error_code )
{ {
int ret = UPNP_E_SUCCESS;
int line = 0;
parse_status_t status; parse_status_t status;
int num_read; int num_read;
xboolean ok_on_close = FALSE; xboolean ok_on_close = FALSE;
char buf[2 * 1024]; char buf[2 * 1024];
if (request_method == HTTPMETHOD_UNKNOWN) { if( request_method == HTTPMETHOD_UNKNOWN ) {
parser_request_init(parser); parser_request_init( parser );
} else { } else {
parser_response_init(parser, request_method); parser_response_init( parser, request_method );
} }
while (TRUE) { while( TRUE ) {
num_read = sock_read(info, buf, sizeof buf, timeout_secs); num_read = sock_read( info, buf, sizeof( buf ), timeout_secs );
if (num_read > 0) { if( num_read > 0 ) {
// got data // got data
status = parser_append(parser, buf, num_read); status = parser_append( parser, buf, num_read );
if (status == PARSE_SUCCESS) {
if( status == PARSE_SUCCESS ) {
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
"<<< (RECVD) <<<\n%s\n-----------------\n", "<<< (RECVD) <<<\n%s\n-----------------\n",
parser->msg.msg.buf ); parser->msg.msg.buf );
print_http_headers( &parser->msg ); print_http_headers( &parser->msg );
if (parser->content_length > (unsigned int)g_maxContentLength) {
if( parser->content_length >
( unsigned int )g_maxContentLength ) {
*http_error_code = HTTP_REQ_ENTITY_TOO_LARGE; *http_error_code = HTTP_REQ_ENTITY_TOO_LARGE;
line = __LINE__; return UPNP_E_OUTOF_BOUNDS;
ret = UPNP_E_OUTOF_BOUNDS;
goto ExitFunction;
} }
line = __LINE__;
ret = 0; return 0;
goto ExitFunction; } else if( status == PARSE_FAILURE ) {
} else if (status == PARSE_FAILURE) {
*http_error_code = parser->http_error_code; *http_error_code = parser->http_error_code;
line = __LINE__; return UPNP_E_BAD_HTTPMSG;
ret = UPNP_E_BAD_HTTPMSG; } else if( status == PARSE_INCOMPLETE_ENTITY ) {
goto ExitFunction;
} else if (status == PARSE_INCOMPLETE_ENTITY) {
// read until close // read until close
ok_on_close = TRUE; ok_on_close = TRUE;
} else if (status == PARSE_CONTINUE_1) { } else if( status == PARSE_CONTINUE_1 ) //Web post request. murari
// Web post request. {
line = __LINE__; return PARSE_SUCCESS;
ret = PARSE_SUCCESS;
goto ExitFunction;
} }
} else if (num_read == 0) { } else if( num_read == 0 ) {
if (ok_on_close) { if( ok_on_close ) {
UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
"<<< (RECVD) <<<\n%s\n-----------------\n", "<<< (RECVD) <<<\n%s\n-----------------\n",
parser->msg.msg.buf ); parser->msg.msg.buf );
print_http_headers(&parser->msg); print_http_headers( &parser->msg );
line = __LINE__;
ret = 0; return 0;
goto ExitFunction;
} else { } else {
// partial msg // partial msg
*http_error_code = HTTP_BAD_REQUEST; // or response *http_error_code = HTTP_BAD_REQUEST; // or response
line = __LINE__; return UPNP_E_BAD_HTTPMSG;
ret = UPNP_E_BAD_HTTPMSG;
goto ExitFunction;
} }
} else { } else {
*http_error_code = parser->http_error_code; *http_error_code = parser->http_error_code;
line = __LINE__; return num_read;
ret = num_read;
goto ExitFunction;
} }
} }
ExitFunction:
if (ret != UPNP_E_SUCCESS) {
UpnpPrintf(UPNP_ALL, HTTP, __FILE__, line,
"(http_RecvMessage): Error %d, http_error_code = %d.\n",
ret,
*http_error_code);
}
return ret;
} }
@@ -549,7 +513,7 @@ http_RequestAndResponse( IN uri_type * destination,
int http_error_code; int http_error_code;
SOCKINFO info; SOCKINFO info;
tcp_connection = socket( destination->hostport.IPaddress.ss_family, SOCK_STREAM, 0 ); tcp_connection = socket( AF_INET, SOCK_STREAM, 0 );
if( tcp_connection == -1 ) { if( tcp_connection == -1 ) {
parser_response_init( response, req_method ); parser_response_init( response, req_method );
return UPNP_E_SOCKET_ERROR; return UPNP_E_SOCKET_ERROR;
@@ -563,7 +527,7 @@ http_RequestAndResponse( IN uri_type * destination,
// connect // connect
ret_code = connect( info.socket, ret_code = connect( info.socket,
( struct sockaddr * )&destination->hostport. ( struct sockaddr * )&destination->hostport.
IPaddress, sizeof( struct sockaddr_storage ) ); IPv4address, sizeof( struct sockaddr_in ) );
if( ret_code == -1 ) { if( ret_code == -1 ) {
sock_destroy( &info, SD_BOTH ); sock_destroy( &info, SD_BOTH );
@@ -670,9 +634,8 @@ http_Download( IN const char *url_str,
return ret_code; return ret_code;
} }
UpnpPrintf(UPNP_INFO, HTTP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
"HTTP Buffer:\n%s\n" "----------END--------\n", "HTTP Buffer:\n %s\n----------END--------\n", request.buf );
request.buf);
// get doc msg // get doc msg
ret_code = ret_code =
http_RequestAndResponse( &url, request.buf, request.length, http_RequestAndResponse( &url, request.buf, request.length,
@@ -842,9 +805,9 @@ MakePostMessage( const char *url_str,
return ret_code; return ret_code;
} }
UpnpPrintf(UPNP_INFO, HTTP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
"HTTP Buffer:\n%s\n" "----------END--------\n", "HTTP Buffer:\n %s\n" "----------END--------\n",
request->buf); request->buf );
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
@@ -1034,7 +997,7 @@ http_OpenHttpPost( IN const char *url_str,
handle->contentLength = contentLength; handle->contentLength = contentLength;
tcp_connection = socket( url.hostport.IPaddress.ss_family, SOCK_STREAM, 0 ); tcp_connection = socket( AF_INET, SOCK_STREAM, 0 );
if( tcp_connection == -1 ) { if( tcp_connection == -1 ) {
ret_code = UPNP_E_SOCKET_ERROR; ret_code = UPNP_E_SOCKET_ERROR;
goto errorHandler; goto errorHandler;
@@ -1048,8 +1011,8 @@ http_OpenHttpPost( IN const char *url_str,
} }
ret_code = connect( handle->sock_info.socket, ret_code = connect( handle->sock_info.socket,
( struct sockaddr * )&url.hostport.IPaddress, ( struct sockaddr * )&url.hostport.IPv4address,
sizeof( struct sockaddr_storage ) ); sizeof( struct sockaddr_in ) );
if( ret_code == -1 ) { if( ret_code == -1 ) {
sock_destroy( &handle->sock_info, SD_BOTH ); sock_destroy( &handle->sock_info, SD_BOTH );
@@ -1161,9 +1124,9 @@ MakeGetMessage( const char *url_str,
return ret_code; return ret_code;
} }
UpnpPrintf(UPNP_INFO, HTTP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
"HTTP Buffer:\n%s\n" "----------END--------\n", "HTTP Buffer:\n %s\n" "----------END--------\n",
request->buf); request->buf );
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
@@ -1616,7 +1579,7 @@ http_OpenHttpGetProxy( IN const char *url_str,
handle->cancel = 0; handle->cancel = 0;
parser_response_init( &handle->response, HTTPMETHOD_GET ); parser_response_init( &handle->response, HTTPMETHOD_GET );
tcp_connection = socket( peer->hostport.IPaddress.ss_family, SOCK_STREAM, 0 ); tcp_connection = socket( AF_INET, SOCK_STREAM, 0 );
if( tcp_connection == -1 ) { if( tcp_connection == -1 ) {
ret_code = UPNP_E_SOCKET_ERROR; ret_code = UPNP_E_SOCKET_ERROR;
goto errorHandler; goto errorHandler;
@@ -1630,8 +1593,8 @@ http_OpenHttpGetProxy( IN const char *url_str,
} }
ret_code = connect( handle->sock_info.socket, ret_code = connect( handle->sock_info.socket,
( struct sockaddr * )&peer->hostport.IPaddress, ( struct sockaddr * )&peer->hostport.IPv4address,
sizeof( struct sockaddr_storage ) ); sizeof( struct sockaddr_in ) );
if( ret_code == -1 ) { if( ret_code == -1 ) {
sock_destroy( &handle->sock_info, SD_BOTH ); sock_destroy( &handle->sock_info, SD_BOTH );
@@ -2167,9 +2130,9 @@ MakeGetMessageEx( const char *url_str,
} }
} while( 0 ); } while( 0 );
UpnpPrintf(UPNP_INFO, HTTP, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, HTTP, __FILE__, __LINE__,
"HTTP Buffer:\n%s\n" "----------END--------\n", "HTTP Buffer:\n %s\n" "----------END--------\n",
request->buf); request->buf );
return errCode; return errCode;
} }
@@ -2265,7 +2228,7 @@ http_OpenHttpGetEx( IN const char *url_str,
handle->entity_offset = 0; handle->entity_offset = 0;
parser_response_init( &handle->response, HTTPMETHOD_GET ); parser_response_init( &handle->response, HTTPMETHOD_GET );
tcp_connection = socket( url.hostport.IPaddress.ss_family, SOCK_STREAM, 0 ); tcp_connection = socket( AF_INET, SOCK_STREAM, 0 );
if( tcp_connection == -1 ) { if( tcp_connection == -1 ) {
errCode = UPNP_E_SOCKET_ERROR; errCode = UPNP_E_SOCKET_ERROR;
free( handle ); free( handle );
@@ -2281,8 +2244,8 @@ http_OpenHttpGetEx( IN const char *url_str,
} }
errCode = connect( handle->sock_info.socket, errCode = connect( handle->sock_info.socket,
( struct sockaddr * )&url.hostport.IPaddress, ( struct sockaddr * )&url.hostport.IPv4address,
sizeof( struct sockaddr_storage ) ); sizeof( struct sockaddr_in ) );
if( errCode == -1 ) { if( errCode == -1 ) {
sock_destroy( &handle->sock_info, SD_BOTH ); sock_destroy( &handle->sock_info, SD_BOTH );
errCode = UPNP_E_SOCKET_CONNECT; errCode = UPNP_E_SOCKET_CONNECT;

Some files were not shown because too many files have changed in this diff Show More