Compare commits

..

2 Commits

Author SHA1 Message Date
Marcelo Roberto Jimenez
84692a6e84 Creating a tag for release 1.6.0.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/tags/release-1.6.0@211 119443c7-1b9e-41f8-b6fc-b9c35fce742c
2007-06-23 14:24:54 +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
153 changed files with 28620 additions and 36182 deletions

1009
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

32
THANKS
View File

@@ -6,53 +6,31 @@ suggesting various improvements or submitting actual code.
Here is a list of these people. Help us keep it complete and Here is a list of these people. Help us keep it complete and
exempt of errors. exempt of errors.
- Alex (afaucher)
- Andre Sodermans (wienerschnitzel)
- Anthony Viallard (homer242)
- Apostolos Syropoulos
- Arno Willig - Arno Willig
- Bob Ciora - Bob Ciora
- Carlo Parata
- Chaos - Chaos
- Charles Nepveu (cnepveu)
- Chris Pickel
- Chuck Thomason (cyt4)
- Craig Nelson - Craig Nelson
- David Blanchet
- David Maass - David Maass
- Emil Ljungdahl - Emil Ljungdahl
- Erik Johansson - Erik Johansson
- Eric Tanguy - Eric Tanguy
- Erwan Velu - Erwan Velu
- Eugene Christensen
- Fabrice Fontaine
- Fredrik Svensson - Fredrik Svensson
- Glen Masgai - Glen Masgai
- Hartmut Holzgraefe - hholzgra
- Ingo Hofmann
- Jiri Zouhar - Jiri Zouhar
- John Dennis - John Dennis
- Jonathan Casiot (no_dice) - Jonathan (no_dice)
- Josh Carroll
- Keith Brindley
- Leuk_He - Leuk_He
- Loigu - Loigu
- Luke Kim (nereusuj) - Luke Kim
- Marcelo Roberto Jimenez (mroberto) - Marcelo Roberto Jimenez
- Markus Strobl - Markus Strobl
- Nektarios K. Papadopoulos (npapadop) - Nektarios K. Papadopoulos
- Nicholas Kraft
- Nick Leverton (leveret)
- Oskar Liljeblad - Oskar Liljeblad
- Michael (oxygenic) - Michael (Oxy)
- Paul Vixie - Paul Vixie
- Peter Hartley
- Rene Hexel - Rene Hexel
- Robert Gingher (robsbox)
- Ronan Menard
- Siva Chandran - Siva Chandran
- Stéphane Corthésy
- Steve Bresson
- Timothy Redaelli - Timothy Redaelli
- Titus Winters - Titus Winters

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/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,188 +4,73 @@
# #
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
# #
# (C) Copyright 2005-2007 Rémi Turboult <r3mi@users.sourceforge.net> # (C) Copyright 2005-2006 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
# #
AC_PREREQ(2.60) AC_PREREQ(2.60)
AC_INIT([libupnp], [1.8.0], [mroberto@users.sourceforge.net]) AC_INIT([libupnp], [1.6.0], [mroberto@users.sourceforge.net])
dnl ############################################################################ # *Independently* of the above libupnp package version, the libtool version
dnl # *Independently* of the above libupnp package version, the libtool version # of the 3 libraries need to be updated whenever there is a change released :
dnl # of the 3 libraries need to be updated whenever there is a change released: # "current:revision:age" (this is NOT the same as the package version), where:
dnl # "current:revision:age" (this is NOT the same as the package version), # - library code modified: revision++
dnl # where: # - interfaces changed/added/removed: current++ and revision=0
dnl # - library code modified: revision++ # - interfaces added: age++
dnl # - interfaces changed/added/removed: current++ and revision=0 # - interfaces removed: age=0
dnl # - interfaces added: age++ # *please update only once, before a formal release, not for each change*
dnl # - interfaces removed: age=0 #
dnl # *please update only once, before a formal release, not for each change* # For release 1.4.1, we had:
dnl # #AC_SUBST([LT_VERSION_IXML], [2:2:0])
dnl ############################################################################ #AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0])
dnl # Release 1.4.1: #AC_SUBST([LT_VERSION_UPNP], [2:2:0])
dnl #AC_SUBST([LT_VERSION_IXML], [2:2:0]) #
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0]) # "current:revision:age"
dnl #AC_SUBST([LT_VERSION_UPNP], [2:2:0]) #
dnl # # - Code has changed in ixml
dnl ############################################################################ # revision: 2 -> 3
dnl # Release 1.4.6: # - Code has changed in threadutil
dnl # "current:revision:age" # revision: 2 -> 3
dnl # # - Interface added in threadutil
dnl # - Code has changed in ixml # current: 2 -> 3
dnl # revision: 2 -> 3 # revisiion: 3 -> 0
dnl # - Code has changed in threadutil # age: 0 -> 1
dnl # revision: 2 -> 3 # - Code has changed in upnp
dnl # - Interface added in threadutil # revision: 2 -> 3
dnl # current: 2 -> 3 #
dnl # revisiion: 3 -> 0 # For release 1.4.6, we had:
dnl # age: 0 -> 1 #AC_SUBST([LT_VERSION_IXML], [2:3:0])
dnl # - Code has changed in upnp #AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1])
dnl # revision: 2 -> 3 #AC_SUBST([LT_VERSION_UPNP], [2:3:0])
dnl # #
dnl #AC_SUBST([LT_VERSION_IXML], [2:3:0]) # "current:revision:age"
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1]) #
dnl #AC_SUBST([LT_VERSION_UPNP], [2:3:0]) # - Code has changed in ixml
dnl # # revision: 3 -> 4
dnl ############################################################################ # - Code has changed in threadutil
dnl # Release 1.6.0: # revision: 0 -> 1
dnl # "current:revision:age" # - Code has changed in upnp
dnl # # revision: 3 -> 4
dnl # - Code has changed in ixml # - Interface changed in upnp
dnl # revision: 3 -> 4 # current: 2 -> 3
dnl # - Code has changed in threadutil # revision: 4 -> 0
dnl # revision: 0 -> 1 # - Interface removed in upnp
dnl # - Code has changed in upnp # age: 0 -> 0
dnl # revision: 3 -> 4 #
dnl # - Interface changed in upnp # For release 1.6.0, we had:
dnl # current: 2 -> 3 #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl # revision: 4 -> 0 #AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1])
dnl # - Interface removed in upnp #AC_SUBST([LT_VERSION_UPNP], [3:0:0])
dnl # age: 0 -> 0
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:0:0])
dnl #
dnl ############################################################################
dnl # Release 1.6.1:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in threadutil
dnl # revision: 1 -> 2
dnl # - Interface added in threadutil
dnl # current: 3 -> 4
dnl # revision: 2 -> 0
dnl # - Interface added in threadutil
dnl # age: 1 -> 2
dnl # - Code has changed in upnp
dnl # revision: 0 -> 1
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:1:0])
dnl #
dnl ############################################################################
dnl # Release 1.6.2:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in upnp
dnl # revision: 1 -> 2
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:2:0])
dnl #
dnl ############################################################################
dnl # Release 1.6.3:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in threadutil
dnl # revision: 0 -> 1
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:1:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:2:0])
dnl #
dnl ############################################################################
dnl # Release 1.6.4:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in threadutil
dnl # revision: 1 -> 2
dnl # - Code has changed in upnp
dnl # revision: 2 -> 3
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:3:0])
dnl #
dnl ############################################################################
dnl # Release 1.6.5:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in upnp
dnl # revision: 3 -> 4
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:4:0])
dnl #
dnl ############################################################################
dnl # Release 1.6.6:
dnl # "current:revision:age"
dnl #
dnl # - Code has changed in threadutil
dnl # revision: 2 -> 3
dnl # - Code has changed in upnp
dnl # revision: 4 -> 5
dnl #
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:3:2])
dnl #AC_SUBST([LT_VERSION_UPNP], [3:5:0])
dnl #
dnl ############################################################################
dnl # Release 1.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], [3:1:1])
AC_SUBST([LT_VERSION_UPNP], [4:0:0]) AC_SUBST([LT_VERSION_UPNP], [3:0:0])
dnl ############################################################################
dnl # Repeating the algorithm to place it closer to the modificatin place:
dnl # - library code modified: revision++
dnl # - interfaces changed/added/removed: current++ and revision=0
dnl # - interfaces added: age++
dnl # - interfaces removed: age=0
dnl # *please update only once, before a formal release, not for each change*
dnl ############################################################################
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR(config.aux)
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR(m4)
AC_CONFIG_SRCDIR([upnp/inc/upnp.h]) AC_CONFIG_SRCDIR(upnp/inc/upnp.h)
AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects dist-bzip2]) AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects dist-bzip2])
# #
# Get canonical host names in host and host_os # Get canonical host names in host and host_os
# #
@@ -210,7 +95,8 @@ AC_REVISION([$Revision: 1.11 $])
upnpmaj=`echo "$PACKAGE_VERSION" | sed 's/\..*//' ` upnpmaj=`echo "$PACKAGE_VERSION" | sed 's/\..*//' `
upnpmin=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.// ; s/[^0-9].*$//' `] upnpmin=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.// ; s/[^0-9].*$//' `]
upnppatch=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.[^.]\.// ; s/[^0-9].*$//' `] upnppatch=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.[^.]\.// ; s/[^0-9].*$//' `]
AC_DEFINE_UNQUOTED([UPNP_VERSION_STRING], "$PACKAGE_VERSION", [see upnpconfig.h]) AC_DEFINE_UNQUOTED([UPNP_VERSION_STRING], "$PACKAGE_VERSION",
[see upnpconfig.h])
AC_DEFINE_UNQUOTED([UPNP_VERSION_MAJOR], $upnpmaj, [see upnpconfig.h]) AC_DEFINE_UNQUOTED([UPNP_VERSION_MAJOR], $upnpmaj, [see upnpconfig.h])
AC_DEFINE_UNQUOTED([UPNP_VERSION_MINOR], $upnpmin, [see upnpconfig.h]) AC_DEFINE_UNQUOTED([UPNP_VERSION_MINOR], $upnpmin, [see upnpconfig.h])
AC_DEFINE_UNQUOTED([UPNP_VERSION_PATCH], $upnppatch, [see upnpconfig.h]) AC_DEFINE_UNQUOTED([UPNP_VERSION_PATCH], $upnppatch, [see upnpconfig.h])
@@ -232,6 +118,7 @@ fi
# #
# Check for libupnp subsets # Check for libupnp subsets
# #
RT_BOOL_ARG_ENABLE([client], [yes], [control point code (client)]) RT_BOOL_ARG_ENABLE([client], [yes], [control point code (client)])
if test "x$enable_client" = xyes ; then if test "x$enable_client" = xyes ; then
AC_DEFINE(UPNP_HAVE_CLIENT, 1, [see upnpconfig.h]) AC_DEFINE(UPNP_HAVE_CLIENT, 1, [see upnpconfig.h])
@@ -265,13 +152,11 @@ fi
RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code]) RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code])
#
# doc installation # doc installation
# autoconf >= 2.60 already defines ${docdir}, but we will not use its # autoconf >= 2.60 already defines ${docdir}, but we will not use its
# default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}. # default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}.
# That would give us ${datarootdir}/doc/libupnp, and we want the package # That would give us ${datarootdir}/doc/libupnp, and we want the package
# version on that. # version on that.
#
docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}" docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"
AC_MSG_CHECKING([for documentation directory]) AC_MSG_CHECKING([for documentation directory])
AC_ARG_WITH( AC_ARG_WITH(
@@ -286,9 +171,7 @@ AS_HELP_STRING(
[], [],
[with_documentation=no]) [with_documentation=no])
#
# If something has been entered after an equal sign, assume it is the directory # If something has been entered after an equal sign, assume it is the directory
#
if test x"$with_documentation" != xyes -a x"$with_documentation" != xno; then if test x"$with_documentation" != xyes -a x"$with_documentation" != xno; then
docdir="$with_documentation" docdir="$with_documentation"
fi fi
@@ -322,9 +205,7 @@ freebsd*)
echo "Using non-specific system compiler settings" echo "Using non-specific system compiler settings"
if test x"$enable_debug" = xyes; then if test x"$enable_debug" = xyes; then
# AC_PROG_CC already sets CFLAGS to "-g -O2" by default # AC_PROG_CC already sets CFLAGS to "-g -O2" by default
#: :
# Use -O0 in debug so that variables do not get optimized out
AX_CFLAGS_GCC_OPTION([-O0])
else else
# add optimise for size # add optimise for size
AX_CFLAGS_GCC_OPTION([-Os]) AX_CFLAGS_GCC_OPTION([-Os])
@@ -346,26 +227,9 @@ AC_DEFINE([_FILE_OFFSET_BITS], [64], [File Offset size])
# #
# Are we targetting Win32? # Checks for header files
#
AC_MSG_CHECKING([for Win32])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
#ifdef WIN32
#error Yup
#endif
],[])], [ac_cv_win32="no"], [ac_cv_win32="yes"])
if test "$ac_cv_win32" = "yes"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
#
# Checks for header files (which aren't needed on Win32)
# #
AC_HEADER_STDC AC_HEADER_STDC
if test "$ac_cv_win32" = "no"; then
# libupnp code doesn't use autoconf variables yet, # libupnp code doesn't use autoconf variables yet,
# so just abort if a header file is not found. # so just abort if a header file is not found.
AC_CHECK_HEADERS( AC_CHECK_HEADERS(
@@ -381,43 +245,20 @@ AC_CHECK_HEADERS(
sys/ioctl.h \ sys/ioctl.h \
sys/socket.h \ sys/socket.h \
sys/time.h \ sys/time.h \
sys/timeb.h \
syslog.h \ syslog.h \
unistd.h \ unistd.h \
], ],
[], [],
[AC_MSG_ERROR([required header file missing])]) [AC_MSG_ERROR([required header file missing])])
fi
# #
# Checks for typedefs, structures, and compiler characteristics # Checks for typedefs, structures, and compiler characteristics
# #
AC_C_CONST AC_C_CONST
AC_TYPE_SIZE_T
# The test for socklen_t was getting it wrong when it exists but is in ws2tcpip.h, TYPE_SOCKLEN_T
# so we use a new test.
#TYPE_SOCKLEN_T
AC_CHECK_HEADERS([sys/types.h sys/socket.h ws2tcpip.h])
AC_MSG_CHECKING(for socklen_t)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
],[ socklen_t t = 0; return t; ])
],[ac_cv_socklen_t="yes"],[ac_cv_socklen_t="no"])
if test "$ac_cv_socklen_t" = "yes"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no, using int])
AC_DEFINE(socklen_t, int, [Type for storing the length of struct sockaddr])
fi
# #
@@ -426,50 +267,14 @@ fi
AC_FUNC_VPRINTF AC_FUNC_VPRINTF
AC_FUNC_FSEEKO AC_FUNC_FSEEKO
AC_CHECK_FUNCS(ftime,, [AC_CHECK_LIB(compat, ftime)]) AC_CHECK_FUNCS(ftime,, [AC_CHECK_LIB(compat, ftime)])
#
# Solaris needs -lsocket -lnsl -lrt
AC_SEARCH_LIBS([bind], [socket])
AC_SEARCH_LIBS([gethostbyname], [nsl])
AC_SEARCH_LIBS([sched_getparam], [rt])
# #
# Checks for POSIX Threads # Checks for POSIX Threads
# #
echo "--------------------------- pthread stuff -------------------------------------"
ACX_PTHREAD( ACX_PTHREAD(
[], [],
[AC_MSG_ERROR([POSIX threads are required to build this program])]) [AC_MSG_ERROR([POSIX threads are required to build this program])])
#
# Update environment variables for pthreads
#
CC="$PTHREAD_CC"
CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
#
# Determine if pthread_rwlock_t is available
#
echo "----------------------- pthread_rwlock_t stuff --------------------------------"
AC_MSG_CHECKING([if pthread_rwlock_t is available])
AC_LANG([C])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[#include <pthread.h>],
[pthread_rwlock_t *x;])],
[AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t])
AC_MSG_RESULT([yes, supported without any options])],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[#define _GNU_SOURCE
#include <pthread.h>],
[pthread_rwlock_t *x;])],
[AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t])
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
AC_MSG_RESULT([yes, definition of _GNU_SOURCE required])],
[AC_DEFINE([UPNP_USE_RWLOCK], [0], [Do not use pthread_rwlock_t])
AC_MSG_RESULT([no, needs to fallback to pthread_mutex])
AC_MSG_ERROR([pthread_rwlock_t not available])])])
echo "-------------------------------------------------------------------------------"
AC_CONFIG_FILES([ AC_CONFIG_FILES([

View File

@@ -39,7 +39,7 @@ EXTRA_DIST = \
./html/upnp/UPNP_E_SOCKET_ERROR-208.html \ ./html/upnp/UPNP_E_SOCKET_ERROR-208.html \
./html/upnp/UPNP_E_CANCELED-210.html \ ./html/upnp/UPNP_E_CANCELED-210.html \
./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \ ./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \
./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCEPTED-302.html \ ./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCAPTED-302.html \
./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \ ./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \
./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \ ./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \
./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \ ./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \
@@ -295,7 +295,7 @@ if WITH_DOCUMENTATION
./html/upnp/UPNP_E_SOCKET_ERROR-208.html \ ./html/upnp/UPNP_E_SOCKET_ERROR-208.html \
./html/upnp/UPNP_E_CANCELED-210.html \ ./html/upnp/UPNP_E_CANCELED-210.html \
./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \ ./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \
./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCEPTED-302.html \ ./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCAPTED-302.html \
./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \ ./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \
./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \ ./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \
./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \ ./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \

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 );
} }
} }

View File

@@ -1,97 +1,119 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* 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 "ixmlparser.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include "ixmlparser.h"
void ixmlDocument_init(IXML_Document *doc) /*================================================================
* ixmlDocument_init
* It initialize the document structure.
* External function.
*
*=================================================================*/
void
ixmlDocument_init( IN IXML_Document * doc )
{ {
memset( doc, 0, sizeof( IXML_Document ) ); memset( doc, 0, sizeof( IXML_Document ) );
} }
/*================================================================
void ixmlDocument_free(IXML_Document *doc) * ixmlDocument_free
* It frees the whole document tree.
* External function.
*
*=================================================================*/
void
ixmlDocument_free( IN IXML_Document * doc )
{ {
if( doc != NULL ) { if( doc != NULL ) {
ixmlNode_free( ( IXML_Node * ) doc ); ixmlNode_free( ( IXML_Node * ) doc );
} }
} }
/*================================================================
/*! * ixmlDocument_setOwnerDocument
* When this function is called first time, nodeptr is the root of the subtree, *
* so it is not necessay to do two steps recursion. * When this function is called first time, nodeptr is the root
* of the subtree, so it is not necessay to do two steps
* recursion.
* *
* Internal function called by ixmlDocument_importNode * Internal function called by ixmlDocument_importNode
*/ *
static void ixmlDocument_setOwnerDocument( *=================================================================*/
/*! [in] The document node. */ void
IXML_Document *doc, ixmlDocument_setOwnerDocument( IN IXML_Document * doc,
/*! [in] \todo documentation. */ IN IXML_Node * nodeptr )
IXML_Node *nodeptr)
{ {
if( nodeptr != NULL ) { if( nodeptr != NULL ) {
nodeptr->ownerDocument = doc; nodeptr->ownerDocument = doc;
ixmlDocument_setOwnerDocument( ixmlDocument_setOwnerDocument( doc,
doc, ixmlNode_getFirstChild(nodeptr)); ixmlNode_getFirstChild( nodeptr ) );
ixmlDocument_setOwnerDocument( ixmlDocument_setOwnerDocument( doc,
doc, ixmlNode_getNextSibling(nodeptr)); ixmlNode_getNextSibling
( nodeptr ) );
} }
} }
/*================================================================
* ixmlDocument_importNode
* Imports a node from another document to this document. The
* returned node has no parent; (parentNode is null). The source
* node is not altered or removed from the original document;
* this method creates a new copy of the source node.
int ixmlDocument_importNode( * For all nodes, importing a node creates a node object owned
IXML_Document *doc, * by the importing document, with attribute values identical to
IXML_Node *importNode, * the source node's nodeName and nodeType, plus the attributes
BOOL deep, * related to namespaces (prefix, localName, and namespaceURI).
IXML_Node **rtNode) * As in the cloneNode operation on a node, the source node is
* not altered.
*
* External function.
*
*=================================================================*/
int
ixmlDocument_importNode( IN IXML_Document * doc,
IN IXML_Node * importNode,
IN BOOL deep,
OUT IXML_Node ** rtNode )
{ {
unsigned short nodeType; unsigned short nodeType;
IXML_Node *newNode; IXML_Node *newNode;
*rtNode = NULL; *rtNode = NULL;
if (doc == NULL || importNode == NULL) { if( ( doc == NULL ) || ( importNode == NULL ) ) {
return IXML_INVALID_PARAMETER; return IXML_INVALID_PARAMETER;
} }
@@ -111,16 +133,29 @@ int ixmlDocument_importNode(
return IXML_SUCCESS; return IXML_SUCCESS;
} }
/*================================================================
int ixmlDocument_createElementEx( * ixmlDocument_createElementEx
IXML_Document *doc, * Creates an element of the type specified.
const DOMString tagName, * External function.
IXML_Element **rtElement) * Parameters:
* doc: pointer to document
* tagName: The name of the element, it is case-sensitive.
* Return Value:
* IXML_SUCCESS
* IXML_INVALID_PARAMETER: if either doc or tagName is NULL
* IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createElementEx( IN IXML_Document * doc,
IN const DOMString tagName,
OUT IXML_Element ** rtElement )
{ {
int errCode = IXML_SUCCESS; int errCode = IXML_SUCCESS;
IXML_Element *newElement = NULL; IXML_Element *newElement = NULL;
if (doc == NULL || tagName == NULL) { if( ( doc == NULL ) || ( tagName == NULL ) ) {
errCode = IXML_INVALID_PARAMETER; errCode = IXML_INVALID_PARAMETER;
goto ErrorHandler; goto ErrorHandler;
} }
@@ -153,23 +188,46 @@ int ixmlDocument_createElementEx(
ErrorHandler: ErrorHandler:
*rtElement = newElement; *rtElement = newElement;
return errCode; return errCode;
} }
/*================================================================
IXML_Element *ixmlDocument_createElement( * ixmlDocument_createElement
IXML_Document *doc, * Creates an element of the type specified.
const DOMString tagName) * External function.
* Parameters:
* doc: pointer to document
* tagName: The name of the element, it is case-sensitive.
* Return Value:
* A new element object with the nodeName set to tagName, and
* localName, prefix and namespaceURI set to null.
*
*=================================================================*/
IXML_Element *
ixmlDocument_createElement( IN IXML_Document * doc,
IN const DOMString tagName )
{ {
IXML_Element *newElement = NULL; IXML_Element *newElement = NULL;
ixmlDocument_createElementEx( doc, tagName, &newElement ); ixmlDocument_createElementEx( doc, tagName, &newElement );
return newElement; return newElement;
} }
/*================================================================
int ixmlDocument_createDocumentEx(IXML_Document **rtDoc) * ixmlDocument_createDocumentEx
* Creates an document object
* Internal function.
* Parameters:
* rtDoc: the document created or NULL on failure
* Return Value:
* IXML_SUCCESS
* IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createDocumentEx( OUT IXML_Document ** rtDoc )
{ {
IXML_Document *doc; IXML_Document *doc;
int errCode = IXML_SUCCESS; int errCode = IXML_SUCCESS;
@@ -199,27 +257,49 @@ ErrorHandler:
return errCode; return errCode;
} }
/*================================================================
IXML_Document *ixmlDocument_createDocument() * ixmlDocument_createDocument
* Creates an document object
* Internal function.
* Parameters:
* none
* Return Value:
* A new document object with the nodeName set to "#document".
*
*=================================================================*/
IXML_Document *
ixmlDocument_createDocument( )
{ {
IXML_Document *doc = NULL; IXML_Document *doc = NULL;
ixmlDocument_createDocumentEx( &doc ); ixmlDocument_createDocumentEx( &doc );
return doc; return doc;
} }
/*================================================================
int ixmlDocument_createTextNodeEx( * ixmlDocument_createTextNodeEx
IXML_Document *doc, * Creates an text node.
const DOMString data, * External function.
IXML_Node **textNode) * Parameters:
* data: text data for the text node. It is stored in nodeValue field.
* Return Value:
* IXML_SUCCESS
* IXML_INVALID_PARAMETER: if either doc or data is NULL
* IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createTextNodeEx( IN IXML_Document * doc,
IN const char *data,
OUT IXML_Node ** textNode )
{ {
IXML_Node *returnNode; IXML_Node *returnNode;
int rc = IXML_SUCCESS; int rc = IXML_SUCCESS;
returnNode = NULL; returnNode = NULL;
if (doc == NULL || data == NULL) { if( ( doc == NULL ) || ( data == NULL ) ) {
rc = IXML_INVALID_PARAMETER; rc = IXML_INVALID_PARAMETER;
goto ErrorHandler; goto ErrorHandler;
} }
@@ -256,12 +336,22 @@ int ixmlDocument_createTextNodeEx(
ErrorHandler: ErrorHandler:
*textNode = returnNode; *textNode = returnNode;
return rc; return rc;
} }
/*================================================================
IXML_Node *ixmlDocument_createTextNode( * ixmlDocument_createTextNode
IXML_Document *doc, * Creates an text node.
const DOMString data) * External function.
* Parameters:
* data: text data for the text node. It is stored in nodeValue field.
* Return Value:
* The new text node.
*
*=================================================================*/
IXML_Node *
ixmlDocument_createTextNode( IN IXML_Document * doc,
IN const char *data )
{ {
IXML_Node *returnNode = NULL; IXML_Node *returnNode = NULL;
@@ -270,11 +360,21 @@ IXML_Node *ixmlDocument_createTextNode(
return returnNode; return returnNode;
} }
/*================================================================
int ixmlDocument_createAttributeEx( * ixmlDocument_createAttributeEx
IXML_Document *doc, * Creates an attribute of the given name.
const char *name, * External function.
IXML_Attr **rtAttr) * Parameters:
* name: The name of the Attribute node.
* Return Value:
* IXML_SUCCESS
* IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations.
*
================================================================*/
int
ixmlDocument_createAttributeEx( IN IXML_Document * doc,
IN const char *name,
OUT IXML_Attr ** rtAttr )
{ {
IXML_Attr *attrNode = NULL; IXML_Attr *attrNode = NULL;
int errCode = IXML_SUCCESS; int errCode = IXML_SUCCESS;
@@ -285,7 +385,7 @@ int ixmlDocument_createAttributeEx(
goto ErrorHandler; goto ErrorHandler;
} }
if (doc == NULL || name == NULL) { if( ( doc == NULL ) || ( name == NULL ) ) {
ixmlAttr_free( attrNode ); ixmlAttr_free( attrNode );
attrNode = NULL; attrNode = NULL;
errCode = IXML_INVALID_PARAMETER; errCode = IXML_INVALID_PARAMETER;
@@ -293,6 +393,7 @@ int ixmlDocument_createAttributeEx(
} }
ixmlAttr_init( attrNode ); ixmlAttr_init( attrNode );
attrNode->n.nodeType = eATTRIBUTE_NODE; attrNode->n.nodeType = eATTRIBUTE_NODE;
// set the node fields // set the node fields
@@ -309,31 +410,56 @@ int ixmlDocument_createAttributeEx(
ErrorHandler: ErrorHandler:
*rtAttr = attrNode; *rtAttr = attrNode;
return errCode; return errCode;
} }
/*================================================================
IXML_Attr *ixmlDocument_createAttribute( * ixmlDocument_createAttribute
IXML_Document *doc, * Creates an attribute of the given name.
const char *name) * External function.
* Parameters:
* name: The name of the Attribute node.
* Return Value:
* A new attr object with the nodeName attribute set to the
* given name, and the localName, prefix and namespaceURI set to NULL.
* The value of the attribute is the empty string.
*
================================================================*/
IXML_Attr *
ixmlDocument_createAttribute( IN IXML_Document * doc,
IN const char *name )
{ {
IXML_Attr *attrNode = NULL; IXML_Attr *attrNode = NULL;
ixmlDocument_createAttributeEx( doc, name, &attrNode ); ixmlDocument_createAttributeEx( doc, name, &attrNode );
return attrNode; return attrNode;
} }
/*================================================================
int ixmlDocument_createAttributeNSEx( * ixmlDocument_createAttributeNSEx
IXML_Document *doc, * Creates an attrbute of the given name and namespace URI
const DOMString namespaceURI, * External function.
const DOMString qualifiedName, * Parameters:
IXML_Attr **rtAttr ) * namespaceURI: the namespace fo the attribute to create
* qualifiedName: qualifiedName of the attribute to instantiate
* Return Value:
* IXML_SUCCESS
* IXML_INVALID_PARAMETER: if either doc,namespaceURI or qualifiedName is NULL
* IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createAttributeNSEx( IN IXML_Document * doc,
IN const DOMString namespaceURI,
IN const DOMString qualifiedName,
OUT IXML_Attr ** rtAttr )
{ {
IXML_Attr *attrNode = NULL; IXML_Attr *attrNode = NULL;
int errCode = IXML_SUCCESS; int errCode = IXML_SUCCESS;
if (doc == NULL || namespaceURI == NULL || qualifiedName == NULL) { if( ( doc == NULL ) || ( namespaceURI == NULL )
|| ( qualifiedName == NULL ) ) {
errCode = IXML_INVALID_PARAMETER; errCode = IXML_INVALID_PARAMETER;
goto ErrorHandler; goto ErrorHandler;
} }
@@ -363,43 +489,68 @@ int ixmlDocument_createAttributeNSEx(
ErrorHandler: ErrorHandler:
*rtAttr = attrNode; *rtAttr = attrNode;
return errCode; return errCode;
} }
/*================================================================
IXML_Attr *ixmlDocument_createAttributeNS( * ixmlDocument_createAttributeNS
IXML_Document *doc, * Creates an attrbute of the given name and namespace URI
const DOMString namespaceURI, * External function.
const DOMString qualifiedName) * Parameters:
* namespaceURI: the namespace fo the attribute to create
* qualifiedName: qualifiedName of the attribute to instantiate
* Return Value:
* Creates an attribute node with the given namespaceURI and
* qualifiedName. The prefix and localname are extracted from
* the qualifiedName. The node value is empty.
*
*=================================================================*/
IXML_Attr *
ixmlDocument_createAttributeNS( IN IXML_Document * doc,
IN const DOMString namespaceURI,
IN const DOMString qualifiedName )
{ {
IXML_Attr *attrNode = NULL; IXML_Attr *attrNode = NULL;
ixmlDocument_createAttributeNSEx( ixmlDocument_createAttributeNSEx( doc, namespaceURI, qualifiedName,
doc, namespaceURI, qualifiedName, &attrNode); &attrNode );
return attrNode; return attrNode;
} }
/*================================================================
int ixmlDocument_createCDATASectionEx( * ixmlDocument_createCDATASectionEx
IXML_Document *doc, * Creates an CDATASection node whose value is the specified string
const DOMString data, * External function.
IXML_CDATASection **rtCD) * Parameters:
* data: the data for the CDATASection contents.
* Return Value:
* IXML_SUCCESS
* IXML_INVALID_PARAMETER: if either doc or data is NULL
* IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createCDATASectionEx( IN IXML_Document * doc,
IN const DOMString data,
OUT IXML_CDATASection ** rtCD )
{ {
int errCode = IXML_SUCCESS; int errCode = IXML_SUCCESS;
IXML_CDATASection *cDSectionNode = NULL; IXML_CDATASection *cDSectionNode = NULL;
if(doc == NULL || data == NULL) { if( ( doc == NULL ) || ( data == NULL ) ) {
errCode = IXML_INVALID_PARAMETER; errCode = IXML_INVALID_PARAMETER;
goto ErrorHandler; goto ErrorHandler;
} }
cDSectionNode = (IXML_CDATASection *)malloc(sizeof (IXML_CDATASection)); cDSectionNode =
( IXML_CDATASection * ) malloc( sizeof( IXML_CDATASection ) );
if( cDSectionNode == NULL ) { if( cDSectionNode == NULL ) {
errCode = IXML_INSUFFICIENT_MEMORY; errCode = IXML_INSUFFICIENT_MEMORY;
goto ErrorHandler; goto ErrorHandler;
} }
ixmlCDATASection_init( cDSectionNode ); ixmlCDATASection_init( cDSectionNode );
cDSectionNode->n.nodeType = eCDATA_SECTION_NODE; cDSectionNode->n.nodeType = eCDATA_SECTION_NODE;
cDSectionNode->n.nodeName = strdup( CDATANODENAME ); cDSectionNode->n.nodeName = strdup( CDATANODENAME );
if( cDSectionNode->n.nodeName == NULL ) { if( cDSectionNode->n.nodeName == NULL ) {
@@ -422,58 +573,80 @@ int ixmlDocument_createCDATASectionEx(
ErrorHandler: ErrorHandler:
*rtCD = cDSectionNode; *rtCD = cDSectionNode;
return errCode; return errCode;
} }
/*================================================================
IXML_CDATASection *ixmlDocument_createCDATASection( * ixmlDocument_createCDATASection
IXML_Document *doc, * Creates an CDATASection node whose value is the specified string
const DOMString data) * External function.
* Parameters:
* data: the data for the CDATASection contents.
* Return Value:
* The new CDATASection object.
*
*=================================================================*/
IXML_CDATASection *
ixmlDocument_createCDATASection( IN IXML_Document * doc,
IN const DOMString data )
{ {
IXML_CDATASection *cDSectionNode = NULL; IXML_CDATASection *cDSectionNode = NULL;
ixmlDocument_createCDATASectionEx( doc, data, &cDSectionNode ); ixmlDocument_createCDATASectionEx( doc, data, &cDSectionNode );
return cDSectionNode; return cDSectionNode;
} }
/*================================================================
int ixmlDocument_createElementNSEx( * ixmlDocument_createElementNSEx
IXML_Document *doc, * Creates an element of the given qualified name and namespace URI.
const DOMString namespaceURI, * External function.
const DOMString qualifiedName, * Parameters:
IXML_Element **rtElement) * namespaceURI: the namespace URI of the element to create.
* qualifiedName: the qualified name of the element to instantiate.
* Return Value:
* Return Value:
* IXML_SUCCESS
* IXML_INVALID_PARAMETER: if either doc,namespaceURI or qualifiedName is NULL
* IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createElementNSEx( IN IXML_Document * doc,
IN const DOMString namespaceURI,
IN const DOMString qualifiedName,
OUT IXML_Element ** rtElement )
{ {
IXML_Element *newElement = NULL;
int ret = IXML_SUCCESS;
int line = 0;
if (doc == NULL || namespaceURI == NULL || qualifiedName == NULL) { IXML_Element *newElement = NULL;
line = __LINE__; int errCode = IXML_SUCCESS;
ret = IXML_INVALID_PARAMETER;
if( ( doc == NULL ) || ( namespaceURI == NULL )
|| ( qualifiedName == NULL ) ) {
errCode = IXML_INVALID_PARAMETER;
goto ErrorHandler; goto ErrorHandler;
} }
ret = ixmlDocument_createElementEx(doc, qualifiedName, &newElement); errCode =
if (ret != IXML_SUCCESS) { ixmlDocument_createElementEx( doc, qualifiedName, &newElement );
line = __LINE__; if( errCode != IXML_SUCCESS ) {
goto ErrorHandler; goto ErrorHandler;
} }
// set the namespaceURI field // set the namespaceURI field
newElement->n.namespaceURI = strdup( namespaceURI ); newElement->n.namespaceURI = strdup( namespaceURI );
if( newElement->n.namespaceURI == NULL ) { if( newElement->n.namespaceURI == NULL ) {
line = __LINE__;
ixmlElement_free( newElement ); ixmlElement_free( newElement );
newElement = NULL; newElement = NULL;
ret = IXML_INSUFFICIENT_MEMORY; errCode = IXML_INSUFFICIENT_MEMORY;
goto ErrorHandler; goto ErrorHandler;
} }
// set the localName and prefix // set the localName and prefix
ret = ixmlNode_setNodeName((IXML_Node *)newElement, qualifiedName); errCode =
if (ret != IXML_SUCCESS) { ixmlNode_setNodeName( ( IXML_Node * ) newElement, qualifiedName );
line = __LINE__; if( errCode != IXML_SUCCESS ) {
ixmlElement_free( newElement ); ixmlElement_free( newElement );
newElement = NULL; newElement = NULL;
ret = IXML_INSUFFICIENT_MEMORY; errCode = IXML_INSUFFICIENT_MEMORY;
goto ErrorHandler; goto ErrorHandler;
} }
@@ -481,70 +654,115 @@ int ixmlDocument_createElementNSEx(
ErrorHandler: ErrorHandler:
*rtElement = newElement; *rtElement = newElement;
if (ret != IXML_SUCCESS) { return errCode;
IxmlPrintf(__FILE__, line, "ixmlDocument_createElementNSEx", "Error %d\n", ret);
} }
return ret; /*================================================================
} * ixmlDocument_createElementNS
* Creates an element of the given qualified name and namespace URI.
* External function.
IXML_Element *ixmlDocument_createElementNS( * Parameters:
IXML_Document *doc, * namespaceURI: the namespace URI of the element to create.
const DOMString namespaceURI, * qualifiedName: the qualified name of the element to instantiate.
const DOMString qualifiedName) * Return Value:
* The new element object with tagName qualifiedName, prefix and
* localName extraced from qualfiedName, nodeName of qualfiedName,
* namespaceURI of namespaceURI.
*
*=================================================================*/
IXML_Element *
ixmlDocument_createElementNS( IN IXML_Document * doc,
IN const DOMString namespaceURI,
IN const DOMString qualifiedName )
{ {
IXML_Element *newElement = NULL; IXML_Element *newElement = NULL;
ixmlDocument_createElementNSEx(doc, namespaceURI, qualifiedName, &newElement); ixmlDocument_createElementNSEx( doc, namespaceURI, qualifiedName,
&newElement );
return newElement; return newElement;
} }
/*================================================================
IXML_NodeList *ixmlDocument_getElementsByTagName( * ixmlDocument_getElementsByTagName
IXML_Document *doc, * Returns a nodeList of all the Elements with a given tag name
const DOMString tagName) * in the order in which they are encountered in a preorder traversal
* of the document tree.
* External function.
* Parameters:
* tagName: the name of the tag to match on. The special value "*"
* matches all tags.
* Return Value:
* A new nodeList object containing all the matched Elements.
*
*=================================================================*/
IXML_NodeList *
ixmlDocument_getElementsByTagName( IN IXML_Document * doc,
IN const char *tagName )
{ {
IXML_NodeList *returnNodeList = NULL; IXML_NodeList *returnNodeList = NULL;
if (doc == NULL || tagName == NULL) { if( ( doc == NULL ) || ( tagName == NULL ) ) {
return NULL; return NULL;
} }
ixmlNode_getElementsByTagName((IXML_Node *)doc, tagName, &returnNodeList); ixmlNode_getElementsByTagName( ( IXML_Node * ) doc, tagName,
&returnNodeList );
return returnNodeList; return returnNodeList;
} }
/*================================================================
IXML_NodeList *ixmlDocument_getElementsByTagNameNS( * ixmlDocument_getElementsByTagNameNS
IXML_Document *doc, * Returns a nodeList of all the Elements with a given local name and
const DOMString namespaceURI, * namespace URI in the order in which they are encountered in a
const DOMString localName) * preorder traversal of the document tree.
* External function.
* Parameters:
* namespaceURI: the namespace of the elements to match on. The special
* value "*" matches all namespaces.
* localName: the local name of the elements to match on. The special
* value "*" matches all local names.
* Return Value:
* A new nodeList object containing all the matched Elements.
*
*=================================================================*/
IXML_NodeList *
ixmlDocument_getElementsByTagNameNS( IN IXML_Document * doc,
IN const DOMString namespaceURI,
IN const DOMString localName )
{ {
IXML_NodeList *returnNodeList = NULL; IXML_NodeList *returnNodeList = NULL;
if (doc == NULL || namespaceURI == NULL || localName == NULL) { if( ( doc == NULL ) || ( namespaceURI == NULL )
|| ( localName == NULL ) ) {
return NULL; return NULL;
} }
ixmlNode_getElementsByTagNameNS( ixmlNode_getElementsByTagNameNS( ( IXML_Node * ) doc, namespaceURI,
(IXML_Node *)doc, namespaceURI, localName, &returnNodeList); localName, &returnNodeList );
return returnNodeList; return returnNodeList;
} }
/*================================================================
IXML_Element *ixmlDocument_getElementById( * ixmlDocument_getElementById
IXML_Document *doc, * Returns the element whose ID is given by tagName. If no such
const DOMString tagName) * element exists, returns null.
* External function.
* Parameter:
* tagName: the tag name for an element.
* Return Values:
* The matching element.
*
*=================================================================*/
IXML_Element *
ixmlDocument_getElementById( IN IXML_Document * doc,
IN const DOMString tagName )
{ {
IXML_Element *rtElement = NULL; IXML_Element *rtElement = NULL;
IXML_Node *nodeptr = ( IXML_Node * ) doc; IXML_Node *nodeptr = ( IXML_Node * ) doc;
const char *name; const char *name;
if (nodeptr == NULL || tagName == NULL) { if( ( nodeptr == NULL ) || ( tagName == NULL ) ) {
return rtElement; return rtElement;
} }
@@ -558,26 +776,29 @@ IXML_Element *ixmlDocument_getElementById(
rtElement = ( IXML_Element * ) nodeptr; rtElement = ( IXML_Element * ) nodeptr;
return rtElement; return rtElement;
} else { } else {
rtElement = ixmlDocument_getElementById( rtElement = ixmlDocument_getElementById( ( IXML_Document * )
(IXML_Document *)ixmlNode_getFirstChild(nodeptr), ixmlNode_getFirstChild
( nodeptr ),
tagName ); tagName );
if( rtElement == NULL ) { if( rtElement == NULL ) {
rtElement = ixmlDocument_getElementById( rtElement = ixmlDocument_getElementById( ( IXML_Document
(IXML_Document *)ixmlNode_getNextSibling(nodeptr), * )
ixmlNode_getNextSibling
( nodeptr ),
tagName ); tagName );
} }
} }
} else { } else {
rtElement = ixmlDocument_getElementById( rtElement = ixmlDocument_getElementById( ( IXML_Document * )
(IXML_Document *)ixmlNode_getFirstChild(nodeptr), ixmlNode_getFirstChild
tagName); ( nodeptr ), tagName );
if( rtElement == NULL ) { if( rtElement == NULL ) {
rtElement = ixmlDocument_getElementById( rtElement = ixmlDocument_getElementById( ( IXML_Document * )
(IXML_Document *)ixmlNode_getNextSibling(nodeptr), ixmlNode_getNextSibling
( nodeptr ),
tagName ); tagName );
} }
} }
return rtElement; return rtElement;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,173 +1,77 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#ifndef IXML_MEMBUF_H
#define IXML_MEMBUF_H
/*!
* \file
*/
#ifndef _IXML_MEMBUF_H
#define _IXML_MEMBUF_H
#include <stdlib.h>
#include "ixml.h" #include "ixml.h"
#include <stdlib.h> /* for size_t */
#define MINVAL( a, b ) ( (a) < (b) ? (a) : (b) ) #define MINVAL( a, b ) ( (a) < (b) ? (a) : (b) )
#define MAXVAL( a, b ) ( (a) > (b) ? (a) : (b) ) #define MAXVAL( a, b ) ( (a) > (b) ? (a) : (b) )
#ifndef WIN32
#define UPNP_INLINE inline
#endif
#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 /////////////////////////
* \brief ixml_membuf initialization routine. //--------------------------------------------------
/*
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
*/ */
void ixml_membuf_init(
/*! [in,out] The memory buffer to initializa. */
ixml_membuf *m);
void ixml_membuf_init(INOUT ixml_membuf *m);
void ixml_membuf_destroy(INOUT ixml_membuf *m);
int ixml_membuf_assign(INOUT ixml_membuf *m, IN const void *buf,
IN size_t buf_len );
int ixml_membuf_assign_str(INOUT ixml_membuf *m, IN const char *c_str );
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 );
/*! #endif // _IXML_MEMBUF_H
* \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 */

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,65 +1,51 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* 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 );
@@ -87,21 +73,19 @@ static void copy_with_escape(
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;
@@ -113,6 +97,7 @@ static void ixmlPrintDomTreeRecursive(
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;
@@ -132,8 +117,8 @@ static void ixmlPrintDomTreeRecursive(
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:
@@ -141,6 +126,7 @@ static void ixmlPrintDomTreeRecursive(
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 ) { if( nodeptr->nextSibling != NULL ) {
ixml_membuf_append_str( buf, " " ); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf ); ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf );
@@ -150,69 +136,71 @@ static void ixmlPrintDomTreeRecursive(
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 ) { if( nodeptr->firstAttr != NULL ) {
ixml_membuf_append_str( buf, " " ); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf ); ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
} }
child = ixmlNode_getFirstChild( nodeptr ); child = ixmlNode_getFirstChild( nodeptr );
if (child != NULL && if( ( child != NULL )
ixmlNode_getNodeType(child) == eELEMENT_NODE) { && ( ixmlNode_getNodeType( child ) ==
eELEMENT_NODE ) ) {
ixml_membuf_append_str( buf, ">\r\n" ); 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.
* We don't want to print the Element and Attribute nodes' sibling.
* External function.
* *
* Element, and Attribute nodes are handled differently. We don't want to print *=================================================================*/
* the Element and Attribute nodes' sibling. void
*/ ixmlPrintDomTree( IN IXML_Node * nodeptr,
static void ixmlPrintDomTree( IN ixml_membuf * buf )
/*! [in] \todo documentation. */
IXML_Node *nodeptr,
/*! [in] \todo documentation. */
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:
@@ -230,21 +218,23 @@ static void ixmlPrintDomTree(
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 ) { if( nodeptr->firstAttr != NULL ) {
ixml_membuf_append_str( buf, " " ); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf ); ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
} }
child = ixmlNode_getFirstChild( nodeptr ); child = ixmlNode_getFirstChild( nodeptr );
if (child != NULL && if( ( child != NULL )
ixmlNode_getNodeType(child) == eELEMENT_NODE) { && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) {
ixml_membuf_append_str( buf, ">\r\n" ); 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, "</" );
@@ -253,31 +243,27 @@ static void ixmlPrintDomTree(
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.
* We don't want to print the Element and Attribute nodes' sibling.
* External function.
* *
* Element, and Attribute nodes are handled differently. We don't want to print *=================================================================*/
* the Element and Attribute nodes' sibling. void
*/ ixmlDomTreetoString( IN IXML_Node * nodeptr,
static void ixmlDomTreetoString( IN ixml_membuf * buf )
/*! [in] \todo documentation. */
IXML_Node *nodeptr,
/*! [in] \todo documentation. */
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;
} }
@@ -285,6 +271,7 @@ static void ixmlDomTreetoString(
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:
@@ -302,20 +289,23 @@ static void ixmlDomTreetoString(
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 ) { if( nodeptr->firstAttr != NULL ) {
ixml_membuf_append_str( buf, " " ); ixml_membuf_append_str( buf, " " );
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf ); ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
} }
child = ixmlNode_getFirstChild( nodeptr ); child = ixmlNode_getFirstChild( nodeptr );
if (child != NULL && if( ( child != NULL )
ixmlNode_getNodeType(child) == eELEMENT_NODE) { && ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) {
ixml_membuf_append_str( buf, ">" ); 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, "</" );
@@ -324,35 +314,54 @@ static void ixmlDomTreetoString(
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;
@@ -365,13 +374,20 @@ DOMString ixmlPrintDocument(IXML_Document *doc)
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;
@@ -381,12 +397,20 @@ DOMString ixmlPrintNode(IXML_Node *node)
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;
@@ -399,13 +423,20 @@ DOMString ixmlDocumenttoString(IXML_Document *doc)
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;
@@ -415,20 +446,35 @@ DOMString ixmlNodetoString(IXML_Node *node)
ixml_membuf_init( buf ); ixml_membuf_init( buf );
ixmlDomTreetoString( node, buf ); ixmlDomTreetoString( node, buf );
return buf->buf; return buf->buf;
} }
/*================================================================
void ixmlRelaxParser(char errorChar) * ixmlRelaxParser
* Makes the XML parser more tolerant to malformed text.
* External function.
*
*=================================================================*/
void
ixmlRelaxParser(char errorChar)
{ {
Parser_setErrorChar( errorChar ); Parser_setErrorChar( errorChar );
} }
int ixmlParseBufferEx(const char *buffer, IXML_Document **retDoc) /*================================================================
* ixmlParseBufferEx
* Parse xml file stored in buffer.
* External function.
*
*=================================================================*/
int
ixmlParseBufferEx( IN const char *buffer,
IXML_Document ** retDoc )
{ {
if (buffer == NULL || retDoc == NULL) {
if( ( buffer == NULL ) || ( retDoc == NULL ) ) {
return IXML_INVALID_PARAMETER; return IXML_INVALID_PARAMETER;
} }
@@ -439,31 +485,47 @@ int ixmlParseBufferEx(const char *buffer, IXML_Document **retDoc)
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,87 +1,79 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* 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 * returns:
* \li UPNP_E_SUCCESS * UPNP_E_SUCCESS
* \li UPNP_E_OUTOF_MEMORY * UPNP_E_OUTOF_MEMORY
*/ *
static int ixml_membuf_set_size( *=================================================================*/
/*! [in,out] The memory buffer. */ static int
INOUT ixml_membuf *m, ixml_membuf_set_size( INOUT ixml_membuf * m,
/*! [in] The new lenght. */
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;
} }
@@ -89,22 +81,27 @@ static int ixml_membuf_set_size(
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 );
@@ -114,8 +111,13 @@ 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;
@@ -125,11 +127,15 @@ void ixml_membuf_destroy(ixml_membuf *m)
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;
@@ -145,28 +151,35 @@ int ixml_membuf_assign(
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, *
*
*=================================================================*/
int
ixml_membuf_append( INOUT ixml_membuf * m,
IN const void *buf ) IN const void *buf )
{ {
assert( m != NULL ); assert( m != NULL );
@@ -174,45 +187,50 @@ int ixml_membuf_append(
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, *
*
*=================================================================*/
int
ixml_membuf_append_str( INOUT ixml_membuf * m,
IN const char *c_str ) 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,62 +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.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
/*!
* \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 IXML_NamedNodeMap *nnMap,
/*! [in] The name of the item to find. */
IN const char *name ) 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;
} }
@@ -65,6 +56,7 @@ static unsigned long ixmlNamedNodeMap_getItemNumber(
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,22 +64,39 @@ 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;
} }
@@ -95,13 +104,26 @@ IXML_Node *ixmlNamedNodeMap_getNamedItem(
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;
@@ -123,8 +145,16 @@ IXML_Node *ixmlNamedNodeMap_item(
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;
@@ -135,12 +165,17 @@ unsigned long ixmlNamedNodeMap_getLength(IXML_NamedNodeMap *nnMap)
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;
@@ -151,27 +186,38 @@ void ixmlNamedNodeMap_free(IXML_NamedNodeMap *nnMap)
} }
} }
/*================================================================
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 =
( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );
if( *nnMap == NULL ) { if( *nnMap == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
ixmlNamedNodeMap_init( *nnMap ); ixmlNamedNodeMap_init( *nnMap );
} }
if( ( *nnMap )->nodeItem == NULL ) { if( ( *nnMap )->nodeItem == NULL ) {
( *nnMap )->nodeItem = add; ( *nnMap )->nodeItem = add;
} else { } else {
@@ -181,7 +227,9 @@ int ixmlNamedNodeMap_addToNamedNodeMap(
p = traverse; p = traverse;
traverse = traverse->next; traverse = traverse->next;
} }
newItem = (IXML_NamedNodeMap *)malloc(sizeof (IXML_NamedNodeMap));
newItem =
( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );
if( newItem == NULL ) { if( newItem == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
@@ -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,57 +1,61 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* 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
* 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 ) unsigned long index )
{ {
IXML_NodeList *next; IXML_NodeList *next;
@@ -71,19 +75,24 @@ IXML_Node *ixmlNodeList_item(
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 );
@@ -92,8 +101,8 @@ int ixmlNodeList_addToNodeList(
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;
@@ -111,7 +120,8 @@ int ixmlNodeList_addToNodeList(
traverse = traverse->next; traverse = traverse->next;
} }
newListItem = (IXML_NodeList *)malloc(sizeof (IXML_NodeList)); newListItem =
( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) );
if( newListItem == NULL ) { if( newListItem == NULL ) {
return IXML_INSUFFICIENT_MEMORY; return IXML_INSUFFICIENT_MEMORY;
} }
@@ -123,8 +133,15 @@ 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;
@@ -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;
} }
}
}

0
ixml/test/test_document.sh Executable file → Normal file
View File

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.4.2
Summary: Universal Plug and Play (UPnP) SDK Summary: Universal Plug and Play (UPnP) SDK
Name: libupnp Name: libupnp
Release: 1%{?dist} Release: 1%{?dist}
@@ -77,12 +77,6 @@ make install DESTDIR=$RPM_BUILD_ROOT
rm -rf %{buildroot} rm -rf %{buildroot}
%changelog %changelog
* Mon Nov 19 2007 Marcelo Jimenez <mroberto@users.sourceforge.net> - 1.6.2-1
- Update to version 1.6.2
* Mon Nov 19 2007 Marcelo Jimenez <mroberto@users.sourceforge.net> - 1.4.7-1
- Update to version 1.4.7
* Fri Feb 02 2007 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.2-1 * Fri Feb 02 2007 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.2-1
- Update to version 1.4.2 - Update to version 1.4.2

View File

@@ -41,7 +41,7 @@ AC_DEFUN([RT_BOOL_ARG_ENABLE],[
)]) )])
test "x$enable_[$1]" != [x]m4_if([$2],[yes],[no],[yes]) dnl test "x$enable_[$1]" != [x]m4_if([$2],[yes],[no],[yes]) dnl
&& enable_[]Name=[$2] && enable_[]Name=[$2]
AC_MSG_RESULT($enable_[]Name) AC_MSG_RESULT($enable_[]Name)dnl
AM_CONDITIONAL([ENABLE_]NAME, test x"$enable_[]Name" = xyes) AM_CONDITIONAL([ENABLE_]NAME, test x"$enable_[]Name" = xyes)
dnl dnl
m4_popdef([NAME])dnl m4_popdef([NAME])dnl

View File

@@ -6,6 +6,7 @@
# #
AM_CPPFLAGS = -I$(srcdir)/inc -I$(srcdir)/src/inc AM_CPPFLAGS = -I$(srcdir)/inc -I$(srcdir)/src/inc
AM_CFLAGS = $(PTHREAD_CFLAGS)
if ENABLE_DEBUG if ENABLE_DEBUG
AM_CPPFLAGS += -DDEBUG -DSTATS AM_CPPFLAGS += -DDEBUG -DSTATS
@@ -20,11 +21,12 @@ libthreadutil_la_LDFLAGS = -version-info $(LT_VERSION_THREADUTIL)
libthreadutil_la_SOURCES = \ libthreadutil_la_SOURCES = \
src/FreeList.c src/LinkedList.c \ src/FreeList.c src/LinkedList.c \
src/ThreadPool.c src/TimerThread.c src/ThreadPool.c src/TimerThread.c \
src/iasnprintf.c
upnpincludedir = $(includedir)/upnp upnpincludedir = $(includedir)/upnp
upnpinclude_HEADERS = \ upnpinclude_HEADERS = \
inc/FreeList.h inc/LinkedList.h \ inc/FreeList.h inc/LinkedList.h \
inc/ThreadPool.h inc/TimerThread.h \ inc/ThreadPool.h inc/TimerThread.h \
inc/ithread.h inc/iasnprintf.h inc/ithread.h

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,70 @@
* *
******************************************************************************/ ******************************************************************************/
#ifndef THREADPOOL_H #ifndef THREADPOOL_H
#define THREADPOOL_H #define THREADPOOL_H
/*!
* \file
*/
#include "FreeList.h"
#include "ithread.h"
#include "LinkedList.h"
#include "UpnpInet.h"
#include "UpnpGlobal.h" /* for UPNP_INLINE, EXPORT_SPEC */
#include <errno.h>
#ifdef WIN32
#include <time.h>
struct timezone
{
int tz_minuteswest; /* minutes W of Greenwich */
int tz_dsttime; /* type of dst correction */
};
int gettimeofday(struct timeval *tv, struct timezone *tz);
#else /* WIN32 */
#include <sys/param.h>
#include <sys/time.h> /* for gettimeofday() */
#if defined(__OSX__) || defined(__APPLE__) || defined(__NetBSD__)
#include <sys/resource.h> /* for setpriority() */
#endif
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/* Size of job free list */
/*! Size of job free list */
#define JOBFREELISTSIZE 100 #define JOBFREELISTSIZE 100
#define INFINITE_THREADS -1 #define INFINITE_THREADS -1
#define EMAXTHREADS (-8 & 1<<29) #define EMAXTHREADS (-8 & 1<<29)
/* Invalid Policy */
/*! Invalid Policy */
#define INVALID_POLICY (-9 & 1<<29) #define INVALID_POLICY (-9 & 1<<29)
/* Invalid JOB Id */
/*! Invalid JOB Id */
#define INVALID_JOB_ID (-2 & 1<<29) #define INVALID_JOB_ID (-2 & 1<<29)
typedef enum duration {SHORT_TERM,PERSISTENT} Duration;
typedef enum duration { typedef enum priority {LOW_PRIORITY,
SHORT_TERM,
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 */
#define STATS 1 /* always include stats because code change is minimal */
/*! default priority used by TPJobInit */ /* Statistics */
#define DEFAULT_PRIORITY MED_PRIORITY #ifdef WIN32 /* TODO: check why STATSONLY fails during compilation */
#undef STATS
#endif
/*! 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
#ifdef STATS
#define STATSONLY(x) x
#else
#define STATSONLY(x)
#endif
#ifdef _DEBUG #ifdef _DEBUG
#define DEBUG 1 #define DEBUG 1
#endif #endif
#include "LinkedList.h"
#include <sys/timeb.h>
#include "FreeList.h"
#include "ithread.h"
#include <errno.h>
#include <sys/timeb.h>
#define EXPORT
typedef int PolicyType; typedef int PolicyType;
#define DEFAULT_POLICY SCHED_OTHER #define DEFAULT_POLICY SCHED_OTHER
#define DEFAULT_SCHED_PARAM 0 /* default priority */
/*! Default priority */
#define DEFAULT_SCHED_PARAM 0
/**************************************************************************** /****************************************************************************
* Name: free_routine * Name: free_routine
@@ -166,7 +102,6 @@ typedef int PolicyType;
*****************************************************************************/ *****************************************************************************/
typedef void (*free_routine)(void *arg); typedef void (*free_routine)(void *arg);
/**************************************************************************** /****************************************************************************
* Name: ThreadPoolAttr * Name: ThreadPoolAttr
* *
@@ -176,31 +111,28 @@ typedef void (*free_routine)(void *arg);
*****************************************************************************/ *****************************************************************************/
typedef struct THREADPOOLATTR typedef struct THREADPOOLATTR
{ {
/* minThreads, ThreadPool will always maintain at least this many threads */ int minThreads; /* minThreads, ThreadPool will always maintain at least
int minThreads; this many threads */
/* maxThreads, ThreadPool will never have more than this number of threads */ int maxThreads; /* maxThreads, ThreadPool will never have more than this
int maxThreads; number of threads */
/* maxIdleTime (in milliseconds) this is the maximum time a thread will int maxIdleTime; /* maxIdleTime (in milliseconds)
* remain idle before dying */ this is the maximum time a thread will remain idle
int maxIdleTime; before dying */
/* jobs per thread to maintain */ int jobsPerThread; /* jobs per thread to maintain */
int jobsPerThread;
/* maximum number of jobs that can be queued totally. */ int maxJobsTotal; /* maximum number of jobs that can be queued totally. */
int maxJobsTotal;
/* the time a low priority or med priority job waits before getting bumped int starvationTime; /* the time a low priority or med priority
* up a priority (in milliseconds) */ job waits before getting bumped
int starvationTime; up a priority (in milliseconds) */
PolicyType schedPolicy; /* scheduling policy to use */
/* scheduling policy to use */
PolicyType schedPolicy;
} ThreadPoolAttr; } ThreadPoolAttr;
/**************************************************************************** /****************************************************************************
* Name: ThreadPool * Name: ThreadPool
* *
@@ -212,18 +144,20 @@ typedef struct THREADPOOLJOB
start_routine func; start_routine func;
void *arg; void *arg;
free_routine free_func; free_routine free_func;
struct timeval requestTime; struct timeb requestTime;
int priority; int priority;
int jobId; int jobId;
} ThreadPoolJob; } ThreadPoolJob;
/**************************************************************************** /****************************************************************************
* Name: ThreadPoolStats * Name: ThreadPoolStats
* *
* Description: * Description:
* Structure to hold statistics * Structure to hold statistics
*****************************************************************************/ *****************************************************************************/
#ifdef STATS
typedef struct TPOOLSTATS typedef struct TPOOLSTATS
{ {
double totalTimeHQ; double totalTimeHQ;
@@ -247,13 +181,18 @@ typedef struct TPOOLSTATS
int currentJobsMQ; int currentJobsMQ;
}ThreadPoolStats; }ThreadPoolStats;
#endif
/*!
* \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,29 +201,36 @@ 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 */
#ifdef STATS
/* statistics */ /* statistics */
ThreadPoolStats stats; ThreadPoolStats stats;
#endif
} ThreadPool; } ThreadPool;
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolInit * Function: ThreadPoolInit
* *
@@ -321,8 +267,8 @@ typedef struct THREADPOOL
* INVALID_POLICY if schedPolicy can't be set * INVALID_POLICY if schedPolicy can't be set
* EMAXTHREADS if minimum threads is greater than maximum threads * EMAXTHREADS if minimum threads is greater than maximum threads
*****************************************************************************/ *****************************************************************************/
int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr); int ThreadPoolInit(ThreadPool *tp,
ThreadPoolAttr *attr);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolAddPersistent * Function: ThreadPoolAddPersistent
@@ -344,8 +290,9 @@ int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr);
* EOUTOFMEM not enough memory to add job. * EOUTOFMEM not enough memory to add job.
* EMAXTHREADS not enough threads to add persistent job. * EMAXTHREADS not enough threads to add persistent job.
*****************************************************************************/ *****************************************************************************/
int ThreadPoolAddPersistent(ThreadPool*tp, ThreadPoolJob *job, int *jobId); int ThreadPoolAddPersistent (ThreadPool*tp,
ThreadPoolJob *job,
int *jobId);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolGetAttr * Function: ThreadPoolGetAttr
@@ -360,9 +307,8 @@ int ThreadPoolAddPersistent(ThreadPool*tp, ThreadPoolJob *job, int *jobId);
* 0 on success, nonzero on failure * 0 on success, nonzero on failure
* Always returns 0. * Always returns 0.
*****************************************************************************/ *****************************************************************************/
int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out); int ThreadPoolGetAttr(ThreadPool *tp,
ThreadPoolAttr *out);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolSetAttr * Function: ThreadPoolSetAttr
* *
@@ -376,8 +322,8 @@ int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out);
* 0 on success, nonzero on failure * 0 on success, nonzero on failure
* Returns INVALID_POLICY if policy can not be set. * Returns INVALID_POLICY if policy can not be set.
*****************************************************************************/ *****************************************************************************/
int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr); int ThreadPoolSetAttr(ThreadPool *tp,
ThreadPoolAttr *attr);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolAdd * Function: ThreadPoolAdd
@@ -396,8 +342,9 @@ int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr);
* 0 on success, nonzero on failure * 0 on success, nonzero on failure
* EOUTOFMEM if not enough memory to add job. * EOUTOFMEM if not enough memory to add job.
*****************************************************************************/ *****************************************************************************/
int ThreadPoolAdd (ThreadPool*tp, ThreadPoolJob *job, int *jobId); int ThreadPoolAdd (ThreadPool*tp,
ThreadPoolJob *job,
int *jobId);
/**************************************************************************** /****************************************************************************
* Function: ThreadPoolRemove * Function: ThreadPoolRemove
@@ -414,7 +361,8 @@ int ThreadPoolAdd (ThreadPool*tp, ThreadPoolJob *job, int *jobId);
* 0 on success, nonzero on failure. * 0 on success, nonzero on failure.
* INVALID_JOB_ID if job not found. * INVALID_JOB_ID if job not found.
*****************************************************************************/ *****************************************************************************/
int ThreadPoolRemove(ThreadPool *tp, int jobId, ThreadPoolJob *out); int ThreadPoolRemove(ThreadPool *tp,
int jobId, ThreadPoolJob *out);
@@ -451,7 +399,6 @@ int ThreadPoolShutdown(ThreadPool *tp);
*****************************************************************************/ *****************************************************************************/
int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg); int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg);
/**************************************************************************** /****************************************************************************
* Function: TPJobSetPriority * Function: TPJobSetPriority
* *
@@ -465,7 +412,6 @@ int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg);
*****************************************************************************/ *****************************************************************************/
int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority); int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority);
/**************************************************************************** /****************************************************************************
* Function: TPJobSetFreeFunction * Function: TPJobSetFreeFunction
* *
@@ -493,7 +439,6 @@ int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func);
*****************************************************************************/ *****************************************************************************/
int TPAttrInit(ThreadPoolAttr *attr); int TPAttrInit(ThreadPoolAttr *attr);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetMaxThreads * Function: TPAttrSetMaxThreads
* *
@@ -507,7 +452,6 @@ int TPAttrInit(ThreadPoolAttr *attr);
*****************************************************************************/ *****************************************************************************/
int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads); int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads);
/**************************************************************************** /****************************************************************************
* Function: TPAttrSetMinThreads * Function: TPAttrSetMinThreads
* *
@@ -521,7 +465,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 +477,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 +490,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 +503,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 +530,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 +544,14 @@ int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal);
* Always returns 0. * Always returns 0.
*****************************************************************************/ *****************************************************************************/
#ifdef STATS #ifdef STATS
EXPORT_SPEC int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats); EXPORT int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats);
EXPORT_SPEC void ThreadPoolPrintStats(ThreadPoolStats *stats); EXPORT void ThreadPoolPrintStats(ThreadPoolStats *stats);
#else
static UPNP_INLINE int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats) {}
static UPNP_INLINE void ThreadPoolPrintStats(ThreadPoolStats *stats) {}
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* ThreadPool */
#endif /* THREADPOOL_H */

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

@@ -0,0 +1,66 @@
/*******************************************************************************
*
* Copyright (c) 2000-2003 Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
#include <stdarg.h>
#define EXPORT
#ifdef __cplusplus
extern "C" {
#endif
/**
* Allocates enough memory for the
* Formatted string, up to max
* specified.
* With max set to -1, allocates
* as much size as needed.
* Memory must be freed using free.
*/
EXPORT int iasnprintf(char **ret,
int incr,
int max,
const char * fmt, ...)
#ifndef SPARC_SOLARIS
#if (__GNUC__ >= 3)
__attribute__((format (__printf__, 4, 5)));
#else
;
#endif
EXPORT void iasnprintfFree(char *);
#else
;
#endif
#ifdef __cplusplus
}
#endif

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
@@ -72,16 +52,11 @@ extern "C" {
#define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL
#define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK
#else /* PTHREAD_MUTEX_RECURSIVE */ #else
#define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_FAST_NP #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_FAST_NP
#define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE_NP #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE_NP
#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP
#endif /* PTHREAD_MUTEX_RECURSIVE */ #endif
#define ITHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
#define ITHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
#define ITHREAD_CANCELED PTHREAD_CANCELED #define ITHREAD_CANCELED PTHREAD_CANCELED
@@ -96,7 +71,6 @@ extern "C" {
***************************************************************************/ ***************************************************************************/
typedef pthread_t ithread_t; typedef pthread_t ithread_t;
/**************************************************************************** /****************************************************************************
* Name: ithread_attr_t * Name: ithread_attr_t
* *
@@ -162,117 +136,6 @@ typedef pthread_mutex_t ithread_mutex_t;
***************************************************************************/ ***************************************************************************/
typedef pthread_condattr_t ithread_condattr_t; typedef pthread_condattr_t ithread_condattr_t;
/****************************************************************************
* Name: ithread_rwlockattr_t
*
* Description:
* Mutex attribute.
* typedef to pthread_rwlockattr_t
* Internal Use Only
***************************************************************************/
typedef pthread_rwlockattr_t ithread_rwlockattr_t;
/****************************************************************************
* Name: ithread_rwlock_t
*
* Description:
* Condition attribute.
* typedef to pthread_rwlock_t
* Internal Use Only
***************************************************************************/
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
* *
@@ -287,8 +150,8 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* Always returns 0. * Always returns 0.
* See man page for pthread_mutexattr_init * See man page for pthread_mutexattr_init
***************************************************************************/ ***************************************************************************/
#define ithread_mutexattr_init pthread_mutexattr_init
#define ithread_mutexattr_init pthread_mutexattr_init
/**************************************************************************** /****************************************************************************
* Function: ithread_mutexattr_destroy * Function: ithread_mutexattr_destroy
@@ -317,7 +180,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* ITHREAD_MUTEX_ERRORCHECK_NP * ITHREAD_MUTEX_ERRORCHECK_NP
* *
* Parameters: * Parameters:
* ithread_mutexattr_t * attr (must be valid non NULL pointer to * ithread_mutexattr_t * mutex (must be valid non NULL pointer to
* ithread_mutexattr_t) * ithread_mutexattr_t)
* int kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP * int kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP
* or ITHREAD_MUTEX_ERRORCHECK_NP) * or ITHREAD_MUTEX_ERRORCHECK_NP)
@@ -342,7 +205,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* ITHREAD_MUTEX_ERRORCHECK_NP * ITHREAD_MUTEX_ERRORCHECK_NP
* *
* Parameters: * Parameters:
* ithread_mutexattr_t * attr (must be valid non NULL pointer to * ithread_mutexattr_t * mutex (must be valid non NULL pointer to
* pthread_mutexattr_t) * pthread_mutexattr_t)
* int *kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP * int *kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP
* or ITHREAD_MUTEX_ERRORCHECK_NP) * or ITHREAD_MUTEX_ERRORCHECK_NP)
@@ -375,7 +238,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
*****************************************************************************/ *****************************************************************************/
#define ithread_mutex_init pthread_mutex_init #define ithread_mutex_init pthread_mutex_init
/**************************************************************************** /****************************************************************************
* Function: ithread_mutex_lock * Function: ithread_mutex_lock
* *
@@ -430,169 +292,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
#define ithread_mutex_destroy pthread_mutex_destroy #define ithread_mutex_destroy pthread_mutex_destroy
/****************************************************************************
* Function: ithread_rwlockattr_init
*
* Description:
* Initializes a rwlock attribute variable to default values.
* Parameters:
* const ithread_rwlockattr_init *attr (must be valid non NULL pointer to
* pthread_rwlockattr_t)
* Returns:
* 0 on success, Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlockattr_init
***************************************************************************/
#define ithread_rwlockattr_init pthread_rwlockattr_init
/****************************************************************************
* Function: ithread_rwlockattr_destroy
*
* Description:
* Releases any resources held by the rwlock attribute.
* Parameters:
* ithread_rwlockattr_t *attr (must be valid non NULL pointer to
* pthread_rwlockattr_t)
* Returns:
* 0 on success, Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlockattr_destroy
***************************************************************************/
#define ithread_rwlockattr_destroy pthread_rwlockattr_destroy
/****************************************************************************
* Function: ithread_rwlockatttr_setpshared
*
* Description:
* Sets the rwlock type in the attribute.
* Valid types are: ITHREAD_PROCESS_PRIVATE
* ITHREAD_PROCESS_SHARED
*
* Parameters:
* ithread_rwlockattr_t * attr (must be valid non NULL pointer to
* ithread_rwlockattr_t)
* int kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED)
*
* Returns:
* 0 on success. Nonzero on failure.
* Returns EINVAL if the kind is not supported.
* See man page for pthread_rwlockattr_setkind_np
*****************************************************************************/
#define ithread_rwlockatttr_setpshared pthread_rwlockatttr_setpshared
/****************************************************************************
* Function: ithread_rwlockatttr_getpshared
*
* Description:
* Gets the rwlock type in the attribute.
* Valid types are: ITHREAD_PROCESS_PRIVATE
* ITHREAD_PROCESS_SHARED
*
* Parameters:
* ithread_rwlockattr_t * attr (must be valid non NULL pointer to
* pthread_rwlockattr_t)
* int *kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED)
*
* Returns:
* 0 on success. Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlockatttr_getpshared
*****************************************************************************/
#define ithread_rwlockatttr_getpshared pthread_rwlockatttr_getpshared
/****************************************************************************
* Function: ithread_rwlock_init
*
* Description:
* Initializes rwlock.
* Must be called before use.
*
* Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* const ithread_rwlockattr_t *rwlock_attr
* Returns:
* 0 on success, Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlock_init
*****************************************************************************/
#define ithread_rwlock_init pthread_rwlock_init
/****************************************************************************
* Function: ithread_rwlock_rdlock
*
* Description:
* Locks rwlock for reading.
* Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized.
*
* Returns:
* 0 on success, Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlock_rdlock
*****************************************************************************/
#define ithread_rwlock_rdlock pthread_rwlock_rdlock
/****************************************************************************
* Function: ithread_rwlock_wrlock
*
* Description:
* Locks rwlock for writting.
* Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized.
*
* Returns:
* 0 on success, Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlock_wrlock
*****************************************************************************/
#define ithread_rwlock_wrlock pthread_rwlock_wrlock
/****************************************************************************
* Function: ithread_rwlock_unlock
*
* Description:
* Unlocks rwlock.
*
* Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized.
*
* Returns:
* 0 on success, Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlock_unlock
*****************************************************************************/
#define ithread_rwlock_unlock pthread_rwlock_unlock
/****************************************************************************
* Function: ithread_rwlock_destroy
*
* Description:
* Releases any resources held by the rwlock.
* rwlock can no longer be used after this call.
* rwlock is only destroyed when there are no longer any threads waiting on it.
* rwlock cannot be destroyed if it is locked.
* Parameters:
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
* rwlock must be initialized.
* Returns:
* 0 on success. Nonzero on failure.
* Always returns 0.
* See man page for pthread_rwlock_destroy
*****************************************************************************/
#define ithread_rwlock_destroy pthread_rwlock_destroy
/**************************************************************************** /****************************************************************************
* Function: ithread_cond_init * Function: ithread_cond_init
* *
@@ -609,6 +308,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
#define ithread_cond_init pthread_cond_init #define ithread_cond_init pthread_cond_init
/**************************************************************************** /****************************************************************************
* Function: ithread_cond_signal * Function: ithread_cond_signal
* *
@@ -668,18 +368,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
@@ -751,7 +455,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
***************************************************************************/ ***************************************************************************/
#define ithread_exit pthread_exit #define ithread_exit pthread_exit
/**************************************************************************** /****************************************************************************
* Function: ithread_get_current_thread_id * Function: ithread_get_current_thread_id
* *
@@ -775,7 +478,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
***************************************************************************/ ***************************************************************************/
#define ithread_self pthread_self #define ithread_self pthread_self
/**************************************************************************** /****************************************************************************
* Function: ithread_detach * Function: ithread_detach
* *
@@ -789,7 +491,6 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
***************************************************************************/ ***************************************************************************/
#define ithread_detach pthread_detach #define ithread_detach pthread_detach
/**************************************************************************** /****************************************************************************
* Function: ithread_join * Function: ithread_join
* *
@@ -809,6 +510,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
#define ithread_join pthread_join #define ithread_join pthread_join
/**************************************************************************** /****************************************************************************
* Function: isleep * Function: isleep
* *
@@ -822,12 +524,7 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* 0 on success, Nonzero on failure. * 0 on success, Nonzero on failure.
* See man page for sleep (man 3 sleep) * See man page for sleep (man 3 sleep)
*****************************************************************************/ *****************************************************************************/
#ifdef WIN32
#define isleep(x) Sleep((x)*1000)
#else
#define isleep sleep #define isleep sleep
#endif
/**************************************************************************** /****************************************************************************
* Function: isleep * Function: isleep
@@ -842,10 +539,21 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
* 0 on success, Nonzero on failure. * 0 on success, Nonzero on failure.
* See man page for sleep (man 3 sleep) * See man page for sleep (man 3 sleep)
*****************************************************************************/ *****************************************************************************/
#ifdef WIN32
#define imillisleep Sleep
#else
#define imillisleep(x) usleep(1000*x) #define imillisleep(x) usleep(1000*x)
#ifdef WIN32
#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
#define EXPORT_SPEC
#endif #endif
@@ -854,11 +562,9 @@ static UPNP_INLINE int ithread_cleanup_thread(void) {
EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind); EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind);
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* ITHREADH */
#endif /* ITHREAD_H */

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"
#ifdef WIN32
/* Do not #include <sys/param.h> */
#else
#include <sys/param.h> #include <sys/param.h>
#endif #if (defined(BSD) && BSD >= 199306)
#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*/ *****************************************************************************/
static void
FreeTimerEvent( TimerThread * timer,
TimerEvent * event ) TimerEvent * event )
{ {
assert( timer != NULL ); assert( timer != NULL );
FreeListFree( &timer->freeEvents, event ); 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,41 +110,53 @@ 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
*
*****************************************************************************/
static int
CalculateEventTime( time_t * timeout,
TimeoutType type ) TimeoutType type )
{ {
time_t now; time_t now;
@@ -158,21 +175,28 @@ 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.
* priority - priority of job.
* 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, ThreadPoolJob * job,
/*! [in] . */
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,9 +290,32 @@ 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,
@@ -330,9 +394,26 @@ 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 )
{ {
@@ -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;
} }

153
threadutil/src/iasnprintf.c Normal file
View File

@@ -0,0 +1,153 @@
///////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2003 Intel Corporation
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither name of Intel Corporation nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////
#include <stdarg.h>
#include <assert.h>
#include <sys/param.h>
#if (defined(BSD) && BSD >= 199306)
#include <stdlib.h>
#else
#include <malloc.h>
#endif
#include <stdio.h>
#include "iasnprintf.h"
#ifndef NULL
#define NULL 0
#endif
#ifdef WIN32
#define vsnprintf _vsnprintf
#endif
/**
* Allocates enough memory for the
* Formatted string, up to max
* specified.
* With max set to -1, it allocates as
* much size as needed.
* Memory must be freed using free.
*/
int
iasnprintf( char **ret,
int incr,
int max,
const char *fmt,
... )
{
int size = incr;
int retc = 0;
va_list ap;
char *temp = NULL;
assert( ret );
assert( fmt );
( *ret ) = ( char * )malloc( incr );
if( ( *ret ) == NULL ) return -1;
while( 1 ) {
va_start( ap, fmt );
retc = vsnprintf( ( *ret ), size, fmt, ap );
va_end( ap );
if( retc < 0 ) {
//size not big enough
//and vsnprintf does NOT return the
//necessary number of bytes
if( ( max != -1 ) && ( size == max ) ) //max reached
{
break;
}
incr *= 2; //increase increment
//increase size and try again
if( ( max != -1 ) && ( ( size + incr ) > max ) ) {
incr = ( max - size );
}
temp = ( char * )realloc( ( *ret ), size + incr );
if( temp == NULL ) {
break;
}
size += incr;
( *ret ) = temp;
} else {
if( ( retc + 1 ) > size ) {
//size not big enough
//and vsnprintf
//returns the necessary
//number of bytes
if( ( max != -1 ) && ( retc + 1 > max ) ) {
retc = -1;
break;
}
temp = ( char * )realloc( ( *ret ), retc + 1 );
if( temp == NULL ) {
retc = -1;
break;
}
size = retc + 1;
( *ret ) = temp; //size increased try again
} else if( ( retc + 1 ) < size ) {
//size is bigger than needed
//try and reallocate smaller
temp = ( char * )realloc( ( *ret ), retc + 1 );
if( temp != NULL ) {
( *ret ) = temp;
}
break;
} else //size is just right, exit
{
break;
}
}
}
if( retc < 0 ) {
free( ( *ret ) );
( *ret ) = NULL;
}
return retc;
}
void
iasnprintfFree( char *fChar )
{
free( fChar );
fChar = NULL;
}

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
@@ -11,6 +11,10 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/threadutil/inc \ -I$(top_srcdir)/threadutil/inc \
-I$(top_srcdir)/ixml/inc -I$(top_srcdir)/ixml/inc
AM_CFLAGS = $(PTHREAD_CFLAGS)
AM_LDFLAGS = $(PTHREAD_LIBS)
LDADD = \ LDADD = \
libupnp.la \ libupnp.la \
$(top_builddir)/threadutil/libthreadutil.la \ $(top_builddir)/threadutil/libthreadutil.la \
@@ -19,20 +23,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 +45,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 +76,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 +93,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 +114,10 @@ libupnp_la_SOURCES += \
src/gena/gena_callback2.c src/gena/gena_callback2.c
# api # api
libupnp_la_SOURCES += \ libupnp_la_SOURCES += src/api/upnpapi.c
src/api/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 +134,6 @@ libupnp_la_SOURCES += \
libupnp_la_SOURCES += src/urlconfig/urlconfig.c libupnp_la_SOURCES += src/urlconfig/urlconfig.c
# inet_pton (needed on Win32, compiles to nothing elsewhere)
libupnp_la_SOURCES += \
src/inet_pton.c \
src/inc/inet_pton.h
# check / distcheck tests # check / distcheck tests
check_PROGRAMS = test_init check_PROGRAMS = test_init
TESTS = test_init TESTS = test_init
@@ -173,7 +142,8 @@ test_init_SOURCES = test/test_init.c
EXTRA_DIST = \ EXTRA_DIST = \
LICENSE \ LICENSE \
m4/libupnp.m4 \ src/inc/inet_pton.h \
src/inet_pton.c \
src/win_dll.c src/win_dll.c

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,98 +198,96 @@ static UPNP_INLINE FILE *UpnpGetDebugFile(Upnp_LogLevel level, Dbg_Module module
#endif #endif
/*! /***************************************************************************
* \brief Returns true if debug output should be done in this module. * Function : DebugAtThisLevel
* *
* \return Nonzero value if true, zero if false. * Parameters:
*/ * IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
*
* Description:
* This functions returns true if debug output should be done in this
* module.
*
* Returns: int
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
int DebugAtThisLevel( int DebugAtThisLevel(
/*! [in] The level of the debug logging. It will decide whether debug IN Upnp_LogLevel DLevel,
* statement will go to standard output, or any of the log files. */ IN Dbg_Module Module);
Upnp_LogLevel DLevel,
/*! [in] Debug will go in the name of this module. */
Dbg_Module Module);
#else #else
static UPNP_INLINE int DebugAtThisLevel( static UPNP_INLINE int DebugAtThisLevel(
Upnp_LogLevel DLevel, IN Upnp_LogLevel DLevel,
Dbg_Module Module) IN Dbg_Module Module) { return 0; }
{
return 0;
}
#endif #endif
/*! /***************************************************************************
* \brief Prints the debug statement either on the standard output or log file * Function : UpnpPrintf
* along with the information from where this debug statement is coming. *
*/ * Parameters:
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
* IN char *DbgFileName: Name of the file from where debug statement is
* coming
* IN int DbgLineNo : Line number of the file from where debug statement
* is coming
* IN char * FmtStr, ...: Variable number of arguments that will go
* in the debug statement
*
* Description:
* This functions prints the debug statement either on the startdard
* output or log file along with the information from where this
* debug statement is coming
* Returns: void
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void UpnpPrintf( void UpnpPrintf(
/*! [in] The level of the debug logging. It will decide whether debug
* statement will go to standard output, or any of the log files. */
Upnp_LogLevel DLevel, Upnp_LogLevel DLevel,
/*! [in] debug will go in the name of this module. */
Dbg_Module Module, Dbg_Module Module,
/*! [in] Name of the file from where debug statement is coming. */
const char* DbgFileName, const char* DbgFileName,
/*! [in] Line number of the file from where debug statement is coming. */
int DbgLineNo, int DbgLineNo,
/*! [in] Printf like format specification. */
const char* FmtStr, const char* FmtStr,
/*! [in] Printf like Variable number of arguments that will go in the debug
* statement. */
...) ...)
#if (__GNUC__ >= 3) #if (__GNUC__ >= 3)
/* This enables printf like format checking by the compiler */ /* This enables printf like format checking by the compiler */
__attribute__((format (__printf__, 5, 6))) __attribute__((format (__printf__, 5, 6)))
#endif #endif
; ;
#else /* DEBUG */ #else
static UPNP_INLINE void UpnpPrintf( static UPNP_INLINE void UpnpPrintf(
Upnp_LogLevel DLevel, Upnp_LogLevel DLevel,
Dbg_Module Module, Dbg_Module Module,
const char* DbgFileName, const char* DbgFileName,
int DbgLineNo, int DbgLineNo,
const char* FmtStr, const char* FmtStr,
...) ...) {}
{
}
#endif /* DEBUG */
/*!
* \brief Writes the file name and file number from where debug statement is
* coming to the log file.
*/
#ifdef DEBUG
void UpnpDisplayFileAndLine(
/*! [in] File descriptor where line number and file name will be written. */
FILE *fd,
/*! [in] Name of the file. */
const char *DbgFileName,
/*! [in] Line number of the file. */
int DbgLineNo);
#else
static UPNP_INLINE void UpnpDisplayFileAndLine(
FILE *fd,
const char *DbgFileName,
int DbgLineNo) {}
#endif #endif
/*! /***************************************************************************
* \brief Writes the buffer in the file as per the requested banner * Function : UpnpDisplayBanner
*/ *
* Parameters:
* IN FILE *fd: file descriptor where the banner will be written
* IN char **lines: The buffer that will be written
* IN int size: Size of the buffer
* IN int starLength: This parameter provides the width of the banner
*
* Description:
* This functions takes the buffer and writes the buffer in the file as
* per the requested banner
* Returns: void
***************************************************************************/
#ifdef DEBUG #ifdef DEBUG
void UpnpDisplayBanner( void UpnpDisplayBanner(
/*! [in] file descriptor where the banner will be written. */
FILE *fd, FILE *fd,
/*! [in] The buffer that will be written. */
const char **lines, const char **lines,
/*! [in] Size of the buffer. */
size_t size, size_t size,
/*! [in] This parameter provides the width of the banner. */
int starlength); int starlength);
#else #else
static UPNP_INLINE void UpnpDisplayBanner( static UPNP_INLINE void UpnpDisplayBanner(
@@ -280,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( EXPORT_SPEC IXML_Document* UpnpMakeAction(
/*! [in] Name of the action request or response. */ IN const char * ActionName, /** The action name. */
const char *ActionName, IN const char * ServType, /** The service type. */
/*! [in] The service type. */ IN int NumArg, /** Number of argument pairs to be passed. */
const char *ServType, IN const char * Arg, /** Status variable name and value pair. */
/*! [in] Number of argument pairs to be passed. */ IN ... /* Other status variable name and value pairs. */
int NumArg, );
/*! [in] pointer to the first argument. */
const char *Arg,
/*! [in] Argument list. */
...);
/** {\bf UpnpAddToAction} creates an action request packet based on its input
/*! * parameters (status variable name and value pair). This API is specially
* \brief Ceates an action response packet based on its output parameters * suitable inside a loop to add any number input parameters into an existing
* (status variable name and value pair). * 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

@@ -9,6 +9,10 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/threadutil/inc \ -I$(top_srcdir)/threadutil/inc \
-I$(top_srcdir)/ixml/inc -I$(top_srcdir)/ixml/inc
AM_CFLAGS = $(PTHREAD_CFLAGS)
AM_LDFLAGS = $(PTHREAD_LIBS)
LDADD = \ LDADD = \
$(top_builddir)/upnp/libupnp.la \ $(top_builddir)/upnp/libupnp.la \
$(top_builddir)/threadutil/libthreadutil.la \ $(top_builddir)/threadutil/libthreadutil.la \
@@ -69,9 +73,8 @@ upnp_tv_combo_SOURCES = \
if WITH_DOCUMENTATION if WITH_DOCUMENTATION
examplesdir = $(docdir)/examples examplesdir = $(docdir)/examples
examples_DATA = \ examples_DATA = \
$(sort \
$(upnp_tv_ctrlpt_SOURCES) \ $(upnp_tv_ctrlpt_SOURCES) \
$(upnp_tv_device_SOURCES)) $(upnp_tv_device_SOURCES)
endif endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,58 +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.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#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,
@@ -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
@@ -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 );
@@ -668,7 +669,7 @@ 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,31 +939,27 @@ 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;
} }
} }
@@ -984,9 +983,9 @@ 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;
@@ -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;
@@ -1029,9 +1028,12 @@ void TvCtrlPointHandleGetVar(
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 ) {
/* SSDP Stuff */
case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE:
case UPNP_DISCOVERY_SEARCH_RESULT: {
UpnpDiscovery *d_event = (UpnpDiscovery *)Event;
IXML_Document *DescDoc = NULL;
const char *location = NULL;
int errCode = UpnpDiscovery_get_ErrCode(d_event);
if (errCode != UPNP_E_SUCCESS) { switch ( EventType ) {
SampleUtil_Print( /*
"Error in Discovery Callback -- %d", errCode); SSDP Stuff
*/
case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE:
case UPNP_DISCOVERY_SEARCH_RESULT:
{
struct Upnp_Discovery *d_event =
( struct Upnp_Discovery * )Event;
IXML_Document *DescDoc = NULL;
int ret;
if( d_event->ErrCode != UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error in Discovery Callback -- %d",
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) {
if( DescDoc )
ixmlDocument_free( DescDoc ); ixmlDocument_free( DescDoc );
}
TvCtrlPointPrintList( ); TvCtrlPointPrintList( );
break; break;
} }
case UPNP_DISCOVERY_SEARCH_TIMEOUT:
/* Nothing to do here... */
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_SEARCH_TIMEOUT:
SampleUtil_Print( /*
"Error in Discovery ByeBye Callback -- %d", errCode); Nothing to do here...
*/
break;
case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE:
{
struct Upnp_Discovery *d_event =
( struct Upnp_Discovery * )Event;
if( d_event->ErrCode != UPNP_E_SUCCESS ) {
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",
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: { /*
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 =
UpnpSubscribe( ctrlpt_handle, es_event->PublisherUrl,
&TimeOut, newSID );
if( ret == UPNP_E_SUCCESS ) {
SampleUtil_Print( "Subscribed to EventURL with SID=%s",
newSID ); newSID );
if (errCode == UPNP_E_SUCCESS) { TvCtrlPointHandleSubscribeUpdate( es_event->
SampleUtil_Print("Subscribed to EventURL with SID=%s", newSID); PublisherUrl, newSID,
TvCtrlPointHandleSubscribeUpdate(
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)),
newSID,
TimeOut ); 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,11 +1348,13 @@ 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 );
@@ -1314,38 +1362,28 @@ int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionP
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"
"\tipaddress = %s port = %u\n",
ip_address, port ); ip_address, port );
rc = UpnpInit( ip_address, port ); rc = UpnpInit( ip_address, port );
if (rc != UPNP_E_SUCCESS) { if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc ); SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc );
/* //UpnpFinish( );
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( "UPnP Initialized (%s:%d)", ip_address, port );
SampleUtil_Print( "Registering Control Point" ); SampleUtil_Print( "Registering Control Point" );
rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler, rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler,
&ctrlpt_handle, &ctrlpt_handle ); &ctrlpt_handle, &ctrlpt_handle );
if (rc != UPNP_E_SUCCESS) { if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "Error registering CP: %d", rc ); SampleUtil_Print( "Error registering CP: %d", rc );
UpnpFinish( ); UpnpFinish( );
return TV_ERROR; return TV_ERROR;
} }
@@ -1353,16 +1391,15 @@ int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionP
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( );
@@ -1370,4 +1407,3 @@ int TvCtrlPointStop(void)
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; // IXML_Document *PropSet=NULL;
//lock state mutex //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 //add each variable to the property set
//for initial state dump //for initial state dump
UpnpAddToPropertySet( UpnpAddToPropertySet(&PropSet,
&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,
PropSet,
l_sid);
//free document //free document
Document_free(PropSet); Document_free(PropSet);
#endif
UpnpAcceptSubscription( */
device_handle,
l_udn, UpnpAcceptSubscription( device_handle,
l_serviceId, sr_event->UDN,
sr_event->ServiceId,
( const char ** )tv_service_table[i]. ( const char ** )tv_service_table[i].
VariableName, VariableName,
( const char ** )tv_service_table[i]. ( const char ** )tv_service_table[i].
VariableStrVal, VariableStrVal,
tv_service_table[i].VariableCount, tv_service_table[i].VariableCount,
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 ) &&
( strcmp( serviceID, tv_service_table[i].ServiceId ) == 0 ) ) {
//check variable name //check variable name
for( j = 0; j < tv_service_table[i].VariableCount; j++ ) { for( j = 0; j < tv_service_table[i].VariableCount; j++ ) {
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;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -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 );
} }
/****************************************************************************** /******************************************************************************
@@ -1814,7 +1919,6 @@ TvDeviceStop()
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;
} }
if( ip_address == NULL ) {
ip_address = UpnpGetServerIpAddress( ); ip_address = UpnpGetServerIpAddress( );
port = UpnpGetServerPort(); }
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"); SampleUtil_Print( "Initializing State Table\n" );
TvDeviceStateTableInit( desc_doc_url ); TvDeviceStateTableInit( desc_doc_url );
SampleUtil_Print( "State Table Initialized\n" ); SampleUtil_Print( "State Table Initialized\n" );
ret = UpnpSendAdvertisement( device_handle, default_advr_expire );
if( ret != UPNP_E_SUCCESS ) { if( ( ret =
UpnpSendAdvertisement( device_handle, default_advr_expire ) )
!= UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error sending advertisements : %d\n", ret ); SampleUtil_Print( "Error sending advertisements : %d\n", ret );
UpnpFinish( ); 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 <string.h>
#ifdef WIN32
/* Do not #include <unistd.h> */
#else
#include <unistd.h> #include <unistd.h>
#endif #include <string.h>
#include "upnp.h"
#include "sample_util.h"
//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 */
@@ -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." );
@@ -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( ); rc = TvCtrlPointStop( );
exit( rc );
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 );
@@ -674,7 +669,7 @@ 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,31 +939,27 @@ 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;
} }
} }
@@ -990,9 +983,9 @@ 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;
@@ -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;
@@ -1035,9 +1028,12 @@ TvCtrlPointHandleGetVar( const char *controlURL,
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,60 +1057,69 @@ 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( );
@@ -1122,92 +1127,109 @@ int TvCtrlPointCallbackEventHandler(Upnp_EventType EventType, void *Event, void
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, ret =
UpnpSubscribe( ctrlpt_handle, es_event->PublisherUrl,
&TimeOut, newSID );
if( ret == UPNP_E_SUCCESS ) {
SampleUtil_Print( "Subscribed to EventURL with SID=%s",
newSID ); newSID );
TvCtrlPointHandleSubscribeUpdate( es_event->
if (errCode == UPNP_E_SUCCESS) { PublisherUrl, newSID,
SampleUtil_Print("Subscribed to EventURL with SID=%s", newSID);
TvCtrlPointHandleSubscribeUpdate(
UpnpString_get_String(UpnpEventSubscribe_get_PublisherUrl(es_event)),
newSID,
TimeOut ); 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,11 +1348,13 @@ 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 );
@@ -1338,36 +1362,28 @@ int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionP
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"
"\tipaddress = %s port = %u\n",
ip_address, port ); ip_address, port );
rc = UpnpInit( ip_address, port ); rc = UpnpInit( ip_address, port );
if (rc != UPNP_E_SUCCESS) { if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc ); SampleUtil_Print( "WinCEStart: UpnpInit() Error: %d", rc );
UpnpFinish( ); 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( "UPnP Initialized (%s:%d)", ip_address, port );
SampleUtil_Print( "Registering Control Point" ); SampleUtil_Print( "Registering Control Point" );
rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler, rc = UpnpRegisterClient( TvCtrlPointCallbackEventHandler,
&ctrlpt_handle, &ctrlpt_handle ); &ctrlpt_handle, &ctrlpt_handle );
if (rc != UPNP_E_SUCCESS) { if( UPNP_E_SUCCESS != rc ) {
SampleUtil_Print( "Error registering CP: %d", rc ); SampleUtil_Print( "Error registering CP: %d", rc );
UpnpFinish( ); UpnpFinish( );
return TV_ERROR; return TV_ERROR;
} }
@@ -1375,16 +1391,15 @@ int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionP
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( );
@@ -1392,4 +1407,3 @@ int TvCtrlPointStop(void)
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
@@ -121,22 +117,21 @@ 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 );
@@ -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;
} }

View File

@@ -1,47 +1,40 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
******************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "upnp_tv_device.h" #include "upnp_tv_device.h"
#include <assert.h>
#define DEFAULT_WEB_DIR "./web" #define DEFAULT_WEB_DIR "./web"
#define DESC_URL_SIZE 200 #define DESC_URL_SIZE 200
/* /*
Device type for tv device Device type for tv device
*/ */
@@ -187,6 +180,7 @@ SetServiceTable( IN int serviceType,
} }
return SetActionTable( serviceType, out ); return SetActionTable( serviceType, out );
} }
/****************************************************************************** /******************************************************************************
@@ -257,6 +251,7 @@ SetActionTable( IN int serviceType,
} }
return 0; return 0;
} }
/****************************************************************************** /******************************************************************************
@@ -373,68 +368,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; // IXML_Document *PropSet=NULL;
//lock state mutex //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 //add each variable to the property set
//for initial state dump //for initial state dump
UpnpAddToPropertySet( UpnpAddToPropertySet(&PropSet,
&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,
PropSet,
l_sid);
//free document //free document
Document_free(PropSet); Document_free(PropSet);
#endif
UpnpAcceptSubscription( */
device_handle,
l_udn, UpnpAcceptSubscription( device_handle,
l_serviceId, sr_event->UDN,
sr_event->ServiceId,
( const char ** )tv_service_table[i]. ( const char ** )tv_service_table[i].
VariableName, VariableName,
( const char ** )tv_service_table[i]. ( const char ** )tv_service_table[i].
VariableStrVal, VariableStrVal,
tv_service_table[i].VariableCount, tv_service_table[i].VariableCount,
l_sid); sr_event->Sid );
} }
} }
ithread_mutex_unlock( &TVDevMutex ); ithread_mutex_unlock( &TVDevMutex );
return 1; return ( 1 );
} }
/****************************************************************************** /******************************************************************************
* TvDeviceHandleGetVarRequest * TvDeviceHandleGetVarRequest
* *
@@ -448,32 +436,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 ) &&
( strcmp( serviceID, tv_service_table[i].ServiceId ) == 0 ) ) {
//check variable name //check variable name
for( j = 0; j < tv_service_table[i].VariableCount; j++ ) { for( j = 0; j < tv_service_table[i].VariableCount; j++ ) {
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;
} }
} }
@@ -481,19 +468,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 );
} }
/****************************************************************************** /******************************************************************************
@@ -509,8 +496,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
*/ */
@@ -519,38 +507,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;
@@ -561,25 +562,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;
} }
@@ -587,7 +588,7 @@ TvDeviceHandleActionRequest( INOUT UpnpActionRequest *ca_event )
} }
} }
return UpnpActionRequest_get_ErrCode(ca_event); return ( ca_event->ErrCode );
} }
/****************************************************************************** /******************************************************************************
@@ -650,6 +651,7 @@ TvDeviceSetServiceTableVar( IN unsigned int service,
ithread_mutex_unlock( &TVDevMutex ); ithread_mutex_unlock( &TVDevMutex );
return ( 1 ); return ( 1 );
} }
/****************************************************************************** /******************************************************************************
@@ -672,7 +674,7 @@ TvDeviceSetPower( IN int on )
if( on != POWER_ON && on != POWER_OFF ) { if( on != POWER_ON && on != POWER_OFF ) {
SampleUtil_Print( "error: can't set power to value %d\n", on ); SampleUtil_Print( "error: can't set power to value %d\n", on );
return 0; return ( 0 );
} }
/* /*
@@ -683,7 +685,7 @@ TvDeviceSetPower( IN int on )
ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER, ret = TvDeviceSetServiceTableVar( TV_SERVICE_CONTROL, TV_CONTROL_POWER,
value ); value );
return ret; return ( ret );
} }
/****************************************************************************** /******************************************************************************
@@ -700,7 +702,9 @@ TvDeviceSetPower( IN int on )
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDevicePowerOn( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
( *out ) = NULL; ( *out ) = NULL;
( *errorString ) = NULL; ( *errorString ) = NULL;
@@ -720,6 +724,7 @@ TvDevicePowerOn( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -776,8 +781,11 @@ TvDevicePowerOff( IN IXML_Document * in,
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetChannel( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int channel = 0; int channel = 0;
@@ -822,6 +830,7 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -839,10 +848,13 @@ TvDeviceSetChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **er
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, OUT char **errorString ) IncrementChannel( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curchannel; int curchannel,
int newchannel; newchannel;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -904,9 +916,12 @@ IncrementChannel( IN int incr, IN IXML_Document * in, OUT IXML_Document **out, O
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseChannel( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementChannel( -1, in, out, errorString ); return IncrementChannel( -1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -923,9 +938,12 @@ TvDeviceDecreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseChannel( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementChannel( 1, in, out, errorString ); return IncrementChannel( 1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -944,9 +962,13 @@ TvDeviceIncreaseChannel( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetVolume( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int volume = 0; int volume = 0;
( *out ) = NULL; ( *out ) = NULL;
@@ -987,6 +1009,7 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1005,7 +1028,10 @@ TvDeviceSetVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **err
* *
*****************************************************************************/ *****************************************************************************/
int int
IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT char **errorString ) IncrementVolume( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curvolume, int curvolume,
newvolume; newvolume;
@@ -1042,7 +1068,8 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT
TV_CONTROL_VOLUME, value ) ) { TV_CONTROL_VOLUME, value ) ) {
if( UpnpAddToActionResponse( out, actionName, if( UpnpAddToActionResponse( out, actionName,
TvServiceType[TV_SERVICE_CONTROL], TvServiceType[TV_SERVICE_CONTROL],
"Volume", value ) != UPNP_E_SUCCESS ) { "Volume", value ) != UPNP_E_SUCCESS )
{
( *out ) = NULL; ( *out ) = NULL;
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
@@ -1052,6 +1079,7 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1068,9 +1096,13 @@ IncrementVolume( IN int incr, IN IXML_Document *in,OUT IXML_Document **out, OUT
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseVolume( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementVolume( 1, in, out, errorString ); return IncrementVolume( 1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -1087,9 +1119,13 @@ TvDeviceIncreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseVolume( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementVolume( -1, in, out, errorString ); return IncrementVolume( -1, in, out, errorString );
} }
/****************************************************************************** /******************************************************************************
@@ -1108,9 +1144,13 @@ TvDeviceDecreaseVolume( IN IXML_Document *in, OUT IXML_Document **out, OUT char
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetColor( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int color = 0; int color = 0;
( *out ) = NULL; ( *out ) = NULL;
@@ -1150,6 +1190,7 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1166,11 +1207,16 @@ TvDeviceSetColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **erro
* IXML_Document **out - action result document * IXML_Document **out - action result document
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementColor( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curcolor; int curcolor,
int newcolor; newcolor;
char *actionName; char *actionName;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1228,8 +1274,11 @@ IncrementColor( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseColor( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementColor( -1, in, out, errorString ); return IncrementColor( -1, in, out, errorString );
} }
@@ -1246,8 +1295,11 @@ TvDeviceDecreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseColor( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementColor( 1, in, out, errorString ); return IncrementColor( 1, in, out, errorString );
} }
@@ -1267,9 +1319,13 @@ TvDeviceIncreaseColor( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetTint( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int tint = -1; int tint = -1;
( *out ) = NULL; ( *out ) = NULL;
@@ -1328,10 +1384,14 @@ TvDeviceSetTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **error
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementTint( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curtint; int curtint,
int newtint; newtint;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1374,6 +1434,7 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1390,8 +1451,11 @@ IncrementTint( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT c
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseTint( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementTint( 1, in, out, errorString ); return IncrementTint( 1, in, out, errorString );
} }
@@ -1409,8 +1473,11 @@ TvDeviceIncreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseTint( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementTint( -1, in, out, errorString ); return IncrementTint( -1, in, out, errorString );
} }
@@ -1430,8 +1497,11 @@ TvDeviceDecreaseTint( IN IXML_Document *in, OUT IXML_Document **out, OUT char **
* *
****************************************************************************/ ****************************************************************************/
int int
TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetContrast( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int contrast = -1; int contrast = -1;
@@ -1492,10 +1562,14 @@ TvDeviceSetContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **e
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementContrast( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curcontrast; int curcontrast,
int newcontrast; newcontrast;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1557,8 +1631,11 @@ IncrementContrast( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, O
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseContrast( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementContrast( 1, in, out, errorString ); return IncrementContrast( 1, in, out, errorString );
} }
@@ -1576,7 +1653,9 @@ TvDeviceIncreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseContrast( IXML_Document * in,
IXML_Document ** out,
char **errorString )
{ {
return IncrementContrast( -1, in, out, errorString ); return IncrementContrast( -1, in, out, errorString );
} }
@@ -1594,8 +1673,11 @@ TvDeviceDecreaseContrast( IN IXML_Document *in, OUT IXML_Document **out, OUT cha
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceSetBrightness( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
char *value = NULL; char *value = NULL;
int brightness = -1; int brightness = -1;
@@ -1638,6 +1720,7 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
( *errorString ) = "Internal Error"; ( *errorString ) = "Internal Error";
return UPNP_E_INTERNAL_ERROR; return UPNP_E_INTERNAL_ERROR;
} }
} }
/****************************************************************************** /******************************************************************************
@@ -1655,10 +1738,13 @@ TvDeviceSetBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char *
* char **errorString - errorString (in case action was unsuccessful) * char **errorString - errorString (in case action was unsuccessful)
*****************************************************************************/ *****************************************************************************/
int int
IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) IncrementBrightness( IN int incr,
IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
int curbrightness; int curbrightness,
int newbrightness; newbrightness;
char *actionName = NULL; char *actionName = NULL;
char value[TV_MAX_VAL_LEN]; char value[TV_MAX_VAL_LEN];
@@ -1719,7 +1805,9 @@ IncrementBrightness( IN int incr, IN IXML_Document *in, OUT IXML_Document **out,
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceIncreaseBrightness( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementBrightness( 1, in, out, errorString ); return IncrementBrightness( 1, in, out, errorString );
} }
@@ -1737,7 +1825,9 @@ TvDeviceIncreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT c
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceDecreaseBrightness( IN IXML_Document *in, OUT IXML_Document **out, OUT char **errorString ) TvDeviceDecreaseBrightness( IN IXML_Document * in,
OUT IXML_Document ** out,
OUT char **errorString )
{ {
return IncrementBrightness( -1, in, out, errorString ); return IncrementBrightness( -1, in, out, errorString );
} }
@@ -1761,19 +1851,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;
/* /*
@@ -1792,14 +1892,17 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co
break; break;
default: default:
SampleUtil_Print( "Error in TvDeviceCallbackEventHandler: unknown event type %d\n", SampleUtil_Print
( "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 );
} }
/****************************************************************************** /******************************************************************************
@@ -1812,13 +1915,12 @@ int TvDeviceCallbackEventHandler(Upnp_EventType EventType, void *Event, void *Co
* *
*****************************************************************************/ *****************************************************************************/
int int
TvDeviceStop(void) TvDeviceStop( )
{ {
UpnpUnRegisterRootDevice( device_handle ); UpnpUnRegisterRootDevice( device_handle );
UpnpFinish( ); UpnpFinish( );
SampleUtil_Finish( ); SampleUtil_Finish( );
ithread_mutex_destroy( &TVDevMutex ); ithread_mutex_destroy( &TVDevMutex );
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
@@ -1851,83 +1953,79 @@ TvDeviceStart( char *ip_address,
print_string pfun ) print_string pfun )
{ {
int ret = UPNP_E_SUCCESS; int ret = UPNP_E_SUCCESS;
char desc_doc_url[DESC_URL_SIZE]; char desc_doc_url[DESC_URL_SIZE];
ithread_mutex_init( &TVDevMutex, NULL ); ithread_mutex_init( &TVDevMutex, NULL );
SampleUtil_Initialize( pfun ); SampleUtil_Initialize( pfun );
SampleUtil_Print( SampleUtil_Print
"Initializing UPnP Sdk with\n" ( "Initializing UPnP Sdk with \n \t ipaddress = %s port = %d\n",
"\tipaddress = %s port = %u\n",
ip_address, port ); ip_address, port );
ret = UpnpInit( ip_address, port ); if( ( ret = UpnpInit( ip_address, port ) ) != UPNP_E_SUCCESS ) {
if( ret != UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error with UpnpInit -- %d\n", ret ); SampleUtil_Print( "Error with UpnpInit -- %d\n", ret );
UpnpFinish( ); UpnpFinish( );
return ret; return ret;
} }
if( ip_address == NULL ) {
ip_address = UpnpGetServerIpAddress( ); ip_address = UpnpGetServerIpAddress( );
}
port = UpnpGetServerPort( ); port = UpnpGetServerPort( );
SampleUtil_Print( SampleUtil_Print( "UPnP Initialized\n \t ipaddress= %s port = %d\n",
"UPnP Initialized\n"
"\tipaddress= %s port = %u\n",
ip_address, port ); ip_address, port );
if( desc_doc_name == NULL ) { if( desc_doc_name == NULL )
desc_doc_name = "tvdevicedesc.xml"; desc_doc_name = "tvdevicedesc.xml";
}
if( web_dir_path == NULL ) { if( web_dir_path == NULL )
web_dir_path = DEFAULT_WEB_DIR; web_dir_path = DEFAULT_WEB_DIR;
}
snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address, snprintf( desc_doc_url, DESC_URL_SIZE, "http://%s:%d/%s", ip_address,
port, desc_doc_name ); port, desc_doc_name );
SampleUtil_Print( "Specifying the webserver root directory -- %s\n", SampleUtil_Print( "Specifying the webserver root directory -- %s\n",
web_dir_path ); web_dir_path );
ret = UpnpSetWebServerRootDir( web_dir_path ); if( ( ret =
if( ret != UPNP_E_SUCCESS ) { UpnpSetWebServerRootDir( web_dir_path ) ) != UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error specifying webserver root directory -- %s: %d\n", SampleUtil_Print
( "Error specifying webserver root directory -- %s: %d\n",
web_dir_path, ret ); web_dir_path, ret );
UpnpFinish( ); UpnpFinish( );
return ret; return ret;
} }
SampleUtil_Print( SampleUtil_Print
"Registering the RootDevice\n" ( "Registering the RootDevice\n\t with desc_doc_url: %s\n",
"\t with desc_doc_url: %s\n",
desc_doc_url ); desc_doc_url );
ret = UpnpRegisterRootDevice( desc_doc_url, TvDeviceCallbackEventHandler, if( ( ret = UpnpRegisterRootDevice( desc_doc_url,
&device_handle, &device_handle ); TvDeviceCallbackEventHandler,
if( ret != UPNP_E_SUCCESS ) { &device_handle, &device_handle ) )
!= UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error registering the rootdevice : %d\n", ret ); SampleUtil_Print( "Error registering the rootdevice : %d\n", ret );
UpnpFinish( ); UpnpFinish( );
return ret; return ret;
} else { } else {
SampleUtil_Print( SampleUtil_Print( "RootDevice Registered\n" );
"RootDevice Registered\n"
"Initializing State Table\n"); SampleUtil_Print( "Initializing State Table\n" );
TvDeviceStateTableInit( desc_doc_url ); TvDeviceStateTableInit( desc_doc_url );
SampleUtil_Print( "State Table Initialized\n" ); SampleUtil_Print( "State Table Initialized\n" );
ret = UpnpSendAdvertisement( device_handle, default_advr_expire );
if( ret != UPNP_E_SUCCESS ) { if( ( ret =
UpnpSendAdvertisement( device_handle, default_advr_expire ) )
!= UPNP_E_SUCCESS ) {
SampleUtil_Print( "Error sending advertisements : %d\n", ret ); SampleUtil_Print( "Error sending advertisements : %d\n", ret );
UpnpFinish( ); 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 <string.h>
#ifdef WIN32
/* Do not #include <unistd.h> */
#else
#include <unistd.h> #include <unistd.h>
#endif #include <string.h>
#include "upnp.h"
#include "sample_util.h"
//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 */
@@ -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,108 +1,82 @@
/******************************************************************************* ///////////////////////////////////////////////////////////////////////////
* //
* 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
{ *
ithread_mutex_init(&GlobalDebugMutex, NULL); * Parameters:
if(DEBUG_TARGET == 1) { * IN const char* ErrFileName: name of the error file
if((ErrFileHnd = fopen( errFileName, "a")) == NULL) { * IN const char *InfoFileName: name of the information file
return -1; * IN int size: Size of the buffer
} * IN int starLength: This parameter provides the width of the banner
if((InfoFileHnd = fopen( infoFileName, "a")) == NULL) { *
return -1; * Description:
} * This functions takes the buffer and writes the buffer in the file as
} * per the requested banner
return UPNP_E_SUCCESS; * Returns: void
} ***************************************************************************/
void
UpnpSetLogFileNames ( IN const char *ErrFileName,
void UpnpSetLogLevel(Upnp_LogLevel log_level) IN const char *InfoFileName )
{
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 ) { if( ErrFileName ) {
errFileName = ErrFileName; errFileName = ErrFileName;
@@ -113,9 +87,91 @@ void UpnpSetLogFileNames(
} }
/***************************************************************************
* 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,14 +186,37 @@ int DebugAtThisLevel(
return ret; return ret;
} }
#endif
/***************************************************************************
* Function : UpnpPrintf
*
* Parameters:
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
* whether debug statement will go to standard output,
* or any of the log files.
* IN Dbg_Module Module: debug will go in the name of this module
* IN char *DbgFileName: Name of the file from where debug statement is
* coming
* IN int DbgLineNo : Line number of the file from where debug statement
* is coming
* IN char * FmtStr, ...: Variable number of arguments that will go
* in the debug statement
*
* Description:
* This functions prints the debug statement either on the startdard
* output or log file along with the information from where this debug
* statement is coming
* Returns: void
***************************************************************************/
#ifdef DEBUG
void UpnpPrintf( void UpnpPrintf(
Upnp_LogLevel DLevel, IN Upnp_LogLevel DLevel,
Dbg_Module Module, IN Dbg_Module Module,
const char *DbgFileName, IN const char *DbgFileName,
int DbgLineNo, IN int DbgLineNo,
const char *FmtStr, IN const char *FmtStr,
... ) ... )
{ {
va_list ArgList; va_list ArgList;
@@ -170,8 +249,26 @@ void UpnpPrintf(
va_end(ArgList); va_end(ArgList);
ithread_mutex_unlock(&GlobalDebugMutex); ithread_mutex_unlock(&GlobalDebugMutex);
} }
#endif
/***************************************************************************
* 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 *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;
@@ -282,47 +393,5 @@ void UpnpDisplayBanner(
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,83 +1,56 @@
/************************************************************************** ///////////////////////////////////////////////////////////////////////////
* //
* Copyright (c) 2000-2003 Intel Corporation // Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. // All rights reserved.
* //
* Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
* //
* - Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, // * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation // this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. // and/or other materials provided with the distribution.
* - Neither name of Intel Corporation nor the names of its contributors // * Neither name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
* without specific prior written permission. // without specific prior written permission.
* //
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* //
**************************************************************************/ ///////////////////////////////////////////////////////////////////////////
#include "config.h" #include "config.h"
/*!
* \file
*/
#if EXCLUDE_DOM == 0 #if EXCLUDE_DOM == 0
#include "upnp.h"
#include "upnptools.h"
#include "uri.h"
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include "upnptools.h"
#include "uri.h"
/*! Maximum action header buffer length. */
#define HEADER_LENGTH 2000 #define HEADER_LENGTH 2000
//Structure to maintain a error code and string associated with the
/*! // error code
* \brief Structure to maintain a error code and string associated with the
* error code.
*/
struct ErrorString { struct ErrorString {
/*! Error code. */ int rc; /* error code */
int rc; const char *rcError; /* error description */
/*! Error description. */
const char *rcError;
}; };
//Intializing the array of error structures.
/*! struct ErrorString ErrorMessages[] = { {UPNP_E_SUCCESS, "UPNP_E_SUCCESS"},
* \brief Array of error structures.
*/
struct ErrorString ErrorMessages[] = {
{UPNP_E_SUCCESS, "UPNP_E_SUCCESS"},
{UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"}, {UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"},
{UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"}, {UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"},
{UPNP_E_OUTOF_HANDLE, "UPNP_E_OUTOF_HANDLE"}, {UPNP_E_OUTOF_HANDLE, "UPNP_E_OUTOF_HANDLE"},
{UPNP_E_OUTOF_CONTEXT, "UPNP_E_OUTOF_CONTEXT"}, {UPNP_E_OUTOF_CONTEXT, "UPNP_E_OUTOF_CONTEXT"},
{UPNP_E_OUTOF_MEMORY, "UPNP_E_OUTOF_MEMORY"}, {UPNP_E_OUTOF_MEMORY, "UPNP_E_OUTOF_MEMOR"},
{UPNP_E_INIT, "UPNP_E_INIT"}, {UPNP_E_INIT, "UPNP_E_INIT"},
{UPNP_E_BUFFER_TOO_SMALL, "UPNP_E_BUFFER_TOO_SMALL"}, {UPNP_E_BUFFER_TOO_SMALL, "UPNP_E_BUFFER_TOO_SMALL"},
{UPNP_E_INVALID_DESC, "UPNP_E_INVALID_DESC"}, {UPNP_E_INVALID_DESC, "UPNP_E_INVALID_DESC"},
@@ -90,10 +63,7 @@ struct ErrorString ErrorMessages[] = {
{UPNP_E_INVALID_ACTION, "UPNP_E_INVALID_ACTION"}, {UPNP_E_INVALID_ACTION, "UPNP_E_INVALID_ACTION"},
{UPNP_E_FINISH, "UPNP_E_FINISH"}, {UPNP_E_FINISH, "UPNP_E_FINISH"},
{UPNP_E_INIT_FAILED, "UPNP_E_INIT_FAILED"}, {UPNP_E_INIT_FAILED, "UPNP_E_INIT_FAILED"},
{UPNP_E_URL_TOO_BIG, "UPNP_E_URL_TOO_BIG"},
{UPNP_E_BAD_HTTPMSG, "UPNP_E_BAD_HTTPMSG"}, {UPNP_E_BAD_HTTPMSG, "UPNP_E_BAD_HTTPMSG"},
{UPNP_E_ALREADY_REGISTERED, "UPNP_E_ALREADY_REGISTERED"},
{UPNP_E_INVALID_INTERFACE, "UPNP_E_INVALID_INTERFACE"},
{UPNP_E_NETWORK_ERROR, "UPNP_E_NETWORK_ERROR"}, {UPNP_E_NETWORK_ERROR, "UPNP_E_NETWORK_ERROR"},
{UPNP_E_SOCKET_WRITE, "UPNP_E_SOCKET_WRITE"}, {UPNP_E_SOCKET_WRITE, "UPNP_E_SOCKET_WRITE"},
{UPNP_E_SOCKET_READ, "UPNP_E_SOCKET_READ"}, {UPNP_E_SOCKET_READ, "UPNP_E_SOCKET_READ"},
@@ -101,91 +71,112 @@ struct ErrorString ErrorMessages[] = {
{UPNP_E_SOCKET_CONNECT, "UPNP_E_SOCKET_CONNECT"}, {UPNP_E_SOCKET_CONNECT, "UPNP_E_SOCKET_CONNECT"},
{UPNP_E_OUTOF_SOCKET, "UPNP_E_OUTOF_SOCKET"}, {UPNP_E_OUTOF_SOCKET, "UPNP_E_OUTOF_SOCKET"},
{UPNP_E_LISTEN, "UPNP_E_LISTEN"}, {UPNP_E_LISTEN, "UPNP_E_LISTEN"},
{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_EVENT_PROTOCOL, "UPNP_E_EVENT_PROTOCOL"},
{UPNP_E_SUBSCRIBE_UNACCEPTED, "UPNP_E_SUBSCRIBE_UNACCEPTED"}, {UPNP_E_SUBSCRIBE_UNACCEPTED, "UPNP_E_SUBSCRIBE_UNACCEPTED"},
{UPNP_E_UNSUBSCRIBE_UNACCEPTED, "UPNP_E_UNSUBSCRIBE_UNACCEPTED"}, {UPNP_E_UNSUBSCRIBE_UNACCEPTED, "UPNP_E_UNSUBSCRIBE_UNACCEPTED"},
{UPNP_E_NOTIFY_UNACCEPTED, "UPNP_E_NOTIFY_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"}, {UPNP_E_INTERNAL_ERROR, "UPNP_E_INTERNAL_ERROR"},
{UPNP_E_INVALID_ARGUMENT, "UPNP_E_INVALID_ARGUMENT"},
{UPNP_E_OUTOF_BOUNDS, "UPNP_E_OUTOF_BOUNDS"}
}; };
/************************************************************************
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; if( RelURL == NULL )
} return UPNP_E_INVALID_PARAM;
tempRel = NULL;
tempRel = resolve_rel_url((char*) BaseURL, (char*) RelURL ); tempRel = resolve_rel_url((char*) BaseURL, (char*) RelURL );
if( tempRel ) { if( tempRel ) {
strcpy( AbsURL, tempRel ); strcpy( AbsURL, tempRel );
free( 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:
* IN int response: flag to tell if the ActionDoc is for response
* or request
* INOUT IXML_Document **ActionDoc: request or response document
* IN char *ActionName: Name of the action request or response
* IN char *ServType: Service type
* IN char * ArgName: Name of the argument
* IN char * ArgValue: Value of the argument
*
* Description:
* This function adds the argument in the action request or response.
* This function creates the action request or response if it is a first * This function creates the action request or response if it is a first
* argument, otherwise it will add the argument in the document. * argument else it will add the argument in the document
* *
* \returns UPNP_E_SUCCESS if successful, otherwise the appropriate error. * Returns: int
*/ * returns UPNP_E_SUCCESS if successful else returns appropriate error
static int addToAction( ***************************************************************************/
/*! [in] flag to tell if the ActionDoc is for response or request. */ static int
int response, addToAction( IN int response,
/*! [in,out] Request or response document. */ INOUT IXML_Document ** ActionDoc,
IXML_Document **ActionDoc, IN const char *ActionName,
/*! [in] Name of the action request or response. */ IN const char *ServType,
const char *ActionName, IN const char *ArgName,
/*! [in] Service type. */ IN const char *ArgValue )
const char *ServType,
/*! [in] Name of the argument. */
const char *ArgName,
/*! [in] Value of the argument. */
const char *ArgValue)
{ {
char *ActBuff = NULL; char *ActBuff = NULL;
IXML_Node *node = NULL; IXML_Node *node = NULL;
@@ -231,32 +222,39 @@ static int addToAction(
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.
* *
* \return Action request or response document if successful, otherwise * Parameters:
* returns NULL * IN int response: flag to tell if the ActionDoc is for response
*/ * or request
static IXML_Document *makeAction( * IN char * ActionName: Name of the action request or response
/*! [in] flag to tell if the ActionDoc is for response or request. */ * IN char * ServType: Service type
int response, * IN int NumArg :Number of arguments in the action request or response
/*! [in] Name of the action request or response. */ * IN char * Arg : pointer to the first argument
const char *ActionName, * IN va_list ArgList: Argument list
/*! [in] Service type. */ *
const char *ServType, * Description:
/*! [in] Number of arguments in the action request or response. */ * This function creates the action request or response from the argument
int NumArg, * list.
/*! [in] pointer to the first argument. */ * Returns: IXML_Document *
const char *Arg, * returns action request or response document if successful
/*! [in] Argument list. */ * else returns NULL
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;
@@ -285,12 +283,14 @@ static IXML_Document *makeAction(
"<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 ) { if( ixmlParseBufferEx( ActBuff, &ActionDoc ) != IXML_SUCCESS ) {
free( ActBuff ); free( ActBuff );
return NULL; return NULL;
} }
free( ActBuff ); free( ActBuff );
if( ActionDoc == NULL ) { if( ActionDoc == NULL ) {
return NULL; return NULL;
} }
@@ -300,15 +300,19 @@ static IXML_Document *makeAction(
ArgName = Arg; ArgName = Arg;
for ( ; ; ) { for ( ; ; ) {
ArgValue = va_arg( ArgList, const char * ); ArgValue = va_arg( ArgList, const char * );
if( ArgName != NULL ) { if( ArgName != 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 );
} }
if (++Idx < NumArg) { if (++Idx < NumArg) {
ArgName = va_arg( ArgList, const char * ); ArgName = va_arg( ArgList, const char * );
} else { } else {
@@ -321,9 +325,28 @@ 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,
@@ -339,9 +362,28 @@ IXML_Document *UpnpMakeAction(
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,
@@ -357,86 +399,89 @@ IXML_Document *UpnpMakeActionResponse(
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"
IXML_Document *UpnpCreatePropertySet( "-upnp-org:event-1-0\"></e:propertyset>";
int NumArg,
const char *Arg,
...)
{
va_list ArgList;
int Idx = 0;
char BlankDoc[] =
"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">"
"</e:propertyset>";
const char *ArgName,
*ArgValue;
IXML_Node *node;
IXML_Element *Ele;
IXML_Element *Ele1;
IXML_Node *Txt;
IXML_Document *PropSet;
if(ixmlParseBufferEx(BlankDoc, &PropSet) != IXML_SUCCESS) {
return NULL;
}
if (NumArg < 1) {
return PropSet;
}
va_start(ArgList, 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);
return PropSet;
}
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_Node *node;
IXML_Element *Ele; IXML_Element *Ele;
IXML_Element *Ele1; IXML_Element *Ele1;
@@ -470,6 +515,70 @@ int UpnpAddToPropertySet(
return UPNP_E_SUCCESS; return UPNP_E_SUCCESS;
} }
/************************************************************************
* Function : UpnpCreatePropertySet
*
* 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;
int Idx = 0;
char BlankDoc[] = "<e:propertyset xmlns:e=\"urn:schemas-"
"upnp-org:event-1-0\"></e:propertyset>";
const char *ArgName,
*ArgValue;
IXML_Node *node;
IXML_Element *Ele;
IXML_Element *Ele1;
IXML_Node *Txt;
IXML_Document *PropSet;
#endif /* EXCLUDE_DOM == 0 */ if( ixmlParseBufferEx( BlankDoc, &PropSet ) != IXML_SUCCESS ) {
return NULL;
}
if( NumArg < 1 ) {
return NULL;
}
va_start( ArgList, 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 );
return PropSet;
}
#endif

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