Compare commits
206 Commits
release-1.
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
79aa205657 | ||
|
|
9a28fcc95b | ||
|
|
bfbd07cb40 | ||
|
|
255d5ee874 | ||
|
|
2c3bce13bd | ||
|
|
bda942b22a | ||
|
|
ed0ebe1588 | ||
|
|
a39f3a63c3 | ||
|
|
6e7a2bb2dc | ||
|
|
c21a67f2d1 | ||
|
|
c449fd1521 | ||
|
|
594c611a33 | ||
|
|
09f2b6ca30 | ||
|
|
9b3a0999a9 | ||
|
|
d8a27bca96 | ||
|
|
6bee05a517 | ||
|
|
2e96edcbc5 | ||
|
|
ef0aa38958 | ||
|
|
86159bc2a6 | ||
|
|
bd8d6cfc8b | ||
|
|
8434e1e936 | ||
|
|
2765bc39c5 | ||
|
|
75695fcaf1 | ||
|
|
5abd1a3b3e | ||
|
|
6c31683e29 | ||
|
|
d92e26779a | ||
|
|
5d6bcabd45 | ||
|
|
7c524df1d9 | ||
|
|
58c694f57d | ||
|
|
da7f3bf1c1 | ||
|
|
8651174861 | ||
|
|
2dd19e5894 | ||
|
|
e6c548f57a | ||
|
|
32cffb5bb5 | ||
|
|
2b30575ca5 | ||
|
|
d32212a6fd | ||
|
|
508b782c79 | ||
|
|
38d5e58e22 | ||
|
|
ee5bd670d4 | ||
|
|
fcb5e7c438 | ||
|
|
243cd41974 | ||
|
|
853cd32cfe | ||
|
|
f384e54fc6 | ||
|
|
9e12768cdb | ||
|
|
4b47e6a51d | ||
|
|
a5fb5edfc9 | ||
|
|
8bd32d330b | ||
|
|
00eb52cc85 | ||
|
|
ff006272b5 | ||
|
|
852c301c5c | ||
|
|
d270499cd8 | ||
|
|
6ac867bbb1 | ||
|
|
9052ca95be | ||
|
|
ef7edf6cf8 | ||
|
|
c65ec8a720 | ||
|
|
2d22e997e1 | ||
|
|
96dc968f18 | ||
|
|
8e846368e0 | ||
|
|
d6671c464f | ||
|
|
699dd3c82e | ||
|
|
9be360bcd1 | ||
|
|
593b8d0a2b | ||
|
|
890c1b6ef8 | ||
|
|
c127a3a87e | ||
|
|
bd5758186c | ||
|
|
cc472bc2cd | ||
|
|
6128296e5f | ||
|
|
d84c6a7e9f | ||
|
|
113ebd1f91 | ||
|
|
bf1450bf81 | ||
|
|
56b9c75056 | ||
|
|
2bdc9e075e | ||
|
|
923eee2393 | ||
|
|
f74746ff3f | ||
|
|
8401a59ed5 | ||
|
|
5b40cfa272 | ||
|
|
fcda28ba75 | ||
|
|
7cd434225f | ||
|
|
78e5ba89fa | ||
|
|
ebb8f209b0 | ||
|
|
73afd667e1 | ||
|
|
cc294a6cf1 | ||
|
|
458a9416c6 | ||
|
|
b9eeb89250 | ||
|
|
a6e68b481d | ||
|
|
a19a896e88 | ||
|
|
cdee5b7cde | ||
|
|
dec78c8ef1 | ||
|
|
fb62a5d42a | ||
|
|
a9b5081a08 | ||
|
|
3886a697b5 | ||
|
|
3dab2bd00a | ||
|
|
95f7a7eeef | ||
|
|
ca50c2153e | ||
|
|
c73d870f46 | ||
|
|
ab54cb3dc5 | ||
|
|
c33b11d09f | ||
|
|
4966423d96 | ||
|
|
2fb55d3874 | ||
|
|
d2238615e3 | ||
|
|
2fcbe6df52 | ||
|
|
467f9987a1 | ||
|
|
8fbecaee5e | ||
|
|
55d581481f | ||
|
|
a0b405f902 | ||
|
|
b37f9ac64a | ||
|
|
2dad42679d | ||
|
|
ea00f0f222 | ||
|
|
f3ae1b4116 | ||
|
|
67009170d1 | ||
|
|
2b399b1791 | ||
|
|
0bec9ec1ae | ||
|
|
25a4bd6d25 | ||
|
|
5755ac022f | ||
|
|
0158f52ee2 | ||
|
|
0db4a6beac | ||
|
|
575e5fc196 | ||
|
|
0e45dd9b8f | ||
|
|
ae516b6bd3 | ||
|
|
7137f6e261 | ||
|
|
92b241b560 | ||
|
|
2b3ab1799b | ||
|
|
4657e57766 | ||
|
|
21660334e4 | ||
|
|
97af8b6fdb | ||
|
|
934bd2682f | ||
|
|
b8e9628140 | ||
|
|
b3b7a91a64 | ||
|
|
ebc941f265 | ||
|
|
842a6ce5c8 | ||
|
|
2d978c32b8 | ||
|
|
e386dd0d68 | ||
|
|
5a2cc884c1 | ||
|
|
a362d06dff | ||
|
|
0e73448ea8 | ||
|
|
a7966b6597 | ||
|
|
2d5c6310a9 | ||
|
|
c9bcee536e | ||
|
|
1605744278 | ||
|
|
ce0d2833a3 | ||
|
|
74db05ff1e | ||
|
|
9468e0224a | ||
|
|
cb89781a55 | ||
|
|
3de0765893 | ||
|
|
ce0e5b664f | ||
|
|
eec36896c3 | ||
|
|
00cf8052de | ||
|
|
74b8730f0f | ||
|
|
1b45bec411 | ||
|
|
21163f491d | ||
|
|
a54e07bfb2 | ||
|
|
0dea692199 | ||
|
|
dc457414d1 | ||
|
|
e1d09004eb | ||
|
|
640fa8b1be | ||
|
|
2bcbdffd89 | ||
|
|
6c8a4dd361 | ||
|
|
e9941f7ac8 | ||
|
|
5a465a5cf2 | ||
|
|
6aa2419cfd | ||
|
|
712ed6d2ff | ||
|
|
53d5e61b33 | ||
|
|
324931ca8f | ||
|
|
edc0638640 | ||
|
|
e1ea72a5fb | ||
|
|
5eb55e0fb2 | ||
|
|
9226dd833b | ||
|
|
25c908c558 | ||
|
|
16e91b5dcc | ||
|
|
01d17e5c4b | ||
|
|
a1d707ac81 | ||
|
|
4ad6ea3545 | ||
|
|
70a0aff4e7 | ||
|
|
aaacf65f41 | ||
|
|
cd8ce90e19 | ||
|
|
812d019d12 | ||
|
|
881b212690 | ||
|
|
223c0e8816 | ||
|
|
ceca478180 | ||
|
|
7963e97469 | ||
|
|
0080c080cd | ||
|
|
405451e34c | ||
|
|
a772b1a754 | ||
|
|
ffc4668e0b | ||
|
|
56a7f038dc | ||
|
|
3ba4e34662 | ||
|
|
515233ca56 | ||
|
|
423808a095 | ||
|
|
f22a69b487 | ||
|
|
bcf5a5c5e0 | ||
|
|
e0c9de0b1d | ||
|
|
94e4a3bdda | ||
|
|
b7b3bb7d05 | ||
|
|
f0161c7274 | ||
|
|
4b40e94b03 | ||
|
|
1c9632dcc3 | ||
|
|
cc0c2ffc50 | ||
|
|
f812b124d7 | ||
|
|
a785465222 | ||
|
|
078f3f8faf | ||
|
|
1eeaf99b83 | ||
|
|
f6dd5062fe | ||
|
|
7d4a610b93 | ||
|
|
0a074d1989 | ||
|
|
0475a46680 | ||
|
|
2a76749682 |
105
.gitignore
vendored
Normal file
105
.gitignore
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
#
|
||||||
|
# NOTE! Don't add files that are generated in specific
|
||||||
|
# subdirectories here. Add them in the ".gitignore" file
|
||||||
|
# in that subdirectory instead.
|
||||||
|
#
|
||||||
|
# NOTE! Please use 'git ls-files -i --exclude-standard'
|
||||||
|
# command after changing this file, to see if there are
|
||||||
|
# any tracked files which get ignored after the change.
|
||||||
|
#
|
||||||
|
# Normal rules
|
||||||
|
#
|
||||||
|
.*
|
||||||
|
*.o
|
||||||
|
*.o.*
|
||||||
|
*.a
|
||||||
|
*.s
|
||||||
|
*.ko
|
||||||
|
*.so
|
||||||
|
*.so.dbg
|
||||||
|
*.mod.c
|
||||||
|
*.i
|
||||||
|
*.lst
|
||||||
|
*.symtypes
|
||||||
|
*.order
|
||||||
|
modules.builtin
|
||||||
|
*.elf
|
||||||
|
*.bin
|
||||||
|
*.gz
|
||||||
|
*.bz2
|
||||||
|
*.lzma
|
||||||
|
*.patch
|
||||||
|
*.gcno
|
||||||
|
|
||||||
|
#
|
||||||
|
# Top-level generic files
|
||||||
|
#
|
||||||
|
/tags
|
||||||
|
/TAGS
|
||||||
|
/linux
|
||||||
|
/vmlinux
|
||||||
|
/vmlinuz
|
||||||
|
/System.map
|
||||||
|
/Module.markers
|
||||||
|
/Module.symvers
|
||||||
|
|
||||||
|
#
|
||||||
|
# git files that we don't want to ignore even it they are dot-files
|
||||||
|
#
|
||||||
|
!.gitignore
|
||||||
|
!.mailmap
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generated include files
|
||||||
|
#
|
||||||
|
include/config
|
||||||
|
include/linux/version.h
|
||||||
|
include/generated
|
||||||
|
|
||||||
|
# stgit generated dirs
|
||||||
|
patches-*
|
||||||
|
|
||||||
|
# quilt's files
|
||||||
|
patches
|
||||||
|
series
|
||||||
|
|
||||||
|
# cscope files
|
||||||
|
cscope.*
|
||||||
|
ncscope.*
|
||||||
|
|
||||||
|
# gnu global files
|
||||||
|
GPATH
|
||||||
|
GRTAGS
|
||||||
|
GSYMS
|
||||||
|
GTAGS
|
||||||
|
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
\#*#
|
||||||
|
*.lo
|
||||||
|
*.la
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
autoconfig.h
|
||||||
|
autoconfig.h.in
|
||||||
|
autom4te.cache/
|
||||||
|
build-aux/
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
configure
|
||||||
|
libtool
|
||||||
|
libupnp.pc
|
||||||
|
m4/libtool.m4
|
||||||
|
m4/ltoptions.m4
|
||||||
|
m4/ltsugar.m4
|
||||||
|
m4/ltversion.m4
|
||||||
|
m4/lt~obsolete.m4
|
||||||
|
stamp-h1
|
||||||
|
upnp/inc/stamp-h2
|
||||||
|
upnp/inc/upnpconfig.h
|
||||||
|
upnp/sample/tv_combo
|
||||||
|
upnp/sample/tv_ctrlpt
|
||||||
|
upnp/sample/tv_device
|
||||||
|
docs/doxygen
|
||||||
|
|
||||||
12
Doxyfile
12
Doxyfile
@@ -31,7 +31,7 @@ PROJECT_NAME = libUPnP
|
|||||||
# This could be handy for archiving the generated documentation or
|
# This could be handy for archiving the generated documentation or
|
||||||
# if some version control system is used.
|
# if some version control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = 1.4.7
|
PROJECT_NUMBER = 1.6.10
|
||||||
|
|
||||||
# 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 = NO
|
ALWAYS_DETAILED_SEC = YES
|
||||||
|
|
||||||
# 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 = NO
|
INTERNAL_DOCS = YES
|
||||||
|
|
||||||
# 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 = NO
|
MACRO_EXPANSION = YES
|
||||||
|
|
||||||
# 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 =
|
PREDEFINED = DEBUG UPNP_HAVE_TOOLS INCLUDE_DEVICE_APIS INCLUDE_CLIENT_APIS EXCLUDE_GENA=0 EXCLUDE_DOM=0
|
||||||
|
|
||||||
# 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.
|
||||||
|
|||||||
21
Makefile.am
21
Makefile.am
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Top-level "Makefile.am" for libupnp
|
# Top-level "Makefile.am" for libupnp
|
||||||
#
|
#
|
||||||
# Copyright (C) 2005 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
|
# Copyright (C) 2005 Rémi Turboult <r3mi@users.sourceforge.net>
|
||||||
#
|
#
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
@@ -16,6 +16,7 @@ SUBDIRS = \
|
|||||||
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
|
Doxyfile \
|
||||||
libupnp.pc.in \
|
libupnp.pc.in \
|
||||||
LICENSE \
|
LICENSE \
|
||||||
THANKS \
|
THANKS \
|
||||||
@@ -25,9 +26,23 @@ EXTRA_DIST = \
|
|||||||
build/libupnp.dsp \
|
build/libupnp.dsp \
|
||||||
build/libupnp.dsw \
|
build/libupnp.dsw \
|
||||||
build/inc/autoconfig.h \
|
build/inc/autoconfig.h \
|
||||||
build/inc/config.h \
|
|
||||||
build/inc/upnpconfig.h \
|
build/inc/upnpconfig.h \
|
||||||
build/msvc/inttypes.h
|
build/msvc/inttypes.h \
|
||||||
|
build/msvc/stdint.h \
|
||||||
|
build/vc8/ixml.vcproj \
|
||||||
|
build/vc8/libupnp.sln \
|
||||||
|
build/vc8/libupnp.vcproj \
|
||||||
|
build/vc8/threadutil.vcproj \
|
||||||
|
build/vc8/tvcombo.vcproj \
|
||||||
|
build/vc8/tvctrlpt.vcproj \
|
||||||
|
build/vc8/tvdevice.vcproj \
|
||||||
|
build/vc9/ixml.vcproj \
|
||||||
|
build/vc9/libupnp.sln \
|
||||||
|
build/vc9/libupnp.vcproj \
|
||||||
|
build/vc9/threadutil.vcproj \
|
||||||
|
build/vc9/tvcombo.vcproj \
|
||||||
|
build/vc9/tvctrlpt.vcproj \
|
||||||
|
build/vc9/tvdevice.vcproj
|
||||||
|
|
||||||
|
|
||||||
# This variable must have 'exec' in its name, in order to be installed
|
# This variable must have 'exec' in its name, in order to be installed
|
||||||
|
|||||||
2
README
2
README
@@ -1,7 +1,7 @@
|
|||||||
Portable SDK for UPnP* Devices (libupnp)
|
Portable SDK for UPnP* Devices (libupnp)
|
||||||
|
|
||||||
Copyright (c) 2000-2003 Intel Corporation - All Rights Reserved.
|
Copyright (c) 2000-2003 Intel Corporation - All Rights Reserved.
|
||||||
Copyright (c) 2005-2006 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
|
Copyright (c) 2005-2006 Rémi Turboult <r3mi@users.sourceforge.net>
|
||||||
Copyright (c) 2006 Michel Pfeiffer and others <virtual_worlds@gmx.de>
|
Copyright (c) 2006 Michel Pfeiffer and others <virtual_worlds@gmx.de>
|
||||||
|
|
||||||
See LICENSE for details.
|
See LICENSE for details.
|
||||||
|
|||||||
37
THANKS
37
THANKS
@@ -6,31 +6,58 @@ 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
|
||||||
|
- Carl Benson
|
||||||
|
- Chandra (inactiveneurons)
|
||||||
- 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 (no_dice)
|
- Jonathan Casiot (no_dice)
|
||||||
|
- Josh Carroll
|
||||||
|
- Juergen Lock
|
||||||
|
- Keith Brindley
|
||||||
- Leuk_He
|
- Leuk_He
|
||||||
- Loigu
|
- Loigu
|
||||||
- Luke Kim
|
- Luke Kim (nereusuj)
|
||||||
- Marcelo Roberto Jimenez
|
- Marcelo Roberto Jimenez (mroberto)
|
||||||
- Markus Strobl
|
- Markus Strobl
|
||||||
- Nektarios K. Papadopoulos
|
- Nektarios K. Papadopoulos (npapadop)
|
||||||
|
- Nicholas Kraft
|
||||||
|
- Nick Leverton (leveret)
|
||||||
|
- Obata Akio (obache)
|
||||||
- Oskar Liljeblad
|
- Oskar Liljeblad
|
||||||
- Michael (Oxy)
|
- Michael (oxygenic)
|
||||||
- Paul Vixie
|
- Paul Vixie
|
||||||
|
- Peter Hartley
|
||||||
- Rene Hexel
|
- Rene Hexel
|
||||||
|
- Robert Gingher (robsbox)
|
||||||
|
- Ronan Menard
|
||||||
- Siva Chandran
|
- Siva Chandran
|
||||||
|
- Stefan Sommerfeld (zerocom)
|
||||||
|
- Stéphane Corthésy
|
||||||
|
- Steve Bresson
|
||||||
- Timothy Redaelli
|
- Timothy Redaelli
|
||||||
- Titus Winters
|
- Titus Winters
|
||||||
|
|
||||||
|
|||||||
23
TODO
23
TODO
@@ -2,28 +2,5 @@
|
|||||||
To Be Done
|
To Be Done
|
||||||
==========
|
==========
|
||||||
|
|
||||||
- add FreeBSD patches
|
|
||||||
( http://sf.net/tracker/index.php?func=detail&aid=1332618&group_id=7189&atid=307189 ?)
|
|
||||||
|
|
||||||
- non-regression testing
|
- non-regression testing
|
||||||
|
|
||||||
- replace doc++ by Doxygen for documentation generation
|
|
||||||
|
|
||||||
- incorporate public patches and fix reported bugs :
|
|
||||||
http://sourceforge.net/tracker/?group_id=7189&atid=107189 and
|
|
||||||
http://sourceforge.net/tracker/?group_id=7189&atid=307189
|
|
||||||
|
|
||||||
- RPM packaging (a preliminary one here :
|
|
||||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=176617 )
|
|
||||||
|
|
||||||
- make API clean for large files and 64 bits
|
|
||||||
|
|
||||||
|
|
||||||
To Be Decided
|
|
||||||
=============
|
|
||||||
|
|
||||||
- IPV6 support ?
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,15 +19,9 @@
|
|||||||
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
|
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
|
||||||
#define HAVE_FSEEKO 1
|
#define HAVE_FSEEKO 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `ftime' function. */
|
|
||||||
#define HAVE_FTIME 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
#define HAVE_INTTYPES_H 1
|
#define HAVE_INTTYPES_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `compat' library (-lcompat). */
|
|
||||||
/* #undef HAVE_LIBCOMPAT */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <limits.h> header file. */
|
/* Define to 1 if you have the <limits.h> header file. */
|
||||||
#define HAVE_LIMITS_H 1
|
#define HAVE_LIMITS_H 1
|
||||||
|
|
||||||
@@ -67,9 +61,6 @@
|
|||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
#define HAVE_SYS_STAT_H 1
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/timeb.h> header file. */
|
|
||||||
#define HAVE_SYS_TIMEB_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
#define HAVE_SYS_TIME_H 1
|
#define HAVE_SYS_TIME_H 1
|
||||||
|
|
||||||
@@ -82,6 +73,13 @@
|
|||||||
/* 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 the sub-directory in which libtool stores uninstalled libraries.
|
||||||
|
*/
|
||||||
|
#define LT_OBJDIR ".libs/"
|
||||||
|
|
||||||
/* Define to 1 to prevent compilation of assert() */
|
/* Define to 1 to prevent compilation of assert() */
|
||||||
#define NDEBUG 1
|
#define NDEBUG 1
|
||||||
|
|
||||||
@@ -101,13 +99,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.4.7"
|
#define PACKAGE_STRING "libupnp 1.6.10"
|
||||||
|
|
||||||
/* 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.4.7"
|
#define PACKAGE_VERSION "1.6.10"
|
||||||
|
|
||||||
/* 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. */
|
||||||
@@ -116,6 +114,15 @@
|
|||||||
/* Define to 1 if you have the ANSI C header files. */
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
#define STDC_HEADERS 1
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* see upnpconfig.h */
|
||||||
|
#define UPNP_ENABLE_BLOCKING_TCP_CONNECTIONS 1
|
||||||
|
|
||||||
|
/* see upnpconfig.h */
|
||||||
|
/* #undef UPNP_ENABLE_IPV6 */
|
||||||
|
|
||||||
|
/* see upnpconfig.h */
|
||||||
|
#define UPNP_ENABLE_NOTIFICATION_REORDERING 1
|
||||||
|
|
||||||
/* see upnpconfig.h */
|
/* see upnpconfig.h */
|
||||||
#define UPNP_HAVE_CLIENT 1
|
#define UPNP_HAVE_CLIENT 1
|
||||||
|
|
||||||
@@ -131,29 +138,32 @@
|
|||||||
/* 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 4
|
#define UPNP_VERSION_MINOR 6
|
||||||
|
|
||||||
/* see upnpconfig.h */
|
/* see upnpconfig.h */
|
||||||
#define UPNP_VERSION_PATCH 7
|
#define UPNP_VERSION_PATCH 10
|
||||||
|
|
||||||
/* see upnpconfig.h */
|
/* see upnpconfig.h */
|
||||||
#define UPNP_VERSION_STRING "1.4.7"
|
#define UPNP_VERSION_STRING "1.6.10"
|
||||||
|
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
#define VERSION "1.4.7"
|
#define VERSION "1.6.10"
|
||||||
|
|
||||||
/* File Offset size */
|
/* File Offset size */
|
||||||
#define _FILE_OFFSET_BITS 64
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
|
||||||
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
|
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
|
||||||
/* #undef _LARGEFILE_SOURCE */
|
#define _LARGEFILE_SOURCE 1
|
||||||
|
|
||||||
/* Large files support */
|
/* Large files support */
|
||||||
#define _LARGE_FILE_SOURCE
|
#define _LARGE_FILE_SOURCE /**/
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
/* #undef const */
|
/* #undef const */
|
||||||
@@ -164,5 +174,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 */
|
||||||
|
|
||||||
/* Substitute for socklen_t */
|
/* Type for storing the length of struct sockaddr */
|
||||||
/* #undef socklen_t */
|
/* #undef socklen_t */
|
||||||
|
|||||||
@@ -1,343 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef INTERNAL_CONFIG_H
|
|
||||||
#define INTERNAL_CONFIG_H
|
|
||||||
|
|
||||||
#include "autoconfig.h"
|
|
||||||
|
|
||||||
|
|
||||||
/** @name Compile time configuration options
|
|
||||||
* The Linux SDK for UPnP Devices contains some compile-time parameters
|
|
||||||
* that effect the behavior of the SDK. All configuration options are
|
|
||||||
* located in {\tt src/inc/config.h}.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
|
|
||||||
/** @name THREAD_IDLE_TIME
|
|
||||||
* The {\tt THREAD_IDLE_TIME} constant determines when a thread will be
|
|
||||||
* 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
|
|
||||||
* the thread will be released from the thread pool. The default value is
|
|
||||||
* 5000 milliseconds (5 seconds).
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define THREAD_IDLE_TIME 5000
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name JOBS_PER_THREAD
|
|
||||||
* 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
|
|
||||||
* try and maintain this jobs/thread ratio. When the jobs/thread ratio
|
|
||||||
* becomes greater than this, then a new thread (up to the max) will be
|
|
||||||
* allocated to the thread pool. The default ratio is 10 jobs/thread.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define JOBS_PER_THREAD 10
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name MIN_THREADS
|
|
||||||
* The {\tt MIN_THREADS} constant defines the minimum number of threads the
|
|
||||||
* thread pool inside the SDK will create. The thread pool will
|
|
||||||
* always have this number of threads. These threads are used
|
|
||||||
* for both callbacks into applications built on top of the SDK and also
|
|
||||||
* for making connections to other control points and devices. This number
|
|
||||||
* includes persistent threads. The default value is two threads.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define MIN_THREADS 2
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name MAX_THREADS
|
|
||||||
* The {\tt MAX_THREADS} constant defines the maximum number of threads the
|
|
||||||
* thread pool inside the SDK will create. These threads are used
|
|
||||||
* for both callbacks into applications built on top of the library and also
|
|
||||||
* for making connections to other control points and devices. It is not
|
|
||||||
* recommended that this value be below 10, since the threads are
|
|
||||||
* necessary for correct operation. This value can be increased for greater
|
|
||||||
* performance in operation at the expense of greater memory overhead. The
|
|
||||||
* default value is 12.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define MAX_THREADS 12
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name MAX_JOBS_TOTAL
|
|
||||||
* The {\tt MAX_JOBS_TOTAL} constant determines the maximum number of jobs
|
|
||||||
* that can be queued. If this limit is reached further jobs will be thrown
|
|
||||||
* to avoid memory exhaustion. The default value 100.
|
|
||||||
* (Added by Axis.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define MAX_JOBS_TOTAL 100
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name DEFAULT_SOAP_CONTENT_LENGTH
|
|
||||||
* SOAP messages will read at most {\tt DEFAULT_SOAP_CONTENT_LENGTH} bytes.
|
|
||||||
* This prevents devices that have a misbehaving web server to send
|
|
||||||
* a large amount of data to the control point causing it to crash.
|
|
||||||
* This can be adjusted dynamically with {\tt UpnpSetMaxContentLength}.
|
|
||||||
*/
|
|
||||||
//@{
|
|
||||||
#define DEFAULT_SOAP_CONTENT_LENGTH 16000
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name NUM_SSDP_COPY
|
|
||||||
* This configuration parameter determines how many copies of each SSDP
|
|
||||||
* advertisement and search packets will be sent. By default it will send two
|
|
||||||
* copies of every packet.
|
|
||||||
*/
|
|
||||||
//@{
|
|
||||||
#define NUM_SSDP_COPY 2
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name SSDP_PAUSE
|
|
||||||
* This configuration parameter determines the pause between identical SSDP
|
|
||||||
* advertisement and search packets. The pause is measured in milliseconds
|
|
||||||
* and defaults to 100.
|
|
||||||
*/
|
|
||||||
//@{
|
|
||||||
#define SSDP_PAUSE 100
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name WEB_SERVER_BUF_SIZE
|
|
||||||
* This configuration parameter sets the maximum buffer size for the
|
|
||||||
* webserver. The default value is 1MB.
|
|
||||||
*/
|
|
||||||
//@{
|
|
||||||
#define WEB_SERVER_BUF_SIZE (1024*1024)
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name AUTO_RENEW_TIME
|
|
||||||
* The {\tt AUTO_RENEW_TIME} is the time, in seconds, before a subscription
|
|
||||||
* expires that the SDK automatically resubscribes. The default
|
|
||||||
* value is 10 seconds. Setting this value too low can result in the
|
|
||||||
* subscription renewal not making it to the device in time, causing the
|
|
||||||
* subscription to timeout. In order to avoid continually resubscribing
|
|
||||||
* the minimum subscription time is five seconds more than the auto renew
|
|
||||||
* time.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define AUTO_RENEW_TIME 10
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name CP_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
|
|
||||||
* 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
|
|
||||||
* seconds.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define CP_MINIMUM_SUBSCRIPTION_TIME (AUTO_RENEW_TIME + 5)
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name MAX_SEARCH_TIME
|
|
||||||
* The {\tt MAX_SEARCH_TIME} is the maximum time
|
|
||||||
* 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
|
|
||||||
* value is 80 seconds.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define MAX_SEARCH_TIME 80
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name MIN_SEARCH_TIME
|
|
||||||
* The {\tt MIN_SEARCH_TIME} is the minimumm time
|
|
||||||
* 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
|
|
||||||
* value is 2 seconds.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define MIN_SEARCH_TIME 2
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
/** @name AUTO_ADVERTISEMENT_TIME
|
|
||||||
* The {\tt AUTO_ADVERTISEMENT_TIME} is the time, in seconds, before an
|
|
||||||
* device advertisements expires before a renewed advertisement is sent.
|
|
||||||
* The default time is 30 seconds.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define AUTO_ADVERTISEMENT_TIME 30
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name SSDP_PACKET_DISTRIBUTE
|
|
||||||
* 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
|
|
||||||
* minus the AUTO_ADVERTISEMENT_TIME. This is used to increase
|
|
||||||
* the probability of SSDP packets reaching to control points.
|
|
||||||
* It is recommended that this flag be turned on for embedded wireless
|
|
||||||
* devices.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define SSDP_PACKET_DISTRIBUTE 1
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/** @name Module Exclusion
|
|
||||||
* Depending on the requirements, the user can selectively discard any of
|
|
||||||
* the major modules like SOAP, GENA, SSDP or the Internal web server. By
|
|
||||||
* default everything is included inside the SDK. By setting any of
|
|
||||||
* the values below to 0, that component will not be included in the final
|
|
||||||
* SDK.
|
|
||||||
* \begin{itemize}
|
|
||||||
* \item {\tt EXCLUDE_SOAP[0,1]}
|
|
||||||
* \item {\tt EXCLUDE_GENA[0,1]}
|
|
||||||
* \item {\tt EXCLUDE_SSDP[0,1]}
|
|
||||||
* \item {\tt EXCLUDE_DOM [0,1]}
|
|
||||||
* \item {\tt EXCLUDE_MINISERVER[0,1]}
|
|
||||||
* \item {\tt EXCLUDE_WEB_SERVER[0,1]}
|
|
||||||
* \item {\tt EXCLUDE_JNI[0,1]}
|
|
||||||
* \end{itemize}
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define EXCLUDE_SSDP 0
|
|
||||||
#define EXCLUDE_SOAP 0
|
|
||||||
#define EXCLUDE_GENA 0
|
|
||||||
#define EXCLUDE_DOM 0
|
|
||||||
#define EXCLUDE_MINISERVER 0
|
|
||||||
#define EXCLUDE_WEB_SERVER 0
|
|
||||||
#ifdef USE_JNI
|
|
||||||
# define EXCLUDE_JNI 0
|
|
||||||
#else
|
|
||||||
# define EXCLUDE_JNI 1
|
|
||||||
#endif
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
/** @name DEBUG_TARGET
|
|
||||||
* The user has the option to redirect the library output debug messages
|
|
||||||
* to either the screen or to a log file. All the output messages with
|
|
||||||
* debug level 0 will go to {\tt upnp.err} and messages with debug level
|
|
||||||
* greater than zero will be redirected to {\tt upnp.out}.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
#define DEBUG_TARGET 1
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
/** @name Other debugging features
|
|
||||||
The UPnP SDK contains other features to aid in debugging:
|
|
||||||
see <upnp/upnpdebug.h>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define DEBUG_ALL 1
|
|
||||||
#define DEBUG_SSDP 0
|
|
||||||
#define DEBUG_SOAP 0
|
|
||||||
#define DEBUG_GENA 0
|
|
||||||
#define DEBUG_TPOOL 0
|
|
||||||
#define DEBUG_MSERV 0
|
|
||||||
#define DEBUG_DOM 0
|
|
||||||
#define DEBUG_HTTP 0
|
|
||||||
#define DEBUG_API 0
|
|
||||||
|
|
||||||
//@} // Compile time configuration options
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Do not change, Internal purpose only!!!
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
//@{
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set additional defines based on requested configuration
|
|
||||||
*/
|
|
||||||
|
|
||||||
// configure --enable-client
|
|
||||||
#if UPNP_HAVE_CLIENT
|
|
||||||
# define INCLUDE_CLIENT_APIS 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// configure --enable-device
|
|
||||||
#if UPNP_HAVE_DEVICE
|
|
||||||
# define INCLUDE_DEVICE_APIS 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// configure --enable-webserver --enable-device
|
|
||||||
#if UPNP_HAVE_WEBSERVER
|
|
||||||
# define INTERNAL_WEB_SERVER 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#undef EXCLUDE_WEB_SERVER
|
|
||||||
#undef EXCLUDE_MINISERVER
|
|
||||||
#ifdef INTERNAL_WEB_SERVER
|
|
||||||
# define EXCLUDE_WEB_SERVER 0
|
|
||||||
# define EXCLUDE_MINISERVER 0
|
|
||||||
#else
|
|
||||||
# define EXCLUDE_WEB_SERVER 1
|
|
||||||
# define EXCLUDE_MINISERVER 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if EXCLUDE_GENA == 1 && EXCLUDE_SOAP == 1 && EXCLUDE_WEB_SERVER == 1
|
|
||||||
# undef EXCLUDE_MINISERVER
|
|
||||||
# define EXCLUDE_MINISERVER 1
|
|
||||||
# if INTERNAL_WEB_SERVER
|
|
||||||
# error "conflicting settings: use configure --disable-webserver"
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if EXCLUDE_GENA == 0 || EXCLUDE_SOAP == 0 || EXCLUDE_WEB_SERVER == 0
|
|
||||||
# undef EXCLUDE_MINISERVER
|
|
||||||
# define EXCLUDE_MINISERVER 0
|
|
||||||
# if EXCLUDE_WEB_SERVER == 0 && !defined INTERNAL_WEB_SERVER
|
|
||||||
# error "conflicting settings : use configure --enable-webserver"
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef INCLUDE_CLIENT_APIS
|
|
||||||
# define CLIENTONLY(x) x
|
|
||||||
#else
|
|
||||||
# define CLIENTONLY(x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//@}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -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<EFBFBD>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,20 +40,20 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/** The library version (string) e.g. "1.3.0" */
|
/** The library version (string) e.g. "1.3.0" */
|
||||||
#define UPNP_VERSION_STRING "1.4.7"
|
#define UPNP_VERSION_STRING "1.6.10"
|
||||||
|
|
||||||
/** 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 4
|
#define UPNP_VERSION_MINOR 6
|
||||||
|
|
||||||
/** Patch version of the library */
|
/** Patch version of the library */
|
||||||
#define UPNP_VERSION_PATCH 7
|
#define UPNP_VERSION_PATCH 10
|
||||||
|
|
||||||
/** 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 \
|
||||||
((UPNP_VERSION_MAJOR*100 + UPNP_VERSION_MINOR)*100 + UPNP_VERSION_PATCH)
|
((UPNP_VERSION_MAJOR * 100 + UPNP_VERSION_MINOR) * 100 + UPNP_VERSION_PATCH)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -91,7 +91,9 @@
|
|||||||
* (i.e. configure --enable-tools) : <upnp/upnptools.h> file is available */
|
* (i.e. configure --enable-tools) : <upnp/upnptools.h> file is available */
|
||||||
#define UPNP_HAVE_TOOLS 1
|
#define UPNP_HAVE_TOOLS 1
|
||||||
|
|
||||||
|
/** Defined to 1 if the library has been compiled with ipv6 support
|
||||||
|
* (i.e. configure --enable-ipv6) */
|
||||||
|
/* #undef UPNP_ENABLE_IPV6 */
|
||||||
|
|
||||||
#endif // UPNP_CONFIG_H
|
#endif /* UPNP_CONFIG_H */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,17 +5,17 @@
|
|||||||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||||
|
|
||||||
CFG=libupnp - Win32 Debug
|
CFG=libupnp - Win32 Debug
|
||||||
!MESSAGE Dies ist kein g<EFBFBD>ltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
|
!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
|
||||||
!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und f<EFBFBD>hren Sie den Befehl
|
!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "libupnp.mak".
|
!MESSAGE NMAKE /f "libupnp.mak".
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Sie k<EFBFBD>nnen beim Ausf<EFBFBD>hren von NMAKE eine Konfiguration angeben
|
!MESSAGE Sie können beim Ausf?hren von NMAKE eine Konfiguration angeben
|
||||||
!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
|
!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "libupnp.mak" CFG="libupnp - Win32 Debug"
|
!MESSAGE NMAKE /f "libupnp.mak" CFG="libupnp - Win32 Debug"
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE F<EFBFBD>r die Konfiguration stehen zur Auswahl:
|
!MESSAGE Für die Konfiguration stehen zur Auswahl:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE "libupnp - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "libupnp - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "libupnp - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "libupnp - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
||||||
@@ -389,10 +389,6 @@ SOURCE=..\upnp\src\inc\upnpapi.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\upnp\src\inc\upnpclosesocket.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\upnp\src\inc\uri.h
|
SOURCE=..\upnp\src\inc\uri.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|||||||
222
build/msvc/stdint.h
Normal file
222
build/msvc/stdint.h
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
// 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_ ]
|
||||||
217
build/vc8/ixml.vcproj
Normal file
217
build/vc8/ixml.vcproj
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
<?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>
|
||||||
65
build/vc8/libupnp.sln
Normal file
65
build/vc8/libupnp.sln
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
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
|
||||||
650
build/vc8/libupnp.vcproj
Normal file
650
build/vc8/libupnp.vcproj
Normal file
@@ -0,0 +1,650 @@
|
|||||||
|
<?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\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>
|
||||||
213
build/vc8/threadutil.vcproj
Normal file
213
build/vc8/threadutil.vcproj
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
<?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>
|
||||||
216
build/vc8/tvcombo.vcproj
Normal file
216
build/vc8/tvcombo.vcproj
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="tvcombo"
|
||||||
|
ProjectGUID="{B5D74697-F615-4DCB-AA8B-935F6372F01C}"
|
||||||
|
RootNamespace="tvcombo"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvcombo;..\..\upnp\sample\tvcombo\linux"
|
||||||
|
PreprocessorDefinitions="WIN32;DEBUG"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
|
||||||
|
AdditionalLibraryDirectories=""$(OutDir)";"out.vc8.$(ConfigurationName)\ixml";"out.vc8.$(ConfigurationName)\threadutil";"out.vc8.$(ConfigurationName)\libupnp""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\linux\upnp_tv_combo_main.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
208
build/vc8/tvctrlpt.vcproj
Normal file
208
build/vc8/tvctrlpt.vcproj
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="tvctrlpt"
|
||||||
|
ProjectGUID="{BC1557D9-9E84-4BA5-861E-CB04D767FBDC}"
|
||||||
|
RootNamespace="tvctrlpt"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvctrlpt;..\..\upnp\sample\tvctrlpt\linux"
|
||||||
|
PreprocessorDefinitions="WIN32;DEBUG"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
|
||||||
|
AdditionalLibraryDirectories=""$(OutDir)";"out.vc8.$(ConfigurationName)\ixml";"out.vc8.$(ConfigurationName)\threadutil";"out.vc8.$(ConfigurationName)\libupnp""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvctrlpt\linux\upnp_tv_ctrlpt_main.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
208
build/vc8/tvdevice.vcproj
Normal file
208
build/vc8/tvdevice.vcproj
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="tvdevice"
|
||||||
|
ProjectGUID="{F592B023-E1F3-4A1E-841E-662DEE497435}"
|
||||||
|
RootNamespace="tvdevice"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
IntermediateDirectory=".\out.vc8.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvdevice;..\..\upnp\sample\tvdevice\linux"
|
||||||
|
PreprocessorDefinitions="WIN32;DEBUG"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
|
||||||
|
AdditionalLibraryDirectories=""$(OutDir)";"out.vc8.$(ConfigurationName)\ixml";"out.vc8.$(ConfigurationName)\threadutil";"out.vc8.$(ConfigurationName)\libupnp""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvdevice\linux\upnp_tv_device_main.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
216
build/vc9/ixml.vcproj
Normal file
216
build/vc9/ixml.vcproj
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
<?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>
|
||||||
63
build/vc9/libupnp.sln
Normal file
63
build/vc9/libupnp.sln
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
|
||||||
|
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
|
||||||
646
build/vc9/libupnp.vcproj
Normal file
646
build/vc9/libupnp.vcproj
Normal file
@@ -0,0 +1,646 @@
|
|||||||
|
<?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\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>
|
||||||
216
build/vc9/threadutil.vcproj
Normal file
216
build/vc9/threadutil.vcproj
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
<?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>
|
||||||
214
build/vc9/tvcombo.vcproj
Normal file
214
build/vc9/tvcombo.vcproj
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9,00"
|
||||||
|
Name="tvcombo"
|
||||||
|
ProjectGUID="{6365804B-22C6-4D5E-91F3-0C052EB55B4F}"
|
||||||
|
RootNamespace="tvcombo"
|
||||||
|
TargetFrameworkVersion="196613"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\upnp\sample\common;..\..\upnp\sample;..\..\ixml\inc;..\..\pthreads\include;..\inc;..\..\threadutil\inc;..\..\upnp\sample\tvcombo"
|
||||||
|
PreprocessorDefinitions="DEBUG;WIN32"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib $(TargetDir)..\libupnp\libupnp.lib"
|
||||||
|
AdditionalLibraryDirectories=""$(TargetDir)..\ixml";"$(TargetDir)..\threadutil";"$(TargetDir)..\libupnp""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
EnableIntrinsicFunctions="true"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
CompileAs="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\linux\upnp_tv_combo_main.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_ctrlpt.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvcombo\upnp_tv_device.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
204
build/vc9/tvctrlpt.vcproj
Normal file
204
build/vc9/tvctrlpt.vcproj
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9.00"
|
||||||
|
Name="tvctrlpt"
|
||||||
|
ProjectGUID="{8FB56F1C-E617-4B79-96AE-1FA499A3A9B5}"
|
||||||
|
RootNamespace="sample"
|
||||||
|
TargetFrameworkVersion="196613"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\upnp\sample\common;..\..\ixml\inc;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvctrlpt\linux;..\..\upnp\sample\tvctrlpt"
|
||||||
|
PreprocessorDefinitions="WIN32;DEBUG"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
|
||||||
|
AdditionalLibraryDirectories=""$(OutDir)";".\out.vc9.$(ConfigurationName)\ixml";".\out.vc9.$(ConfigurationName)\threadutil";".\out.vc9.$(ConfigurationName)\libupnp""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
EnableIntrinsicFunctions="true"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvctrlpt\linux\upnp_tv_ctrlpt_main.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvctrlpt\upnp_tv_ctrlpt.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
204
build/vc9/tvdevice.vcproj
Normal file
204
build/vc9/tvdevice.vcproj
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9.00"
|
||||||
|
Name="tvdevice"
|
||||||
|
ProjectGUID="{7FB5F4A6-74F9-471D-B358-BAA0AC1CCA0A}"
|
||||||
|
RootNamespace="tvdevice"
|
||||||
|
TargetFrameworkVersion="196613"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
IntermediateDirectory=".\out.vc9.$(ConfigurationName)\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\upnp\inc;..\..\ixml\inc;..\..\upnp\sample\common;..\inc;..\..\threadutil\inc;..\..\pthreads\include;..\..\upnp\sample\tvdevice;..\..\upnp\sample\tvdevice\linux"
|
||||||
|
PreprocessorDefinitions="WIN32;DEBUG"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="..\..\pthreads\lib\pthreadVC2.lib ixml.lib threadutil.lib libupnp.lib"
|
||||||
|
AdditionalLibraryDirectories=""$(OutDir)";".\out.vc9.$(ConfigurationName)\ixml";".\out.vc9.$(ConfigurationName)\threadutil";".\out.vc9.$(ConfigurationName)\libupnp""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
EnableIntrinsicFunctions="true"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvdevice\linux\upnp_tv_device_main.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\common\sample_util.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\upnp\sample\tvdevice\upnp_tv_device.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
398
configure.ac
398
configure.ac
@@ -4,73 +4,235 @@
|
|||||||
#
|
#
|
||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
#
|
#
|
||||||
# (C) Copyright 2005-2006 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
|
# (C) Copyright 2005-2007 Rémi Turboult <r3mi@users.sourceforge.net>
|
||||||
#
|
#
|
||||||
|
|
||||||
AC_PREREQ(2.60)
|
AC_PREREQ(2.60)
|
||||||
|
|
||||||
AC_INIT([libupnp], [1.6.0], [mroberto@users.sourceforge.net])
|
AC_INIT([libupnp], [1.6.10], [mroberto@users.sourceforge.net])
|
||||||
# *Independently* of the above libupnp package version, the libtool version
|
dnl ############################################################################
|
||||||
# of the 3 libraries need to be updated whenever there is a change released :
|
dnl # *Independently* of the above libupnp package version, the libtool version
|
||||||
# "current:revision:age" (this is NOT the same as the package version), where:
|
dnl # of the 3 libraries need to be updated whenever there is a change released:
|
||||||
# - library code modified: revision++
|
dnl # "current:revision:age" (this is NOT the same as the package version),
|
||||||
# - interfaces changed/added/removed: current++ and revision=0
|
dnl # where:
|
||||||
# - interfaces added: age++
|
dnl # - library code modified: revision++
|
||||||
# - interfaces removed: age=0
|
dnl # - interfaces changed/added/removed: current++ and revision=0
|
||||||
# *please update only once, before a formal release, not for each change*
|
dnl # - interfaces added: age++
|
||||||
#
|
dnl # - interfaces removed: age=0
|
||||||
# For release 1.4.1, we had:
|
dnl # *please update only once, before a formal release, not for each change*
|
||||||
#AC_SUBST([LT_VERSION_IXML], [2:2:0])
|
dnl #
|
||||||
#AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0])
|
dnl ############################################################################
|
||||||
#AC_SUBST([LT_VERSION_UPNP], [2:2:0])
|
dnl # Release 1.4.1:
|
||||||
#
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:2:0])
|
||||||
# "current:revision:age"
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0])
|
||||||
#
|
dnl #AC_SUBST([LT_VERSION_UPNP], [2:2:0])
|
||||||
# - Code has changed in ixml
|
dnl #
|
||||||
# revision: 2 -> 3
|
dnl ############################################################################
|
||||||
# - Code has changed in threadutil
|
dnl # Release 1.4.6:
|
||||||
# revision: 2 -> 3
|
dnl # "current:revision:age"
|
||||||
# - Interface added in threadutil
|
dnl #
|
||||||
# current: 2 -> 3
|
dnl # - Code has changed in ixml
|
||||||
# revisiion: 3 -> 0
|
dnl # revision: 2 -> 3
|
||||||
# age: 0 -> 1
|
dnl # - Code has changed in threadutil
|
||||||
# - Code has changed in upnp
|
dnl # revision: 2 -> 3
|
||||||
# revision: 2 -> 3
|
dnl # - Interface added in threadutil
|
||||||
#
|
dnl # current: 2 -> 3
|
||||||
# For release 1.4.6, we had:
|
dnl # revisiion: 3 -> 0
|
||||||
#AC_SUBST([LT_VERSION_IXML], [2:3:0])
|
dnl # age: 0 -> 1
|
||||||
#AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1])
|
dnl # - Code has changed in upnp
|
||||||
#AC_SUBST([LT_VERSION_UPNP], [2:3:0])
|
dnl # revision: 2 -> 3
|
||||||
#
|
dnl #
|
||||||
# "current:revision:age"
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:3:0])
|
||||||
#
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1])
|
||||||
# - Code has changed in ixml
|
dnl #AC_SUBST([LT_VERSION_UPNP], [2:3:0])
|
||||||
# revision: 3 -> 4
|
dnl #
|
||||||
# - Code has changed in threadutil
|
dnl ############################################################################
|
||||||
# revision: 0 -> 1
|
dnl # Release 1.6.0:
|
||||||
# - Code has changed in upnp
|
dnl # "current:revision:age"
|
||||||
# revision: 3 -> 4
|
dnl #
|
||||||
# - Interface changed in upnp
|
dnl # - Code has changed in ixml
|
||||||
# current: 2 -> 3
|
dnl # revision: 3 -> 4
|
||||||
# revision: 4 -> 0
|
dnl # - Code has changed in threadutil
|
||||||
# - Interface removed in upnp
|
dnl # revision: 0 -> 1
|
||||||
# age: 0 -> 0
|
dnl # - Code has changed in upnp
|
||||||
#
|
dnl # revision: 3 -> 4
|
||||||
# For release 1.6.0, we had:
|
dnl # - Interface changed in upnp
|
||||||
#AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
dnl # current: 2 -> 3
|
||||||
#AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1])
|
dnl # revision: 4 -> 0
|
||||||
#AC_SUBST([LT_VERSION_UPNP], [3:0:0])
|
dnl # - Interface removed in upnp
|
||||||
AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
dnl # age: 0 -> 0
|
||||||
AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1])
|
dnl #
|
||||||
AC_SUBST([LT_VERSION_UPNP], [3:0:0])
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:0:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.1:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 1 -> 2
|
||||||
|
dnl # - Interface added in threadutil
|
||||||
|
dnl # current: 3 -> 4
|
||||||
|
dnl # revision: 2 -> 0
|
||||||
|
dnl # - Interface added in threadutil
|
||||||
|
dnl # age: 1 -> 2
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 0 -> 1
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:1:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.2:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 1 -> 2
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:2:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.3:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 0 -> 1
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:1:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:2:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.4:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 1 -> 2
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 2 -> 3
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:3:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.5:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 3 -> 4
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:4:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.6:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 2 -> 3
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 4 -> 5
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:3:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:5:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.7:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 3 -> 4
|
||||||
|
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 # - Interfaces removed in upnp:
|
||||||
|
dnl # age: -> 0
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:4:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [5:0:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [3:5:0])
|
||||||
|
dnl #
|
||||||
|
dnl # Obs.: 1.6.7 was released with a version error, the correct nubers should
|
||||||
|
dnl # have been:
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [4:0:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.8:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in ixml
|
||||||
|
dnl # revision: 4 -> 5
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 0 -> 1
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 0 -> 1
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:5:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [5:1:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [4:1:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.9:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 1 -> 2
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 1 -> 2
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:5:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [5:2:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [4:2:0])
|
||||||
|
dnl #
|
||||||
|
dnl ############################################################################
|
||||||
|
dnl # Release 1.6.10:
|
||||||
|
dnl # "current:revision:age"
|
||||||
|
dnl #
|
||||||
|
dnl # - Code has changed inxml
|
||||||
|
dnl # revision: 5 -> 6
|
||||||
|
dnl # - Code has changed in threadutil
|
||||||
|
dnl # revision: 2 -> 3
|
||||||
|
dnl # - Code has changed in upnp
|
||||||
|
dnl # revision: 2 -> 3
|
||||||
|
dnl # - interface has changed in upnp
|
||||||
|
dnl # current: 4 -> 5
|
||||||
|
dnl # revision: 3 -> 0
|
||||||
|
dnl #
|
||||||
|
dnl #AC_SUBST([LT_VERSION_IXML], [2:6:0])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_THREADUTIL], [5:3:2])
|
||||||
|
dnl #AC_SUBST([LT_VERSION_UPNP], [5:0:0])
|
||||||
|
dnl #
|
||||||
|
############################################################################
|
||||||
|
AC_SUBST([LT_VERSION_IXML], [2:6:0])
|
||||||
|
AC_SUBST([LT_VERSION_THREADUTIL], [5:3:2])
|
||||||
|
AC_SUBST([LT_VERSION_UPNP], [5: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(config.aux)
|
AC_CONFIG_AUX_DIR([build-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
|
||||||
#
|
#
|
||||||
@@ -95,8 +257,7 @@ 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",
|
AC_DEFINE_UNQUOTED([UPNP_VERSION_STRING], "$PACKAGE_VERSION", [see upnpconfig.h])
|
||||||
[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])
|
||||||
@@ -118,7 +279,6 @@ 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])
|
||||||
@@ -148,15 +308,32 @@ if test "x$enable_tools" = xyes ; then
|
|||||||
AC_DEFINE(UPNP_HAVE_TOOLS, 1, [see upnpconfig.h])
|
AC_DEFINE(UPNP_HAVE_TOOLS, 1, [see upnpconfig.h])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
RT_BOOL_ARG_ENABLE([ipv6], [no], [ipv6 support])
|
||||||
|
if test "x$enable_ipv6" = xyes ; then
|
||||||
|
AC_DEFINE(UPNP_ENABLE_IPV6, 1, [see upnpconfig.h])
|
||||||
|
fi
|
||||||
|
|
||||||
|
RT_BOOL_ARG_ENABLE([notification_reordering], [yes], [GENA notification reordering in gena_device.c])
|
||||||
|
if test "x$enable_notification_reordering" = xyes ; then
|
||||||
|
AC_DEFINE(UPNP_ENABLE_NOTIFICATION_REORDERING, 1, [see upnpconfig.h])
|
||||||
|
fi
|
||||||
|
|
||||||
|
RT_BOOL_ARG_ENABLE([blocking_tcp_connections], [yes], [blocking TCP connections])
|
||||||
|
if test "x$enable_blocking_tcp_connections" = xyes ; then
|
||||||
|
AC_DEFINE(UPNP_ENABLE_BLOCKING_TCP_CONNECTIONS, 1, [see upnpconfig.h])
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code])
|
RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code])
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
# doc installation
|
# doc installation
|
||||||
# autoconf >= 2.60 already defines ${docdir}, but we will not use its
|
# autoconf >= 2.60 already defines ${docdir}, but we will not use its
|
||||||
# default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}.
|
# default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}.
|
||||||
# That would give us ${datarootdir}/doc/libupnp, and we want the package
|
# That would give us ${datarootdir}/doc/libupnp, and we want the package
|
||||||
# version on that.
|
# version on that.
|
||||||
|
#
|
||||||
docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"
|
docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"
|
||||||
AC_MSG_CHECKING([for documentation directory])
|
AC_MSG_CHECKING([for documentation directory])
|
||||||
AC_ARG_WITH(
|
AC_ARG_WITH(
|
||||||
@@ -171,7 +348,9 @@ 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
|
||||||
@@ -205,7 +384,9 @@ 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])
|
||||||
@@ -227,9 +408,26 @@ AC_DEFINE([_FILE_OFFSET_BITS], [64], [File Offset size])
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Checks for header files
|
# Are we targetting Win32?
|
||||||
|
#
|
||||||
|
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(
|
||||||
@@ -245,20 +443,43 @@ 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
|
|
||||||
TYPE_SOCKLEN_T
|
# The test for socklen_t was getting it wrong when it exists but is in ws2tcpip.h,
|
||||||
|
# so we use a new test.
|
||||||
|
#TYPE_SOCKLEN_T
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS([sys/types.h sys/socket.h ws2tcpip.h])
|
||||||
|
AC_MSG_CHECKING(for socklen_t)
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
],[ socklen_t t = 0; return t; ])
|
||||||
|
],[ac_cv_socklen_t="yes"],[ac_cv_socklen_t="no"])
|
||||||
|
if test "$ac_cv_socklen_t" = "yes"; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no, using int])
|
||||||
|
AC_DEFINE(socklen_t, int, [Type for storing the length of struct sockaddr])
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -266,15 +487,50 @@ TYPE_SOCKLEN_T
|
|||||||
#
|
#
|
||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_FUNC_FSEEKO
|
AC_FUNC_FSEEKO
|
||||||
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([
|
||||||
@@ -292,3 +548,11 @@ AC_CONFIG_FILES([
|
|||||||
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
|
#
|
||||||
|
# Files copied for windows compilation.
|
||||||
|
#
|
||||||
|
echo "configure: copying \"autoconfig.h\" to \"build/inc/autoconfig.h\""
|
||||||
|
cp autoconfig.h build/inc/autoconfig.h
|
||||||
|
echo "configure: copying \"upnp/inc/upnpconfig.h\" to \"build/inc/upnpconfig.h\""
|
||||||
|
cp upnp/inc/upnpconfig.h build/inc/upnpconfig.h
|
||||||
|
|
||||||
|
|||||||
4
docs/dist/Makefile.am
vendored
4
docs/dist/Makefile.am
vendored
@@ -39,7 +39,7 @@ EXTRA_DIST = \
|
|||||||
./html/upnp/UPNP_E_SOCKET_ERROR-208.html \
|
./html/upnp/UPNP_E_SOCKET_ERROR-208.html \
|
||||||
./html/upnp/UPNP_E_CANCELED-210.html \
|
./html/upnp/UPNP_E_CANCELED-210.html \
|
||||||
./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \
|
./html/upnp/UPNP_E_SUBSCRIBE_UNACCEPTED-301.html \
|
||||||
./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCAPTED-302.html \
|
./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCEPTED-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_UNACCAPTED-302.html \
|
./html/upnp/UPNP_E_UNSUBSCRIBE_UNACCEPTED-302.html \
|
||||||
./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \
|
./html/upnp/UPNP_E_NOTIFY_UNACCEPTED-303.html \
|
||||||
./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \
|
./html/upnp/UPNP_E_INVALID_ARGUMENT-501.html \
|
||||||
./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \
|
./html/upnp/UPNP_E_FILE_NOT_FOUND-502.html \
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# "Makefile.am" for "libupnp/ixml"
|
# "Makefile.am" for "libupnp/ixml"
|
||||||
#
|
#
|
||||||
# (C) Copyright 2005 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
|
# (C) Copyright 2005 Rémi Turboult <r3mi@users.sourceforge.net>
|
||||||
#
|
#
|
||||||
|
|
||||||
SUBDIRS = doc
|
SUBDIRS = doc
|
||||||
@@ -24,15 +24,23 @@ libixml_la_LDFLAGS = -version-info $(LT_VERSION_IXML) \
|
|||||||
-export-symbols-regex '^ixml.*'
|
-export-symbols-regex '^ixml.*'
|
||||||
|
|
||||||
libixml_la_SOURCES = \
|
libixml_la_SOURCES = \
|
||||||
src/ixml.c src/node.c src/ixmlparser.c \
|
src/attr.c \
|
||||||
src/ixmlmembuf.c src/nodeList.c \
|
src/document.c \
|
||||||
src/element.c src/attr.c src/document.c \
|
src/element.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/inc/ixmlmembuf.h src/inc/ixmlparser.h
|
src/node.c \
|
||||||
|
src/nodeList.c
|
||||||
|
|
||||||
upnpincludedir = $(includedir)/upnp
|
upnpincludedir = $(includedir)/upnp
|
||||||
upnpinclude_HEADERS = inc/ixml.h
|
upnpinclude_HEADERS = \
|
||||||
|
inc/ixml.h \
|
||||||
|
inc/ixmldebug.h
|
||||||
|
|
||||||
check_PROGRAMS = test_document
|
check_PROGRAMS = test_document
|
||||||
TESTS = test/test_document.sh
|
TESTS = test/test_document.sh
|
||||||
@@ -47,4 +55,3 @@ dist-hook:
|
|||||||
clean-local:
|
clean-local:
|
||||||
@if [ -d bin ] ; then rm -rf bin ; fi
|
@if [ -d bin ] ; then rm -rf bin ; fi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
3236
ixml/inc/ixml.h
3236
ixml/inc/ixml.h
File diff suppressed because it is too large
Load Diff
72
ixml/inc/ixmldebug.h
Normal file
72
ixml/inc/ixmldebug.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#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,
|
||||||
|
...)
|
||||||
|
{
|
||||||
|
FmtStr = 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)
|
||||||
|
{
|
||||||
|
tmpRoot = tmpRoot;
|
||||||
|
depth = depth;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* IXMLDEBUG_H */
|
||||||
|
|
||||||
@@ -1,60 +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.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "ixmlparser.h"
|
#include "ixmlparser.h"
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* Function: Attr_init
|
#include <string.h>
|
||||||
* 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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* Function: Attr_free
|
void ixmlAttr_free(IN IXML_Attr *attr)
|
||||||
* 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1135
ixml/src/document.c
1135
ixml/src/document.c
File diff suppressed because it is too large
Load Diff
1435
ixml/src/element.c
1435
ixml/src/element.c
File diff suppressed because it is too large
Load Diff
@@ -1,77 +1,173 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
// All rights reserved.
|
* All rights reserved.
|
||||||
//
|
*
|
||||||
// Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
//
|
*
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
* without specific prior written permission.
|
||||||
//
|
*
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
**************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef IXML_MEMBUF_H
|
||||||
|
#define IXML_MEMBUF_H
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef _IXML_MEMBUF_H
|
|
||||||
#define _IXML_MEMBUF_H
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ixml.h"
|
#include "ixml.h"
|
||||||
|
|
||||||
#define MINVAL( a, b ) ( (a) < (b) ? (a) : (b) )
|
|
||||||
#define MAXVAL( a, b ) ( (a) > (b) ? (a) : (b) )
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#include <stdlib.h> /* for size_t */
|
||||||
#define UPNP_INLINE inline
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MEMBUF_DEF_SIZE_INC 20
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct // ixml_membuf
|
#define MINVAL(a, b) ( (a) < (b) ? (a) : (b) )
|
||||||
|
#define MAXVAL(a, b) ( (a) > (b) ? (a) : (b) )
|
||||||
|
|
||||||
|
|
||||||
|
#define MEMBUF_DEF_SIZE_INC 20
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief The ixml_membuf type.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
|
size_t length;
|
||||||
size_t length;
|
size_t capacity;
|
||||||
size_t capacity;
|
size_t size_inc;
|
||||||
size_t size_inc;
|
|
||||||
|
|
||||||
} ixml_membuf;
|
} ixml_membuf;
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
//////////////// functions /////////////////////////
|
|
||||||
//--------------------------------------------------
|
|
||||||
/*
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif // __cplusplus
|
|
||||||
*/
|
|
||||||
|
|
||||||
void ixml_membuf_init(INOUT ixml_membuf *m);
|
/*!
|
||||||
void ixml_membuf_destroy(INOUT ixml_membuf *m);
|
* \brief ixml_membuf initialization routine.
|
||||||
int ixml_membuf_assign(INOUT ixml_membuf *m, IN const void *buf,
|
*/
|
||||||
IN size_t buf_len );
|
void ixml_membuf_init(
|
||||||
int ixml_membuf_assign_str(INOUT ixml_membuf *m, IN const char *c_str );
|
/*! [in,out] The memory buffer to initializa. */
|
||||||
int ixml_membuf_append(INOUT ixml_membuf *m, IN const void *buf);
|
ixml_membuf *m);
|
||||||
int ixml_membuf_append_str(INOUT ixml_membuf *m, IN const char *c_str);
|
|
||||||
int ixml_membuf_insert(INOUT ixml_membuf *m, IN const void* buf,
|
|
||||||
IN size_t buf_len, int index );
|
/*!
|
||||||
|
* \brief ixml_membuf clearing routine.
|
||||||
|
*
|
||||||
|
* The internal buffer is deleted and ixml_membuf_init() is called in the end
|
||||||
|
* to reinitialize the buffer.
|
||||||
|
*/
|
||||||
|
void ixml_membuf_destroy(
|
||||||
|
/*! [in,out] The memory buffer to clear. */
|
||||||
|
ixml_membuf *m);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Copies the contents o a buffer to the designated ixml_membuf.
|
||||||
|
*
|
||||||
|
* The previous contents of the ixml_membuf are destroyed.
|
||||||
|
*
|
||||||
|
* \return IXML_SUCCESS if successfull, or the error code returned
|
||||||
|
* by ixml_membuf_set_size().
|
||||||
|
*
|
||||||
|
* \sa ixml_membuf_assign_str().
|
||||||
|
*/
|
||||||
|
int ixml_membuf_assign(
|
||||||
|
/*! [in,out] The memory buffer on which to operate. */
|
||||||
|
ixml_membuf *m,
|
||||||
|
/*! [in] The input buffer to copy from. */
|
||||||
|
const void *buf,
|
||||||
|
/*! [in] The number of bytes to copy from the input buffer. */
|
||||||
|
size_t buf_len);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Copies a \b NULL terminated string to the ixml_buffer.
|
||||||
|
*
|
||||||
|
* This is a convenience function that internally uses ixml_membuf_assign().
|
||||||
|
*
|
||||||
|
* \return The return value of ixml_membuf_assign().
|
||||||
|
*
|
||||||
|
* \sa ixml_membuf_assign().
|
||||||
|
*/
|
||||||
|
int ixml_membuf_assign_str(
|
||||||
|
/*! [in,out] The memory buffer on which to operate. */
|
||||||
|
ixml_membuf *m,
|
||||||
|
/*! [in] The input string to copy from. */
|
||||||
|
const char *c_str);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Appends one byte to the designated ixml_membuffer.
|
||||||
|
*
|
||||||
|
* This is a convenience function that internally uses ixml_membuf_insert().
|
||||||
|
*
|
||||||
|
* \return The return value of ixml_membuf_insert().
|
||||||
|
*
|
||||||
|
* \sa ixml_membuf_insert()
|
||||||
|
*/
|
||||||
|
int ixml_membuf_append(
|
||||||
|
/*! [in,out] The memory buffer on which to operate. */
|
||||||
|
ixml_membuf *m,
|
||||||
|
/*! [in] The pointer to the byte to append. */
|
||||||
|
const void *buf);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Appends the contents of a \b NULL terminated string to the designated
|
||||||
|
* ixml_membuf.
|
||||||
|
*
|
||||||
|
* This is a convenience function that internally uses ixml_membuf_insert().
|
||||||
|
*
|
||||||
|
* \return The return value of ixml_membuf_insert().
|
||||||
|
*
|
||||||
|
* \sa ixml_membuf_insert().
|
||||||
|
*/
|
||||||
|
int ixml_membuf_append_str(
|
||||||
|
/*! [in,out] The memory buffer on which to operate. */
|
||||||
|
ixml_membuf *m,
|
||||||
|
/*! [in] The input string to copy from. */
|
||||||
|
const char *c_str);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief
|
||||||
|
*
|
||||||
|
* \return
|
||||||
|
* \li 0 if successfull.
|
||||||
|
* \li IXML_INDEX_SIZE_ERR if the index parameter is out of range.
|
||||||
|
* \li Or the return code of ixml_membuf_set_size()
|
||||||
|
*
|
||||||
|
* \sa ixml_membuf_set_size()
|
||||||
|
*/
|
||||||
|
int ixml_membuf_insert(
|
||||||
|
/*! [in,out] The memory buffer on which to operate. */
|
||||||
|
ixml_membuf *m,
|
||||||
|
/*! [in] The pointer to the input buffer. */
|
||||||
|
const void *buf,
|
||||||
|
/*! [in] The buffer length. */
|
||||||
|
size_t buf_len,
|
||||||
|
/*! [in] The point of insertion relative to the beggining of the
|
||||||
|
* ixml_membuf internal buffer. */
|
||||||
|
size_t index);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* IXML_MEMBUF_H */
|
||||||
|
|
||||||
#endif // _IXML_MEMBUF_H
|
|
||||||
|
|||||||
@@ -1,41 +1,49 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// 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
|
#ifndef IXMLPARSER_H
|
||||||
|
#define IXMLPARSER_H
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "ixml.h"
|
#include "ixml.h"
|
||||||
#include "ixmlmembuf.h"
|
#include "ixmlmembuf.h"
|
||||||
|
|
||||||
// Parser definitions
|
|
||||||
|
/* Parser definitions */
|
||||||
#define QUOT """
|
#define QUOT """
|
||||||
#define LT "<"
|
#define LT "<"
|
||||||
#define GT ">"
|
#define GT ">"
|
||||||
@@ -44,77 +52,218 @@
|
|||||||
#define ESC_HEX "&#x"
|
#define ESC_HEX "&#x"
|
||||||
#define ESC_DEC "&#"
|
#define ESC_DEC "&#"
|
||||||
|
|
||||||
|
|
||||||
typedef struct _IXML_NamespaceURI
|
typedef struct _IXML_NamespaceURI
|
||||||
{
|
{
|
||||||
char *nsURI;
|
char *nsURI;
|
||||||
char *prefix;
|
char *prefix;
|
||||||
struct _IXML_NamespaceURI *nextNsURI;
|
struct _IXML_NamespaceURI *nextNsURI;
|
||||||
} IXML_NamespaceURI;
|
} IXML_NamespaceURI;
|
||||||
|
|
||||||
|
|
||||||
typedef struct _IXML_ElementStack
|
typedef struct _IXML_ElementStack
|
||||||
{
|
{
|
||||||
char *element;
|
char *element;
|
||||||
char *prefix;
|
char *prefix;
|
||||||
char *namespaceUri;
|
char *namespaceUri;
|
||||||
IXML_NamespaceURI *pNsURI;
|
IXML_NamespaceURI *pNsURI;
|
||||||
struct _IXML_ElementStack *nextElement;
|
struct _IXML_ElementStack *nextElement;
|
||||||
} IXML_ElementStack;
|
} IXML_ElementStack;
|
||||||
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
eELEMENT,
|
eELEMENT,
|
||||||
eATTRIBUTE,
|
eATTRIBUTE,
|
||||||
eCONTENT,
|
eCONTENT,
|
||||||
} PARSER_STATE;
|
} PARSER_STATE;
|
||||||
|
|
||||||
|
|
||||||
typedef struct _Parser
|
typedef struct _Parser
|
||||||
{
|
{
|
||||||
char *dataBuffer; //data buffer
|
/*! Data buffer. */
|
||||||
char *curPtr; //ptr to the token parsed
|
char *dataBuffer;
|
||||||
char *savePtr; //Saves for backup
|
/*! Pointer to the token parsed. */
|
||||||
ixml_membuf lastElem;
|
char *curPtr;
|
||||||
ixml_membuf tokenBuf;
|
/*! Saves for backup. */
|
||||||
|
char *savePtr;
|
||||||
IXML_Node *pNeedPrefixNode;
|
ixml_membuf lastElem;
|
||||||
IXML_ElementStack *pCurElement;
|
ixml_membuf tokenBuf;
|
||||||
IXML_Node *currentNodePtr;
|
IXML_Node *pNeedPrefixNode;
|
||||||
PARSER_STATE state;
|
IXML_ElementStack *pCurElement;
|
||||||
|
IXML_Node *currentNodePtr;
|
||||||
BOOL bHasTopLevel;
|
PARSER_STATE state;
|
||||||
|
BOOL bHasTopLevel;
|
||||||
} Parser;
|
} Parser;
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Check to see whether name is a valid xml name.
|
||||||
|
*/
|
||||||
|
BOOL Parser_isValidXmlName(
|
||||||
|
/*! [in] The string to be checked. */
|
||||||
|
const DOMString name);
|
||||||
|
|
||||||
int Parser_LoadDocument( IXML_Document **retDoc, const char * xmlFile, BOOL file);
|
|
||||||
BOOL Parser_isValidXmlName( const DOMString name);
|
|
||||||
int Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr);
|
|
||||||
void Parser_freeNodeContent( IXML_Node *IXML_Nodeptr);
|
|
||||||
|
|
||||||
void Parser_setErrorChar( char c );
|
/*!
|
||||||
|
* \brief Sets the error character.
|
||||||
|
*
|
||||||
|
* If 'c' is 0 (default), the parser is strict about XML encoding:
|
||||||
|
* invalid UTF-8 sequences or "&" entities are rejected, and the parsing
|
||||||
|
* aborts.
|
||||||
|
*
|
||||||
|
* If 'c' is not 0, the parser is relaxed: invalid UTF-8 characters
|
||||||
|
* are replaced by this character, and invalid "&" entities are left
|
||||||
|
* untranslated. The parsing is then allowed to continue.
|
||||||
|
*/
|
||||||
|
void Parser_setErrorChar(
|
||||||
|
/*! [in] The character to become the error character. */
|
||||||
|
char c);
|
||||||
|
|
||||||
void ixmlAttr_free(IXML_Attr *attrNode);
|
|
||||||
void ixmlAttr_init(IXML_Attr *attrNode);
|
|
||||||
|
|
||||||
int ixmlElement_setTagName(IXML_Element *element, const char *tagName);
|
/*!
|
||||||
|
* \brief Fees a node contents.
|
||||||
|
*/
|
||||||
|
void Parser_freeNodeContent(
|
||||||
|
/*! [in] The Node to process. */
|
||||||
|
IXML_Node *IXML_Nodeptr);
|
||||||
|
|
||||||
void ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap);
|
int Parser_LoadDocument(IXML_Document **retDoc, const char * xmlFile, BOOL file);
|
||||||
int ixmlNamedNodeMap_addToNamedNodeMap(IXML_NamedNodeMap **nnMap, IXML_Node *add);
|
|
||||||
|
|
||||||
void ixmlNode_init(IXML_Node *IXML_Nodeptr);
|
int Parser_setNodePrefixAndLocalName(IXML_Node *newIXML_NodeIXML_Attr);
|
||||||
BOOL ixmlNode_compare(IXML_Node *srcIXML_Node, IXML_Node *destIXML_Node);
|
|
||||||
|
|
||||||
void ixmlNode_getElementsByTagName( IXML_Node *n, const char *tagname, IXML_NodeList **list);
|
|
||||||
void ixmlNode_getElementsByTagNameNS( IXML_Node *IXML_Node, const char *namespaceURI,
|
|
||||||
const char *localName, IXML_NodeList **list);
|
|
||||||
|
|
||||||
int ixmlNode_setNodeProperties(IXML_Node* node, IXML_Node *src);
|
void ixmlAttr_init(IXML_Attr *attrNode);
|
||||||
int ixmlNode_setNodeName( IXML_Node* node, const DOMString qualifiedName);
|
|
||||||
|
|
||||||
void ixmlNodeList_init(IXML_NodeList *nList);
|
/*!
|
||||||
int ixmlNodeList_addToNodeList(IXML_NodeList **nList, IXML_Node *add);
|
* \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);
|
||||||
|
|
||||||
#endif // _IXMLPARSER_H
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes a NamedNodeMap object.
|
||||||
|
*/
|
||||||
|
void ixmlNamedNodeMap_init(
|
||||||
|
/*! [in] The named node map to process. */
|
||||||
|
IXML_NamedNodeMap *nnMap);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Add a node to a NamedNodeMap.
|
||||||
|
*
|
||||||
|
* \return IXML_SUCCESS or failure.
|
||||||
|
*/
|
||||||
|
int ixmlNamedNodeMap_addToNamedNodeMap(
|
||||||
|
/* [in] The named node map. */
|
||||||
|
IXML_NamedNodeMap **nnMap,
|
||||||
|
/* [in] The node to add. */
|
||||||
|
IXML_Node *add);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Add a node to nodelist.
|
||||||
|
*/
|
||||||
|
int ixmlNodeList_addToNodeList(
|
||||||
|
/*! [in] The pointer to the nodelist. */
|
||||||
|
IXML_NodeList **nList,
|
||||||
|
/*! [in] The node to add. */
|
||||||
|
IXML_Node *add);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Intializes a node.
|
||||||
|
*/
|
||||||
|
void ixmlNode_init(
|
||||||
|
/*! [in] The \b Node to iniatialize. */
|
||||||
|
IN IXML_Node *nodeptr);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Compare two nodes to see whether they are the same node.
|
||||||
|
* Parent, sibling and children node are ignored.
|
||||||
|
*
|
||||||
|
* \return
|
||||||
|
* \li TRUE, the two nodes are the same.
|
||||||
|
* \li FALSE, the two nodes are not the same.
|
||||||
|
*/
|
||||||
|
BOOL ixmlNode_compare(
|
||||||
|
/*! [in] The first \b Node. */
|
||||||
|
IXML_Node *srcNode,
|
||||||
|
/*! [in] The second \b Node. */
|
||||||
|
IXML_Node *destNode);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns a nodeList of all descendant Elements with a given tagName,
|
||||||
|
* in the order in which they are encountered in a traversal of this element
|
||||||
|
* tree.
|
||||||
|
*/
|
||||||
|
void ixmlNode_getElementsByTagName(
|
||||||
|
/*! [in] The \b Node tree. */
|
||||||
|
IXML_Node *n,
|
||||||
|
/*! [in] The tag name to match. */
|
||||||
|
const char *tagname,
|
||||||
|
/*! [out] The output \b NodeList. */
|
||||||
|
IXML_NodeList **list);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns a nodeList of all the descendant Elements with a given local
|
||||||
|
* name and namespace URI in the order in which they are encountered in a
|
||||||
|
* preorder traversal of this Elememt tree.
|
||||||
|
*/
|
||||||
|
void ixmlNode_getElementsByTagNameNS(
|
||||||
|
/*! [in] The \b Element tree. */
|
||||||
|
IXML_Node *n,
|
||||||
|
/*! [in] The name space to match. */
|
||||||
|
const char *namespaceURI,
|
||||||
|
/*! [in] The local name to match. */
|
||||||
|
const char *localName,
|
||||||
|
/*! [out] The output \b NodeList. */
|
||||||
|
IXML_NodeList **list);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief
|
||||||
|
*
|
||||||
|
* \return
|
||||||
|
*/
|
||||||
|
int ixmlNode_setNodeName(
|
||||||
|
/*! [in] The \b Node. */
|
||||||
|
IXML_Node *node,
|
||||||
|
/*! [in] . */
|
||||||
|
const DOMString qualifiedName);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief
|
||||||
|
*
|
||||||
|
* \return
|
||||||
|
*/
|
||||||
|
int ixmlNode_setNodeProperties(
|
||||||
|
/*! [in] . */
|
||||||
|
IXML_Node *destNode,
|
||||||
|
/*! [in] . */
|
||||||
|
IXML_Node *src);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes a nodelist
|
||||||
|
*/
|
||||||
|
void ixmlNodeList_init(
|
||||||
|
/*! [in,out] The \b NodeList to initialize. */
|
||||||
|
IXML_NodeList *nList);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* IXMLPARSER_H */
|
||||||
|
|
||||||
|
|||||||
948
ixml/src/ixml.c
948
ixml/src/ixml.c
@@ -1,531 +1,461 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// 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"
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* copy_with_escape
|
#include <stdlib.h> /* for free() */
|
||||||
*
|
#include <string.h>
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
static void
|
/*!
|
||||||
copy_with_escape( INOUT ixml_membuf * buf,
|
* \brief Appends a string to a buffer, substituting some characters by escape
|
||||||
IN const char *p )
|
* sequences.
|
||||||
|
*/
|
||||||
|
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;
|
size_t i;
|
||||||
int plen;
|
size_t plen;
|
||||||
|
|
||||||
if( p == NULL )
|
if (p == NULL)
|
||||||
return;
|
return;
|
||||||
|
plen = strlen(p);
|
||||||
plen = strlen( p );
|
for (i = 0; i < plen; ++i) {
|
||||||
|
switch (p[i]) {
|
||||||
for( i = 0; i < plen; i++ ) {
|
case '<':
|
||||||
switch ( p[i] ) {
|
ixml_membuf_append_str(buf, "<");
|
||||||
case '<':
|
break;
|
||||||
ixml_membuf_append_str( buf, "<" );
|
case '>':
|
||||||
break;
|
ixml_membuf_append_str(buf, ">");
|
||||||
|
break;
|
||||||
case '>':
|
case '&':
|
||||||
ixml_membuf_append_str( buf, ">" );
|
ixml_membuf_append_str(buf, "&");
|
||||||
break;
|
break;
|
||||||
|
case '\'':
|
||||||
case '&':
|
ixml_membuf_append_str(buf, "'");
|
||||||
ixml_membuf_append_str( buf, "&" );
|
break;
|
||||||
break;
|
case '\"':
|
||||||
|
ixml_membuf_append_str(buf, """);
|
||||||
case '\'':
|
break;
|
||||||
ixml_membuf_append_str( buf, "'" );
|
default:
|
||||||
break;
|
ixml_membuf_append(buf, &p[i]);
|
||||||
|
break;
|
||||||
case '\"':
|
}
|
||||||
ixml_membuf_append_str( buf, """ );
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
ixml_membuf_append( buf, &p[i] );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlPrintDomTreeRecursive
|
|
||||||
* It is a recursive function to print all the node in a tree.
|
|
||||||
* Internal to parser only.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixmlPrintDomTreeRecursive( IN IXML_Node * nodeptr,
|
|
||||||
IN ixml_membuf * buf )
|
|
||||||
{
|
|
||||||
const char *nodeName = NULL;
|
|
||||||
const char *nodeValue = NULL;
|
|
||||||
IXML_Node *child = NULL,
|
|
||||||
*sibling = NULL;
|
|
||||||
|
|
||||||
if( nodeptr != NULL ) {
|
|
||||||
nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
|
|
||||||
nodeValue = ixmlNode_getNodeValue( nodeptr );
|
|
||||||
|
|
||||||
switch ( ixmlNode_getNodeType( nodeptr ) ) {
|
|
||||||
|
|
||||||
case eTEXT_NODE:
|
|
||||||
copy_with_escape( buf, nodeValue );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eCDATA_SECTION_NODE:
|
|
||||||
ixml_membuf_append_str( buf, "<![CDATA[" );
|
|
||||||
ixml_membuf_append_str( buf, nodeValue );
|
|
||||||
ixml_membuf_append_str( buf, "]]>" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ePROCESSING_INSTRUCTION_NODE:
|
|
||||||
ixml_membuf_append_str( buf, "<?" );
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
ixml_membuf_append_str( buf, " " );
|
|
||||||
copy_with_escape( buf, nodeValue );
|
|
||||||
ixml_membuf_append_str( buf, "?>\n" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eDOCUMENT_NODE:
|
|
||||||
ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild
|
|
||||||
( nodeptr ), buf );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eATTRIBUTE_NODE:
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
ixml_membuf_append_str( buf, "=\"" );
|
|
||||||
copy_with_escape( buf, nodeValue );
|
|
||||||
ixml_membuf_append_str( buf, "\"" );
|
|
||||||
|
|
||||||
if( nodeptr->nextSibling != NULL ) {
|
|
||||||
ixml_membuf_append_str( buf, " " );
|
|
||||||
ixmlPrintDomTreeRecursive( nodeptr->nextSibling, buf );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eELEMENT_NODE:
|
|
||||||
ixml_membuf_append_str( buf, "<" );
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
|
|
||||||
if( nodeptr->firstAttr != NULL ) {
|
|
||||||
ixml_membuf_append_str( buf, " " );
|
|
||||||
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
|
|
||||||
}
|
|
||||||
|
|
||||||
child = ixmlNode_getFirstChild( nodeptr );
|
|
||||||
if( ( child != NULL )
|
|
||||||
&& ( ixmlNode_getNodeType( child ) ==
|
|
||||||
eELEMENT_NODE ) ) {
|
|
||||||
ixml_membuf_append_str( buf, ">\r\n" );
|
|
||||||
} else {
|
|
||||||
ixml_membuf_append_str( buf, ">" );
|
|
||||||
}
|
|
||||||
|
|
||||||
// output the children
|
|
||||||
ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild
|
|
||||||
( nodeptr ), buf );
|
|
||||||
|
|
||||||
// Done with children. Output the end tag.
|
|
||||||
ixml_membuf_append_str( buf, "</" );
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
|
|
||||||
sibling = ixmlNode_getNextSibling( nodeptr );
|
|
||||||
if( sibling != NULL
|
|
||||||
&& ixmlNode_getNodeType( sibling ) == eTEXT_NODE ) {
|
|
||||||
ixml_membuf_append_str( buf, ">" );
|
|
||||||
} else {
|
|
||||||
ixml_membuf_append_str( buf, ">\r\n" );
|
|
||||||
}
|
|
||||||
ixmlPrintDomTreeRecursive( ixmlNode_getNextSibling
|
|
||||||
( nodeptr ), buf );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlPrintDomTree
|
|
||||||
* Print a DOM tree.
|
|
||||||
* Element, and Attribute nodes are handled differently.
|
|
||||||
* We don't want to print the Element and Attribute nodes' sibling.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixmlPrintDomTree( IN IXML_Node * nodeptr,
|
|
||||||
IN ixml_membuf * buf )
|
|
||||||
{
|
|
||||||
const char *nodeName = NULL;
|
|
||||||
const char *nodeValue = NULL;
|
|
||||||
IXML_Node *child = NULL;
|
|
||||||
|
|
||||||
if( ( nodeptr == NULL ) || ( buf == NULL ) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
|
|
||||||
nodeValue = ixmlNode_getNodeValue( nodeptr );
|
|
||||||
|
|
||||||
switch ( ixmlNode_getNodeType( nodeptr ) ) {
|
|
||||||
|
|
||||||
case eTEXT_NODE:
|
|
||||||
case eCDATA_SECTION_NODE:
|
|
||||||
case ePROCESSING_INSTRUCTION_NODE:
|
|
||||||
case eDOCUMENT_NODE:
|
|
||||||
ixmlPrintDomTreeRecursive( nodeptr, buf );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eATTRIBUTE_NODE:
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
ixml_membuf_append_str( buf, "=\"" );
|
|
||||||
copy_with_escape( buf, nodeValue );
|
|
||||||
ixml_membuf_append_str( buf, "\"" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eELEMENT_NODE:
|
|
||||||
ixml_membuf_append_str( buf, "<" );
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
|
|
||||||
if( nodeptr->firstAttr != NULL ) {
|
|
||||||
ixml_membuf_append_str( buf, " " );
|
|
||||||
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
|
|
||||||
}
|
|
||||||
|
|
||||||
child = ixmlNode_getFirstChild( nodeptr );
|
|
||||||
if( ( child != NULL )
|
|
||||||
&& ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) {
|
|
||||||
ixml_membuf_append_str( buf, ">\r\n" );
|
|
||||||
} else {
|
|
||||||
ixml_membuf_append_str( buf, ">" );
|
|
||||||
}
|
|
||||||
|
|
||||||
// output the children
|
|
||||||
ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild( nodeptr ),
|
|
||||||
buf );
|
|
||||||
|
|
||||||
// Done with children. Output the end tag.
|
|
||||||
ixml_membuf_append_str( buf, "</" );
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
ixml_membuf_append_str( buf, ">\r\n" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlDomTreetoString
|
|
||||||
* Converts a DOM tree into a text string
|
|
||||||
* Element, and Attribute nodes are handled differently.
|
|
||||||
* We don't want to print the Element and Attribute nodes' sibling.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixmlDomTreetoString( IN IXML_Node * nodeptr,
|
|
||||||
IN ixml_membuf * buf )
|
|
||||||
{
|
|
||||||
const char *nodeName = NULL;
|
|
||||||
const char *nodeValue = NULL;
|
|
||||||
IXML_Node *child = NULL;
|
|
||||||
|
|
||||||
if( ( nodeptr == NULL ) || ( buf == NULL ) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeName = ( const char * )ixmlNode_getNodeName( nodeptr );
|
|
||||||
nodeValue = ixmlNode_getNodeValue( nodeptr );
|
|
||||||
|
|
||||||
switch ( ixmlNode_getNodeType( nodeptr ) ) {
|
|
||||||
|
|
||||||
case eTEXT_NODE:
|
|
||||||
case eCDATA_SECTION_NODE:
|
|
||||||
case ePROCESSING_INSTRUCTION_NODE:
|
|
||||||
case eDOCUMENT_NODE:
|
|
||||||
ixmlPrintDomTreeRecursive( nodeptr, buf );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eATTRIBUTE_NODE:
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
ixml_membuf_append_str( buf, "=\"" );
|
|
||||||
copy_with_escape( buf, nodeValue );
|
|
||||||
ixml_membuf_append_str( buf, "\"" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case eELEMENT_NODE:
|
|
||||||
ixml_membuf_append_str( buf, "<" );
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
|
|
||||||
if( nodeptr->firstAttr != NULL ) {
|
|
||||||
ixml_membuf_append_str( buf, " " );
|
|
||||||
ixmlPrintDomTreeRecursive( nodeptr->firstAttr, buf );
|
|
||||||
}
|
|
||||||
|
|
||||||
child = ixmlNode_getFirstChild( nodeptr );
|
|
||||||
if( ( child != NULL )
|
|
||||||
&& ( ixmlNode_getNodeType( child ) == eELEMENT_NODE ) ) {
|
|
||||||
ixml_membuf_append_str( buf, ">" );
|
|
||||||
} else {
|
|
||||||
ixml_membuf_append_str( buf, ">" );
|
|
||||||
}
|
|
||||||
|
|
||||||
// output the children
|
|
||||||
ixmlPrintDomTreeRecursive( ixmlNode_getFirstChild( nodeptr ),
|
|
||||||
buf );
|
|
||||||
|
|
||||||
// Done with children. Output the end tag.
|
|
||||||
ixml_membuf_append_str( buf, "</" );
|
|
||||||
ixml_membuf_append_str( buf, nodeName );
|
|
||||||
ixml_membuf_append_str( buf, ">" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlLoadDocumentEx
|
|
||||||
* Parses the given file, and returns the DOM tree from it.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
int
|
|
||||||
ixmlLoadDocumentEx( IN const char *xmlFile,
|
|
||||||
IXML_Document ** doc )
|
|
||||||
{
|
|
||||||
|
|
||||||
if( ( xmlFile == NULL ) || ( doc == NULL ) ) {
|
|
||||||
return IXML_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Parser_LoadDocument( doc, xmlFile, TRUE );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlLoadDocument
|
|
||||||
* Parses the given file, and returns the DOM tree from it.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
IXML_Document *
|
|
||||||
ixmlLoadDocument( IN const char *xmlFile )
|
|
||||||
{
|
|
||||||
|
|
||||||
IXML_Document *doc = NULL;
|
|
||||||
|
|
||||||
ixmlLoadDocumentEx( xmlFile, &doc );
|
|
||||||
return doc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlPrintDocument
|
|
||||||
* Prints entire document, prepending XML prolog first.
|
|
||||||
* Puts lots of white spaces.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
|
|
||||||
DOMString
|
|
||||||
ixmlPrintDocument(IXML_Document *doc)
|
|
||||||
{
|
|
||||||
IXML_Node* rootNode = ( IXML_Node * )doc;
|
|
||||||
ixml_membuf memBuf;
|
|
||||||
ixml_membuf *buf = &memBuf;
|
|
||||||
|
|
||||||
if( rootNode == NULL ) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ixml_membuf_init( buf );
|
|
||||||
ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" );
|
|
||||||
ixmlPrintDomTree( rootNode, buf );
|
|
||||||
return buf->buf;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlPrintNode
|
|
||||||
* Print DOM tree under node. Puts lots of white spaces
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
DOMString
|
|
||||||
ixmlPrintNode( IN IXML_Node * node )
|
|
||||||
{
|
|
||||||
|
|
||||||
ixml_membuf memBuf;
|
|
||||||
ixml_membuf *buf = &memBuf;
|
|
||||||
|
|
||||||
if( node == NULL ) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ixml_membuf_init( buf );
|
|
||||||
ixmlPrintDomTree( node, buf );
|
|
||||||
return buf->buf;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlDocumenttoString
|
|
||||||
* converts DOM tree under node to text string,
|
|
||||||
* prepending XML prolog first.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
|
|
||||||
DOMString
|
|
||||||
ixmlDocumenttoString(IXML_Document *doc)
|
|
||||||
{
|
|
||||||
IXML_Node* rootNode = ( IXML_Node * )doc;
|
|
||||||
ixml_membuf memBuf;
|
|
||||||
ixml_membuf *buf = &memBuf;
|
|
||||||
|
|
||||||
if( rootNode == NULL ) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ixml_membuf_init( buf );
|
|
||||||
ixml_membuf_append_str( buf, "<?xml version=\"1.0\"?>\r\n" );
|
|
||||||
ixmlDomTreetoString( rootNode, buf );
|
|
||||||
return buf->buf;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlNodetoString
|
|
||||||
* converts DOM tree under node to text string
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
DOMString
|
|
||||||
ixmlNodetoString( IN IXML_Node * node )
|
|
||||||
{
|
|
||||||
|
|
||||||
ixml_membuf memBuf;
|
|
||||||
ixml_membuf *buf = &memBuf;
|
|
||||||
|
|
||||||
if( node == NULL ) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ixml_membuf_init( buf );
|
|
||||||
ixmlDomTreetoString( node, buf );
|
|
||||||
return buf->buf;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlRelaxParser
|
|
||||||
* Makes the XML parser more tolerant to malformed text.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixmlRelaxParser(char errorChar)
|
|
||||||
{
|
|
||||||
Parser_setErrorChar( errorChar );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*================================================================
|
/*!
|
||||||
* ixmlParseBufferEx
|
* \brief Recursive function to print all the node in a tree.
|
||||||
* Parse xml file stored in buffer.
|
* Internal to parser only.
|
||||||
* External function.
|
*/
|
||||||
*
|
static void ixmlPrintDomTreeRecursive(
|
||||||
*=================================================================*/
|
/*! [in] \todo documentation. */
|
||||||
int
|
IXML_Node *nodeptr,
|
||||||
ixmlParseBufferEx( IN const char *buffer,
|
/*! [in] \todo documentation. */
|
||||||
IXML_Document ** retDoc )
|
ixml_membuf *buf)
|
||||||
{
|
{
|
||||||
|
const char *nodeName = NULL;
|
||||||
|
const char *nodeValue = NULL;
|
||||||
|
IXML_Node *child = NULL,
|
||||||
|
*sibling = NULL;
|
||||||
|
|
||||||
if( ( buffer == NULL ) || ( retDoc == NULL ) ) {
|
if (nodeptr != NULL) {
|
||||||
return IXML_INVALID_PARAMETER;
|
nodeName = (const char *)ixmlNode_getNodeName(nodeptr);
|
||||||
}
|
nodeValue = ixmlNode_getNodeValue(nodeptr);
|
||||||
|
|
||||||
|
switch (ixmlNode_getNodeType(nodeptr)) {
|
||||||
|
case eTEXT_NODE:
|
||||||
|
copy_with_escape(buf, nodeValue);
|
||||||
|
break;
|
||||||
|
|
||||||
if( buffer[0] == '\0' ) {
|
case eCDATA_SECTION_NODE:
|
||||||
return IXML_INVALID_PARAMETER;
|
ixml_membuf_append_str(buf, "<![CDATA[");
|
||||||
}
|
ixml_membuf_append_str(buf, nodeValue);
|
||||||
|
ixml_membuf_append_str(buf, "]]>");
|
||||||
|
break;
|
||||||
|
|
||||||
return Parser_LoadDocument( retDoc, buffer, FALSE );
|
case ePROCESSING_INSTRUCTION_NODE:
|
||||||
|
ixml_membuf_append_str(buf, "<?");
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
ixml_membuf_append_str(buf, " ");
|
||||||
|
copy_with_escape(buf, nodeValue);
|
||||||
|
ixml_membuf_append_str(buf, "?>\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eDOCUMENT_NODE:
|
||||||
|
ixmlPrintDomTreeRecursive(
|
||||||
|
ixmlNode_getFirstChild(nodeptr), buf);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eATTRIBUTE_NODE:
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
ixml_membuf_append_str(buf, "=\"");
|
||||||
|
copy_with_escape(buf, nodeValue);
|
||||||
|
ixml_membuf_append_str(buf, "\"");
|
||||||
|
if (nodeptr->nextSibling != NULL) {
|
||||||
|
ixml_membuf_append_str(buf, " ");
|
||||||
|
ixmlPrintDomTreeRecursive(nodeptr->nextSibling, buf);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eELEMENT_NODE:
|
||||||
|
ixml_membuf_append_str(buf, "<");
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
if (nodeptr->firstAttr != NULL) {
|
||||||
|
ixml_membuf_append_str(buf, " ");
|
||||||
|
ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf);
|
||||||
|
}
|
||||||
|
child = ixmlNode_getFirstChild(nodeptr);
|
||||||
|
if (child != NULL &&
|
||||||
|
ixmlNode_getNodeType(child) == eELEMENT_NODE) {
|
||||||
|
ixml_membuf_append_str(buf, ">\r\n");
|
||||||
|
} else {
|
||||||
|
ixml_membuf_append_str(buf, ">");
|
||||||
|
}
|
||||||
|
/* output the children */
|
||||||
|
ixmlPrintDomTreeRecursive(
|
||||||
|
ixmlNode_getFirstChild(nodeptr), buf);
|
||||||
|
|
||||||
|
/* Done with children. Output the end tag. */
|
||||||
|
ixml_membuf_append_str(buf, "</");
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
|
||||||
|
sibling = ixmlNode_getNextSibling(nodeptr);
|
||||||
|
if (sibling != NULL &&
|
||||||
|
ixmlNode_getNodeType(sibling) == eTEXT_NODE) {
|
||||||
|
ixml_membuf_append_str( buf, ">" );
|
||||||
|
} else {
|
||||||
|
ixml_membuf_append_str( buf, ">\r\n" );
|
||||||
|
}
|
||||||
|
ixmlPrintDomTreeRecursive(
|
||||||
|
ixmlNode_getNextSibling(nodeptr), buf);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
IxmlPrintf(__FILE__, __LINE__, "ixmlPrintDomTreeRecursive",
|
||||||
|
"Warning, unknown node type %d\n",
|
||||||
|
ixmlNode_getNodeType(nodeptr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlParseBuffer
|
|
||||||
* Parse xml file stored in buffer.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
IXML_Document *
|
|
||||||
ixmlParseBuffer( IN const char *buffer )
|
|
||||||
{
|
|
||||||
IXML_Document *doc = NULL;
|
|
||||||
|
|
||||||
ixmlParseBufferEx( buffer, &doc );
|
/*!
|
||||||
return doc;
|
* \brief Print a DOM tree.
|
||||||
|
*
|
||||||
|
* Element, and Attribute nodes are handled differently. We don't want to print
|
||||||
|
* the Element and Attribute nodes' sibling.
|
||||||
|
*/
|
||||||
|
static void ixmlPrintDomTree(
|
||||||
|
/*! [in] \todo documentation. */
|
||||||
|
IXML_Node *nodeptr,
|
||||||
|
/*! [in] \todo documentation. */
|
||||||
|
ixml_membuf *buf)
|
||||||
|
{
|
||||||
|
const char *nodeName = NULL;
|
||||||
|
const char *nodeValue = NULL;
|
||||||
|
IXML_Node *child = NULL;
|
||||||
|
|
||||||
|
if (nodeptr == NULL || buf == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeName = (const char *)ixmlNode_getNodeName(nodeptr);
|
||||||
|
nodeValue = ixmlNode_getNodeValue(nodeptr);
|
||||||
|
switch (ixmlNode_getNodeType(nodeptr)) {
|
||||||
|
case eTEXT_NODE:
|
||||||
|
case eCDATA_SECTION_NODE:
|
||||||
|
case ePROCESSING_INSTRUCTION_NODE:
|
||||||
|
case eDOCUMENT_NODE:
|
||||||
|
ixmlPrintDomTreeRecursive(nodeptr, buf);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eATTRIBUTE_NODE:
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
ixml_membuf_append_str(buf, "=\"");
|
||||||
|
copy_with_escape(buf, nodeValue);
|
||||||
|
ixml_membuf_append_str(buf, "\"");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eELEMENT_NODE:
|
||||||
|
ixml_membuf_append_str(buf, "<");
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
if (nodeptr->firstAttr != NULL) {
|
||||||
|
ixml_membuf_append_str(buf, " ");
|
||||||
|
ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf);
|
||||||
|
}
|
||||||
|
child = ixmlNode_getFirstChild(nodeptr);
|
||||||
|
if (child != NULL &&
|
||||||
|
ixmlNode_getNodeType(child) == eELEMENT_NODE) {
|
||||||
|
ixml_membuf_append_str(buf, ">\r\n");
|
||||||
|
} else {
|
||||||
|
ixml_membuf_append_str(buf, ">");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* output the children */
|
||||||
|
ixmlPrintDomTreeRecursive(
|
||||||
|
ixmlNode_getFirstChild(nodeptr), buf);
|
||||||
|
|
||||||
|
/* Done with children. Output the end tag. */
|
||||||
|
ixml_membuf_append_str(buf, "</");
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
ixml_membuf_append_str(buf, ">\r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
IxmlPrintf(__FILE__, __LINE__, "ixmlPrintDomTree",
|
||||||
|
"Warning, unknown node type %d\n",
|
||||||
|
ixmlNode_getNodeType(nodeptr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlCloneDOMString
|
|
||||||
* Clones a DOM String.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
DOMString
|
|
||||||
ixmlCloneDOMString( IN const DOMString src )
|
|
||||||
{
|
|
||||||
if( src == NULL ) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ( strdup( src ) );
|
/*!
|
||||||
|
* \brief 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.
|
||||||
|
*/
|
||||||
|
static void ixmlDomTreetoString(
|
||||||
|
/*! [in] \todo documentation. */
|
||||||
|
IXML_Node *nodeptr,
|
||||||
|
/*! [in] \todo documentation. */
|
||||||
|
ixml_membuf *buf)
|
||||||
|
{
|
||||||
|
const char *nodeName = NULL;
|
||||||
|
const char *nodeValue = NULL;
|
||||||
|
IXML_Node *child = NULL;
|
||||||
|
|
||||||
|
if (nodeptr == NULL || buf == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeName = (const char *)ixmlNode_getNodeName(nodeptr);
|
||||||
|
nodeValue = ixmlNode_getNodeValue(nodeptr);
|
||||||
|
|
||||||
|
switch (ixmlNode_getNodeType(nodeptr)) {
|
||||||
|
case eTEXT_NODE:
|
||||||
|
case eCDATA_SECTION_NODE:
|
||||||
|
case ePROCESSING_INSTRUCTION_NODE:
|
||||||
|
case eDOCUMENT_NODE:
|
||||||
|
ixmlPrintDomTreeRecursive(nodeptr, buf);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eATTRIBUTE_NODE:
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
ixml_membuf_append_str(buf, "=\"");
|
||||||
|
copy_with_escape(buf, nodeValue );
|
||||||
|
ixml_membuf_append_str(buf, "\"");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eELEMENT_NODE:
|
||||||
|
ixml_membuf_append_str(buf, "<");
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
if (nodeptr->firstAttr != NULL) {
|
||||||
|
ixml_membuf_append_str(buf, " ");
|
||||||
|
ixmlPrintDomTreeRecursive(nodeptr->firstAttr, buf);
|
||||||
|
}
|
||||||
|
child = ixmlNode_getFirstChild(nodeptr);
|
||||||
|
if (child != NULL &&
|
||||||
|
ixmlNode_getNodeType(child) == eELEMENT_NODE) {
|
||||||
|
ixml_membuf_append_str(buf, ">");
|
||||||
|
} else {
|
||||||
|
ixml_membuf_append_str(buf, ">");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* output the children */
|
||||||
|
ixmlPrintDomTreeRecursive(ixmlNode_getFirstChild(nodeptr), buf);
|
||||||
|
|
||||||
|
/* Done with children. Output the end tag. */
|
||||||
|
ixml_membuf_append_str(buf, "</");
|
||||||
|
ixml_membuf_append_str(buf, nodeName);
|
||||||
|
ixml_membuf_append_str(buf, ">");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
IxmlPrintf(__FILE__, __LINE__, "ixmlPrintDomTreeRecursive",
|
||||||
|
"Warning, unknown node type %d\n",
|
||||||
|
ixmlNode_getNodeType(nodeptr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlFreeDOMString
|
int ixmlLoadDocumentEx(const char *xmlFile, IXML_Document **doc)
|
||||||
* Frees a DOM String.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixmlFreeDOMString( IN DOMString buf )
|
|
||||||
{
|
{
|
||||||
if( buf != NULL ) {
|
if (xmlFile == NULL || doc == NULL) {
|
||||||
free( buf );
|
return IXML_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Parser_LoadDocument(doc, xmlFile, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
IXML_Document *ixmlLoadDocument(const char *xmlFile)
|
||||||
|
{
|
||||||
|
IXML_Document *doc = NULL;
|
||||||
|
|
||||||
|
ixmlLoadDocumentEx(xmlFile, &doc);
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DOMString ixmlPrintDocument(IXML_Document *doc)
|
||||||
|
{
|
||||||
|
IXML_Node* rootNode = (IXML_Node *)doc;
|
||||||
|
ixml_membuf memBuf;
|
||||||
|
ixml_membuf *buf = &memBuf;
|
||||||
|
|
||||||
|
if(rootNode == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ixml_membuf_init(buf);
|
||||||
|
ixml_membuf_append_str(buf, "<?xml version=\"1.0\"?>\r\n");
|
||||||
|
ixmlPrintDomTree(rootNode, buf);
|
||||||
|
|
||||||
|
return buf->buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DOMString ixmlPrintNode(IXML_Node *node)
|
||||||
|
{
|
||||||
|
ixml_membuf memBuf;
|
||||||
|
ixml_membuf *buf = &memBuf;
|
||||||
|
|
||||||
|
if (node == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ixml_membuf_init(buf);
|
||||||
|
ixmlPrintDomTree(node, buf);
|
||||||
|
|
||||||
|
return buf->buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DOMString ixmlDocumenttoString(IXML_Document *doc)
|
||||||
|
{
|
||||||
|
IXML_Node* rootNode = (IXML_Node *)doc;
|
||||||
|
ixml_membuf memBuf;
|
||||||
|
ixml_membuf *buf = &memBuf;
|
||||||
|
|
||||||
|
if(rootNode == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ixml_membuf_init(buf);
|
||||||
|
ixml_membuf_append_str(buf, "<?xml version=\"1.0\"?>\r\n");
|
||||||
|
ixmlDomTreetoString(rootNode, buf);
|
||||||
|
|
||||||
|
return buf->buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DOMString ixmlNodetoString(IXML_Node *node)
|
||||||
|
{
|
||||||
|
ixml_membuf memBuf;
|
||||||
|
ixml_membuf *buf = &memBuf;
|
||||||
|
|
||||||
|
if (node == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ixml_membuf_init(buf);
|
||||||
|
ixmlDomTreetoString(node, buf);
|
||||||
|
|
||||||
|
return buf->buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ixmlRelaxParser(char errorChar)
|
||||||
|
{
|
||||||
|
Parser_setErrorChar(errorChar);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ixmlParseBufferEx(const char *buffer, IXML_Document **retDoc)
|
||||||
|
{
|
||||||
|
if (buffer == NULL || retDoc == NULL) {
|
||||||
|
return IXML_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer[0] == '\0') {
|
||||||
|
return IXML_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Parser_LoadDocument(retDoc, buffer, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
IXML_Document *ixmlParseBuffer(const char *buffer)
|
||||||
|
{
|
||||||
|
IXML_Document *doc = NULL;
|
||||||
|
|
||||||
|
ixmlParseBufferEx(buffer, &doc);
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DOMString ixmlCloneDOMString(const DOMString src)
|
||||||
|
{
|
||||||
|
if (src == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return strdup(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ixmlFreeDOMString(DOMString buf)
|
||||||
|
{
|
||||||
|
if (buf != NULL) {
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
70
ixml/src/ixmldebug.c
Normal file
70
ixml/src/ixmldebug.c
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \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)
|
||||||
|
{
|
||||||
|
unsigned long 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
|
||||||
|
|
||||||
@@ -1,236 +1,218 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// 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'
|
||||||
* Increases or decreases buffer cap so that at least
|
* bytes can be stored.
|
||||||
* '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 ) // increase length
|
if (new_length >= m->length) {
|
||||||
{
|
/* increase length */
|
||||||
// need more mem?
|
/* need more mem? */
|
||||||
if( new_length <= m->capacity ) {
|
if (new_length <= m->capacity) {
|
||||||
return 0; // have enough mem; done
|
/* 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 // decrease length
|
} else {
|
||||||
{
|
/* decrease length */
|
||||||
assert( new_length <= m->length );
|
assert(new_length <= m->length);
|
||||||
|
|
||||||
// if diff is 0..m->size_inc, don't free
|
/* if diff is 0..m->size_inc, don't free */
|
||||||
if( ( m->capacity - new_length ) <= m->size_inc ) {
|
if ((m->capacity - new_length) <= m->size_inc) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
alloc_len = new_length + m->size_inc;
|
||||||
|
}
|
||||||
|
|
||||||
alloc_len = new_length + m->size_inc;
|
assert(alloc_len >= new_length);
|
||||||
}
|
|
||||||
|
|
||||||
assert( alloc_len >= new_length );
|
temp_buf = realloc(m->buf, alloc_len + 1);
|
||||||
|
if (temp_buf == NULL) {
|
||||||
|
/* try smaller size */
|
||||||
|
alloc_len = new_length;
|
||||||
|
temp_buf = realloc(m->buf, alloc_len + 1);
|
||||||
|
if (temp_buf == NULL) {
|
||||||
|
return IXML_INSUFFICIENT_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* save */
|
||||||
|
m->buf = temp_buf;
|
||||||
|
m->capacity = alloc_len;
|
||||||
|
|
||||||
temp_buf = realloc( m->buf, alloc_len + 1 );
|
return 0;
|
||||||
if( temp_buf == NULL ) {
|
|
||||||
// try smaller size
|
|
||||||
alloc_len = new_length;
|
|
||||||
temp_buf = realloc( m->buf, alloc_len + 1 );
|
|
||||||
|
|
||||||
if( temp_buf == NULL ) {
|
|
||||||
return IXML_INSUFFICIENT_MEMORY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// save
|
|
||||||
m->buf = temp_buf;
|
|
||||||
m->capacity = alloc_len;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* membuffer_init
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixml_membuf_init( INOUT ixml_membuf * m )
|
|
||||||
{
|
|
||||||
assert( m != NULL );
|
|
||||||
|
|
||||||
m->size_inc = MEMBUF_DEF_SIZE_INC;
|
void ixml_membuf_init(ixml_membuf *m)
|
||||||
m->buf = NULL;
|
{
|
||||||
m->length = 0;
|
assert(m != NULL);
|
||||||
m->capacity = 0;
|
|
||||||
|
m->size_inc = MEMBUF_DEF_SIZE_INC;
|
||||||
|
m->buf = NULL;
|
||||||
|
m->length = 0;
|
||||||
|
m->capacity = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* membuffer_destroy
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixml_membuf_destroy( INOUT ixml_membuf * m )
|
|
||||||
{
|
|
||||||
if( m == NULL ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
free( m->buf );
|
void ixml_membuf_destroy(ixml_membuf *m)
|
||||||
ixml_membuf_init( m );
|
{
|
||||||
|
if (m == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(m->buf);
|
||||||
|
ixml_membuf_init(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixml_membuf_assign
|
int ixml_membuf_assign(
|
||||||
*
|
ixml_membuf *m,
|
||||||
*
|
const void *buf,
|
||||||
*=================================================================*/
|
size_t buf_len)
|
||||||
int
|
|
||||||
ixml_membuf_assign( INOUT ixml_membuf * m,
|
|
||||||
IN const void *buf,
|
|
||||||
IN size_t buf_len )
|
|
||||||
{
|
{
|
||||||
int return_code;
|
int return_code;
|
||||||
|
|
||||||
assert( m != NULL );
|
assert(m != NULL);
|
||||||
|
|
||||||
// set value to null
|
/* set value to null */
|
||||||
if( buf == NULL ) {
|
if (buf == NULL) {
|
||||||
ixml_membuf_destroy( m );
|
ixml_membuf_destroy(m);
|
||||||
return IXML_SUCCESS;
|
return IXML_SUCCESS;
|
||||||
}
|
}
|
||||||
// alloc mem
|
/* alloc mem */
|
||||||
return_code = ixml_membuf_set_size( m, buf_len );
|
return_code = ixml_membuf_set_size(m, buf_len);
|
||||||
if( return_code != 0 ) {
|
if (return_code != 0) {
|
||||||
return return_code;
|
return return_code;
|
||||||
}
|
}
|
||||||
// copy
|
|
||||||
memcpy( m->buf, buf, buf_len );
|
|
||||||
m->buf[buf_len] = 0; // null-terminate
|
|
||||||
|
|
||||||
m->length = buf_len;
|
/* copy */
|
||||||
|
memcpy(m->buf, buf, buf_len);
|
||||||
|
|
||||||
return IXML_SUCCESS;
|
/* null-terminate */
|
||||||
|
m->buf[buf_len] = 0;
|
||||||
|
m->length = buf_len;
|
||||||
|
|
||||||
|
return IXML_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixml_membuf_assign_str
|
int 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixml_membuf_append
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
int
|
|
||||||
ixml_membuf_append( INOUT ixml_membuf * m,
|
|
||||||
IN const void *buf )
|
|
||||||
{
|
|
||||||
assert( m != NULL );
|
|
||||||
|
|
||||||
return ixml_membuf_insert( m, buf, 1, m->length );
|
int ixml_membuf_append(
|
||||||
|
INOUT ixml_membuf *m,
|
||||||
|
IN const void *buf)
|
||||||
|
{
|
||||||
|
assert(m != NULL);
|
||||||
|
|
||||||
|
return ixml_membuf_insert(m, buf, 1, m->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixml_membuf_append_str
|
int ixml_membuf_append_str(
|
||||||
*
|
INOUT ixml_membuf *m,
|
||||||
*
|
IN const char *c_str)
|
||||||
*=================================================================*/
|
|
||||||
int
|
|
||||||
ixml_membuf_append_str( INOUT ixml_membuf * m,
|
|
||||||
IN const char *c_str )
|
|
||||||
{
|
{
|
||||||
return ixml_membuf_insert( m, c_str, strlen( c_str ), m->length );
|
return ixml_membuf_insert(m, c_str, strlen(c_str), m->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixml_membuf_insert
|
int ixml_membuf_insert(
|
||||||
*
|
INOUT ixml_membuf *m,
|
||||||
*
|
IN const void *buf,
|
||||||
*=================================================================*/
|
IN size_t buf_len,
|
||||||
int
|
size_t index)
|
||||||
ixml_membuf_insert( INOUT ixml_membuf * m,
|
|
||||||
IN const void *buf,
|
|
||||||
IN size_t buf_len,
|
|
||||||
int index )
|
|
||||||
{
|
{
|
||||||
int return_code;
|
int return_code = 0;
|
||||||
|
|
||||||
assert( m != NULL );
|
assert(m != NULL);
|
||||||
|
|
||||||
if( index < 0 || index > ( int )m->length )
|
if (index > 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;
|
||||||
m->buf[m->length] = 0; // null-terminate
|
/* Null terminate */
|
||||||
|
m->buf[m->length] = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,242 +1,195 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// 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"
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* NamedNodeMap_getItemNumber
|
#include <assert.h>
|
||||||
* return the item number of a item in NamedNodeMap.
|
#include <stdlib.h> /* for free(), malloc() */
|
||||||
* Internal to parser only.
|
#include <string.h>
|
||||||
* Parameters:
|
|
||||||
* name: the name of the item to find
|
|
||||||
*
|
/*!
|
||||||
*=================================================================*/
|
* \brief Return the item number of a item in NamedNodeMap.
|
||||||
unsigned long
|
*/
|
||||||
ixmlNamedNodeMap_getItemNumber( IN IXML_NamedNodeMap * nnMap,
|
static unsigned long ixmlNamedNodeMap_getItemNumber(
|
||||||
IN const char *name )
|
/*! [in] The named node map to process. */
|
||||||
|
IN IXML_NamedNodeMap *nnMap,
|
||||||
|
/*! [in] The name of the item to find. */
|
||||||
|
IN const char *name)
|
||||||
{
|
{
|
||||||
IXML_Node *tempNode;
|
IXML_Node *tempNode;
|
||||||
unsigned long returnItemNo = 0;
|
unsigned long returnItemNo = 0;
|
||||||
|
|
||||||
assert( nnMap != NULL && name != NULL );
|
assert(nnMap != NULL && name != NULL);
|
||||||
if( ( nnMap == NULL ) || ( name == NULL ) ) {
|
if (nnMap == NULL || name == NULL) {
|
||||||
return IXML_INVALID_ITEM_NUMBER;
|
return IXML_INVALID_ITEM_NUMBER;
|
||||||
}
|
}
|
||||||
|
|
||||||
tempNode = nnMap->nodeItem;
|
tempNode = nnMap->nodeItem;
|
||||||
while( tempNode != NULL ) {
|
while (tempNode != NULL) {
|
||||||
if( strcmp( name, tempNode->nodeName ) == 0 ) {
|
if (strcmp(name, tempNode->nodeName) == 0) {
|
||||||
return returnItemNo;
|
return returnItemNo;
|
||||||
}
|
}
|
||||||
|
tempNode = tempNode->nextSibling;
|
||||||
|
returnItemNo++;
|
||||||
|
}
|
||||||
|
|
||||||
tempNode = tempNode->nextSibling;
|
return IXML_INVALID_ITEM_NUMBER;
|
||||||
returnItemNo++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return IXML_INVALID_ITEM_NUMBER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* NamedNodeMap_init
|
void ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap)
|
||||||
* 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* NamedNodeMap_getNamedItem
|
IXML_Node *ixmlNamedNodeMap_getNamedItem(
|
||||||
* Retrieves a node specified by name.
|
IXML_NamedNodeMap *nnMap,
|
||||||
* External function.
|
const DOMString name)
|
||||||
*
|
|
||||||
* 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;
|
unsigned long index;
|
||||||
|
|
||||||
if( ( nnMap == NULL ) || ( name == NULL ) ) {
|
if (nnMap == NULL || name == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
index = ixmlNamedNodeMap_getItemNumber( nnMap, name );
|
index = ixmlNamedNodeMap_getItemNumber(nnMap, name);
|
||||||
if( index == IXML_INVALID_ITEM_NUMBER ) {
|
if (index == IXML_INVALID_ITEM_NUMBER) {
|
||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
return ( ixmlNamedNodeMap_item( nnMap, ( unsigned long )index ) );
|
return ixmlNamedNodeMap_item(nnMap, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* NamedNodeMap_item
|
IXML_Node *ixmlNamedNodeMap_item(
|
||||||
* Returns the indexth item in the map. If index is greater than or
|
IN IXML_NamedNodeMap *nnMap,
|
||||||
* equal to the number of nodes in this map, this returns null.
|
IN unsigned long index )
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
* Parameter:
|
|
||||||
* index: index into this map.
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* The node at the indexth position in the map, or null if that is
|
|
||||||
* not a valid index.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
IXML_Node *
|
|
||||||
ixmlNamedNodeMap_item( IN IXML_NamedNodeMap * nnMap,
|
|
||||||
IN unsigned long index )
|
|
||||||
{
|
{
|
||||||
IXML_Node *tempNode;
|
IXML_Node *tempNode;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if( nnMap == NULL ) {
|
if (nnMap == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( index > ixmlNamedNodeMap_getLength( nnMap ) - 1 ) {
|
if (index > ixmlNamedNodeMap_getLength(nnMap) - 1) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tempNode = nnMap->nodeItem;
|
tempNode = nnMap->nodeItem;
|
||||||
for( i = 0; i < index && tempNode != NULL; ++i ) {
|
for (i = 0; i < index && tempNode != NULL; ++i) {
|
||||||
tempNode = tempNode->nextSibling;
|
tempNode = tempNode->nextSibling;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tempNode;
|
return tempNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* NamedNodeMap_getLength
|
|
||||||
* Return the number of Nodes in this map.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
unsigned long
|
|
||||||
ixmlNamedNodeMap_getLength( IN IXML_NamedNodeMap * nnMap )
|
|
||||||
{
|
|
||||||
IXML_Node *tempNode;
|
|
||||||
unsigned long length = 0;
|
|
||||||
|
|
||||||
if( nnMap != NULL ) {
|
unsigned long ixmlNamedNodeMap_getLength(IXML_NamedNodeMap *nnMap)
|
||||||
tempNode = nnMap->nodeItem;
|
{
|
||||||
for( length = 0; tempNode != NULL; ++length ) {
|
IXML_Node *tempNode;
|
||||||
tempNode = tempNode->nextSibling;
|
unsigned long length = 0;
|
||||||
}
|
|
||||||
}
|
if (nnMap != NULL) {
|
||||||
return length;
|
tempNode = nnMap->nodeItem;
|
||||||
|
for (length = 0; tempNode != NULL; ++length) {
|
||||||
|
tempNode = tempNode->nextSibling;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlNamedNodeMap_free
|
|
||||||
* frees a NamedNodeMap.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixmlNamedNodeMap_free( IXML_NamedNodeMap * nnMap )
|
|
||||||
{
|
|
||||||
IXML_NamedNodeMap *pNext;
|
|
||||||
|
|
||||||
while( nnMap != NULL ) {
|
void ixmlNamedNodeMap_free(IXML_NamedNodeMap *nnMap)
|
||||||
pNext = nnMap->next;
|
{
|
||||||
free( nnMap );
|
IXML_NamedNodeMap *pNext;
|
||||||
nnMap = pNext;
|
|
||||||
}
|
while (nnMap != NULL) {
|
||||||
|
pNext = nnMap->next;
|
||||||
|
free(nnMap);
|
||||||
|
nnMap = pNext;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* NamedNodeMap_addToNamedNodeMap
|
int ixmlNamedNodeMap_addToNamedNodeMap(
|
||||||
* add a node to a NamedNodeMap.
|
IXML_NamedNodeMap **nnMap,
|
||||||
* Internal to parser only.
|
IXML_Node *add)
|
||||||
* 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;
|
||||||
*p = NULL;
|
IXML_NamedNodeMap *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 ) // nodelist is empty
|
if (*nnMap == NULL) {
|
||||||
{
|
/* nodelist is empty */
|
||||||
*nnMap =
|
*nnMap = (IXML_NamedNodeMap *)malloc(sizeof (IXML_NamedNodeMap));
|
||||||
( 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) {
|
||||||
|
(*nnMap)->nodeItem = add;
|
||||||
|
} else {
|
||||||
|
traverse = *nnMap;
|
||||||
|
p = traverse;
|
||||||
|
while (traverse != NULL) {
|
||||||
|
p = traverse;
|
||||||
|
traverse = traverse->next;
|
||||||
|
}
|
||||||
|
newItem = (IXML_NamedNodeMap *)malloc(sizeof (IXML_NamedNodeMap));
|
||||||
|
if (newItem == NULL) {
|
||||||
|
return IXML_INSUFFICIENT_MEMORY;
|
||||||
|
}
|
||||||
|
p->next = newItem;
|
||||||
|
newItem->nodeItem = add;
|
||||||
|
newItem->next = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if( ( *nnMap )->nodeItem == NULL ) {
|
return IXML_SUCCESS;
|
||||||
( *nnMap )->nodeItem = add;
|
|
||||||
} else {
|
|
||||||
traverse = *nnMap;
|
|
||||||
p = traverse;
|
|
||||||
while( traverse != NULL ) {
|
|
||||||
p = traverse;
|
|
||||||
traverse = traverse->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
newItem =
|
|
||||||
( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );
|
|
||||||
if( newItem == NULL ) {
|
|
||||||
return IXML_INSUFFICIENT_MEMORY;
|
|
||||||
}
|
|
||||||
p->next = newItem;
|
|
||||||
newItem->nodeItem = add;
|
|
||||||
newItem->next = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return IXML_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2795
ixml/src/node.c
2795
ixml/src/node.c
File diff suppressed because it is too large
Load Diff
@@ -1,176 +1,152 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/*******************************************************************************
|
||||||
//
|
*
|
||||||
// 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"
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlNodeList_init
|
#include <assert.h>
|
||||||
* initializes a nodelist
|
#include <string.h>
|
||||||
* 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlNodeList_item
|
IXML_Node *ixmlNodeList_item(
|
||||||
* Returns the indexth item in the collection. If index is greater
|
IXML_NodeList *nList,
|
||||||
* than or equal to the number of nodes in the list, this returns
|
unsigned long index)
|
||||||
* null.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
IXML_Node *
|
|
||||||
ixmlNodeList_item( IXML_NodeList * nList,
|
|
||||||
unsigned long index )
|
|
||||||
{
|
{
|
||||||
IXML_NodeList *next;
|
IXML_NodeList *next;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
// if the list ptr is NULL
|
/* if the list ptr is NULL */
|
||||||
if( nList == NULL ) {
|
if (nList == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
// if index is more than list length
|
/* if index is more than list length */
|
||||||
if( index > ixmlNodeList_length( nList ) - 1 ) {
|
if (index > ixmlNodeList_length(nList) - 1) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
next = nList;
|
next = nList;
|
||||||
for( i = 0; i < index && next != NULL; ++i ) {
|
for (i = 0; i < index && next != NULL; ++i) {
|
||||||
next = next->next;
|
next = next->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( next == NULL ) return NULL;
|
if (next == NULL) {
|
||||||
|
return NULL;
|
||||||
return next->nodeItem;
|
}
|
||||||
|
|
||||||
|
return next->nodeItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
int ixmlNodeList_addToNodeList(
|
||||||
* ixmlNodeList_addToNodeList
|
IXML_NodeList **nList,
|
||||||
* Add a node to nodelist
|
IXML_Node *add)
|
||||||
* Internal to parser only.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
int
|
|
||||||
ixmlNodeList_addToNodeList( IN IXML_NodeList ** nList,
|
|
||||||
IN IXML_Node * add )
|
|
||||||
{
|
{
|
||||||
IXML_NodeList *traverse,
|
IXML_NodeList *traverse = NULL;
|
||||||
*p = NULL;
|
IXML_NodeList *p = NULL;
|
||||||
IXML_NodeList *newListItem;
|
IXML_NodeList *newListItem;
|
||||||
|
|
||||||
assert( add != NULL );
|
assert(add != NULL);
|
||||||
|
|
||||||
if( add == NULL ) {
|
if (add == NULL) {
|
||||||
return IXML_FAILED;
|
return IXML_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( *nList == NULL ) // nodelist is empty
|
if (*nList == NULL) {
|
||||||
{
|
/* nodelist is empty */
|
||||||
*nList = ( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) );
|
*nList = (IXML_NodeList *)malloc(sizeof (IXML_NodeList));
|
||||||
if( *nList == NULL ) {
|
if (*nList == NULL) {
|
||||||
return IXML_INSUFFICIENT_MEMORY;
|
return IXML_INSUFFICIENT_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
ixmlNodeList_init( *nList );
|
ixmlNodeList_init(*nList);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( *nList )->nodeItem == NULL ) {
|
if ((*nList)->nodeItem == NULL) {
|
||||||
( *nList )->nodeItem = add;
|
(*nList)->nodeItem = add;
|
||||||
} else {
|
} else {
|
||||||
traverse = *nList;
|
traverse = *nList;
|
||||||
while( traverse != NULL ) {
|
while (traverse != NULL) {
|
||||||
p = traverse;
|
p = traverse;
|
||||||
traverse = traverse->next;
|
traverse = traverse->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
newListItem =
|
newListItem = (IXML_NodeList *)malloc(sizeof (IXML_NodeList));
|
||||||
( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) );
|
if (newListItem == NULL) {
|
||||||
if( newListItem == NULL ) {
|
return IXML_INSUFFICIENT_MEMORY;
|
||||||
return IXML_INSUFFICIENT_MEMORY;
|
}
|
||||||
}
|
p->next = newListItem;
|
||||||
p->next = newListItem;
|
newListItem->nodeItem = add;
|
||||||
newListItem->nodeItem = add;
|
newListItem->next = NULL;
|
||||||
newListItem->next = NULL;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return IXML_SUCCESS;
|
return IXML_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlNodeList_length
|
unsigned long ixmlNodeList_length(IXML_NodeList *nList)
|
||||||
* Returns the number of nodes in the list. The range of valid
|
|
||||||
* child node indices is 0 to length-1 inclusive.
|
|
||||||
* External function.
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
unsigned long
|
|
||||||
ixmlNodeList_length( IN IXML_NodeList * nList )
|
|
||||||
{
|
{
|
||||||
IXML_NodeList *list;
|
IXML_NodeList *list;
|
||||||
unsigned long length = 0;
|
unsigned long length = 0;
|
||||||
|
|
||||||
list = nList;
|
list = nList;
|
||||||
while( list != NULL ) {
|
while (list != NULL) {
|
||||||
++length;
|
++length;
|
||||||
list = list->next;
|
list = list->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================================================
|
|
||||||
* ixmlNodeList_free
|
void ixmlNodeList_free(IXML_NodeList *nList)
|
||||||
* frees a nodeList
|
|
||||||
* External function
|
|
||||||
*
|
|
||||||
*=================================================================*/
|
|
||||||
void
|
|
||||||
ixmlNodeList_free( IN IXML_NodeList * nList )
|
|
||||||
{
|
{
|
||||||
IXML_NodeList *next;
|
IXML_NodeList *next;
|
||||||
|
|
||||||
while( nList != NULL ) {
|
|
||||||
next = nList->next;
|
|
||||||
|
|
||||||
free( nList );
|
|
||||||
nList = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
while (nList != NULL) {
|
||||||
|
next = nList->next;
|
||||||
|
free(nList);
|
||||||
|
nList = next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
0
ixml/test/test_document.sh
Normal file → Executable file
0
ixml/test/test_document.sh
Normal file → Executable 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_LIBS@ -L${libdir} -lupnp -lthreadutil -lixml
|
Libs: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ -L${libdir} -lupnp -lthreadutil -lixml
|
||||||
Cflags: @PTHREAD_CFLAGS@ -I${includedir}/upnp
|
Cflags: @PTHREAD_CFLAGS@ -I${includedir}/upnp
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Version: 1.4.2
|
Version: 1.6.10
|
||||||
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,6 +77,12 @@ make install DESTDIR=$RPM_BUILD_ROOT
|
|||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Nov 19 2007 Marcelo Jimenez <mroberto@users.sourceforge.net> - 1.6.2-1
|
||||||
|
- Update to version 1.6.2
|
||||||
|
|
||||||
|
* Mon Nov 19 2007 Marcelo Jimenez <mroberto@users.sourceforge.net> - 1.4.7-1
|
||||||
|
- Update to version 1.4.7
|
||||||
|
|
||||||
* Fri Feb 02 2007 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.2-1
|
* Fri Feb 02 2007 Eric Tanguy <eric.tanguy@univ-nantes.fr> - 1.4.2-1
|
||||||
- Update to version 1.4.2
|
- Update to version 1.4.2
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ AC_DEFUN([RT_BOOL_ARG_ENABLE],[
|
|||||||
)])
|
)])
|
||||||
test "x$enable_[$1]" != [x]m4_if([$2],[yes],[no],[yes]) dnl
|
test "x$enable_[$1]" != [x]m4_if([$2],[yes],[no],[yes]) dnl
|
||||||
&& enable_[]Name=[$2]
|
&& enable_[]Name=[$2]
|
||||||
AC_MSG_RESULT($enable_[]Name)dnl
|
AC_MSG_RESULT($enable_[]Name)
|
||||||
AM_CONDITIONAL([ENABLE_]NAME, test x"$enable_[]Name" = xyes)
|
AM_CONDITIONAL([ENABLE_]NAME, test x"$enable_[]Name" = xyes)
|
||||||
dnl
|
dnl
|
||||||
m4_popdef([NAME])dnl
|
m4_popdef([NAME])dnl
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
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
|
||||||
@@ -21,12 +20,11 @@ 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/iasnprintf.h inc/ithread.h
|
inc/ithread.h
|
||||||
|
|
||||||
|
|||||||
@@ -32,105 +32,96 @@
|
|||||||
#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>
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Name: FreeListNode
|
* Free list node. points to next free item.
|
||||||
*
|
* Memory for node is borrowed from allocated items.
|
||||||
* Description:
|
* \internal
|
||||||
* free list node. points to next free item.
|
*/
|
||||||
* memory for node is borrowed from allocated items.
|
|
||||||
* Internal Use Only.
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef struct FREELISTNODE
|
typedef struct FREELISTNODE
|
||||||
{
|
{
|
||||||
struct FREELISTNODE *next;
|
struct FREELISTNODE *next;
|
||||||
} FreeListNode;
|
} FreeListNode;
|
||||||
|
|
||||||
|
/*!
|
||||||
/****************************************************************************
|
* Stores head and size of free list, as well as mutex for protection.
|
||||||
* Name: FreeList
|
* \internal
|
||||||
*
|
*/
|
||||||
* Description:
|
|
||||||
* Stores head and size of free list, as well as mutex for protection.
|
|
||||||
* Internal Use Only.
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef struct FREELIST
|
typedef struct FREELIST
|
||||||
{
|
{
|
||||||
FreeListNode *head;
|
FreeListNode *head;
|
||||||
size_t element_size;
|
size_t element_size;
|
||||||
int maxFreeListLength;
|
int maxFreeListLength;
|
||||||
int freeListLength;
|
int freeListLength;
|
||||||
|
} FreeList;
|
||||||
}FreeList;
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: FreeListInit
|
* \brief Initializes Free List.
|
||||||
*
|
*
|
||||||
* Description:
|
* Must be called first and only once for FreeList.
|
||||||
* Initializes Free List. Must be called first.
|
|
||||||
* And only once for FreeList.
|
|
||||||
* Parameters:
|
|
||||||
* free_list - must be valid, non null, pointer to a linked list.
|
|
||||||
* size_t - size of elements to store in free list
|
|
||||||
* maxFreeListSize - max size that the free list can grow to
|
|
||||||
* before returning memory to O.S.
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int FreeListInit(FreeList *free_list,
|
|
||||||
size_t elementSize,
|
|
||||||
int maxFreeListSize);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: FreeListAlloc
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return:
|
||||||
* Allocates chunk of set size.
|
* \li \c 0 on success.
|
||||||
* If a free item is available in the list, returnes the stored item.
|
* \li \c EINVAL on failure.
|
||||||
* Otherwise calls the O.S. to allocate memory.
|
*/
|
||||||
* Parameters:
|
int FreeListInit(
|
||||||
* free_list - must be valid, non null, pointer to a linked list.
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
* Returns:
|
FreeList *free_list,
|
||||||
* Non NULL on success. NULL on failure.
|
/*! Size of elements to store in free list. */
|
||||||
*****************************************************************************/
|
size_t elementSize,
|
||||||
void * FreeListAlloc (FreeList *free_list);
|
/*! Max size that the free list can grow to before returning
|
||||||
|
* memory to O.S. */
|
||||||
|
int maxFreeListLength);
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: FreeListFree
|
* \brief Allocates chunk of set size.
|
||||||
*
|
*
|
||||||
* Description:
|
* If a free item is available in the list, returnes the stored item,
|
||||||
* Returns an item to the Free List.
|
* otherwise calls the O.S. to allocate memory.
|
||||||
* If the free list is smaller than the max size than
|
|
||||||
* adds the item to the free list.
|
|
||||||
* Otherwise returns the item to the O.S.
|
|
||||||
* Parameters:
|
|
||||||
* free_list - must be valid, non null, pointer to a linked list.
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int FreeListFree (FreeList *free_list,void * element);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: FreeListDestroy
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Non NULL on success. NULL on failure.
|
||||||
* Releases the resources stored with the free list.
|
*/
|
||||||
* Parameters:
|
void *FreeListAlloc(
|
||||||
* free_list - must be valid, non null, pointer to a linked list.
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
* Returns:
|
FreeList *free_list);
|
||||||
* 0 on success. Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int FreeListDestroy (FreeList *free_list);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns an item to the Free List.
|
||||||
|
*
|
||||||
|
* If the free list is smaller than the max size then adds the item to the
|
||||||
|
* free list, otherwise returns the item to the O.S.
|
||||||
|
*
|
||||||
|
* \return:
|
||||||
|
* \li \c 0 on success.
|
||||||
|
* \li \c EINVAL on failure.
|
||||||
|
*/
|
||||||
|
int FreeListFree(
|
||||||
|
/*! Must be valid, non null, pointer to a free list. */
|
||||||
|
FreeList *free_list,
|
||||||
|
/*! Must be a pointer allocated by FreeListAlloc. */
|
||||||
|
void *element);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Releases the resources stored with the free list.
|
||||||
|
*
|
||||||
|
* \return:
|
||||||
|
* \li \c 0 on success.
|
||||||
|
* \li \c EINVAL on failure.
|
||||||
|
*/
|
||||||
|
int FreeListDestroy(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
FreeList *free_list);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,10 @@
|
|||||||
#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
|
||||||
@@ -44,284 +48,238 @@ extern "C" {
|
|||||||
#define LIST_SUCCESS 1
|
#define LIST_SUCCESS 1
|
||||||
#define LIST_FAIL 0
|
#define LIST_FAIL 0
|
||||||
|
|
||||||
/****************************************************************************
|
/*! Function for freeing list items. */
|
||||||
* Name: free_routine
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Function for freeing list items
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef void (*free_function)(void *arg);
|
typedef void (*free_function)(void *arg);
|
||||||
|
|
||||||
/****************************************************************************
|
/*! Function for comparing list items. Returns 1 if itemA==itemB */
|
||||||
* Name: cmp_routine
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Function for comparing list items
|
|
||||||
* Returns 1 if itemA==itemB
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef int (*cmp_routine)(void *itemA,void *itemB);
|
typedef int (*cmp_routine)(void *itemA,void *itemB);
|
||||||
|
|
||||||
/****************************************************************************
|
/*! Linked list node. Stores generic item and pointers to next and prev.
|
||||||
* Name: ListNode
|
* \internal
|
||||||
*
|
*/
|
||||||
* Description:
|
|
||||||
* linked list node. stores generic item and pointers to next and prev.
|
|
||||||
* Internal Use Only.
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef struct LISTNODE
|
typedef struct LISTNODE
|
||||||
{
|
{
|
||||||
struct LISTNODE *prev;
|
struct LISTNODE *prev;
|
||||||
struct LISTNODE *next;
|
struct LISTNODE *next;
|
||||||
void *item;
|
void *item;
|
||||||
} ListNode;
|
} ListNode;
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Name: LinkedList
|
* Linked list (no protection).
|
||||||
*
|
*
|
||||||
* Description:
|
* Because this is for internal use, parameters are NOT checked for validity.
|
||||||
* linked list (no protection). Internal Use Only.
|
* The first item of the list is stored at node: head->next
|
||||||
* Because this is for internal use, parameters are NOT checked for
|
* The last item of the list is stored at node: tail->prev
|
||||||
* validity.
|
* If head->next=tail, then list is empty.
|
||||||
* The first item of the list is stored at node: head->next
|
* To iterate through the list:
|
||||||
* The last item of the list is stored at node: tail->prev
|
|
||||||
* If head->next=tail, then list is empty.
|
|
||||||
* To iterate through the list:
|
|
||||||
*
|
*
|
||||||
* LinkedList g;
|
* LinkedList g;
|
||||||
* ListNode *temp = NULL;
|
* ListNode *temp = NULL;
|
||||||
* for (temp = ListHead(g);temp!=NULL;temp = ListNext(g,temp))
|
* for (temp = ListHead(g);temp!=NULL;temp = ListNext(g,temp)) {
|
||||||
* {
|
* }
|
||||||
* }
|
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
* \internal
|
||||||
|
*/
|
||||||
typedef struct LINKEDLIST
|
typedef struct LINKEDLIST
|
||||||
{
|
{
|
||||||
ListNode head; /* head, first item is stored at: head->next */
|
/*! head, first item is stored at: head->next */
|
||||||
ListNode tail; /* tail, last item is stored at: tail->prev */
|
ListNode head;
|
||||||
long size; /* size of list */
|
/*! tail, last item is stored at: tail->prev */
|
||||||
FreeList freeNodeList; /* free list to use */
|
ListNode tail;
|
||||||
free_function free_func; /* free function to use */
|
/*! size of list */
|
||||||
cmp_routine cmp_func; /* compare function to use */
|
long size;
|
||||||
|
/*! free list to use */
|
||||||
|
FreeList freeNodeList;
|
||||||
|
/*! free function to use */
|
||||||
|
free_function free_func;
|
||||||
|
/*! compare function to use */
|
||||||
|
cmp_routine cmp_func;
|
||||||
} LinkedList;
|
} LinkedList;
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ListInit
|
* \brief Initializes LinkedList. Must be called first and only once for List.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return
|
||||||
* Initializes LinkedList. Must be called first.
|
* \li \c 0 on success.
|
||||||
* And only once for List.
|
* \li \c EOUTOFMEM on failure.
|
||||||
* Parameters:
|
*/
|
||||||
* list - must be valid, non null, pointer to a linked list.
|
int ListInit(
|
||||||
* cmp_func - function used to compare items. (May be NULL)
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
* free_func - function used to free items. (May be NULL)
|
LinkedList *list,
|
||||||
* Returns:
|
/*! Function used to compare items. (May be NULL). */
|
||||||
* 0 on success, EOUTOFMEM on failure.
|
cmp_routine cmp_func,
|
||||||
*****************************************************************************/
|
/*! Function used to free items. (May be NULL). */
|
||||||
int ListInit(LinkedList *list,cmp_routine cmp_func, free_function free_func);
|
free_function free_func);
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ListAddHead
|
* \brief Adds a node to the head of the list. Node gets immediately after
|
||||||
|
* list head.
|
||||||
*
|
*
|
||||||
* Description:
|
|
||||||
* Adds a node to the head of the list.
|
|
||||||
* Node gets immediately after list.head.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* void * item - item to be added
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
* Precondition:
|
||||||
* The list has been initialized.
|
* The list has been initialized.
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *ListAddHead(LinkedList *list, void *item);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListAddTail
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The pointer to the ListNode on success, NULL on failure.
|
||||||
* Adds a node to the tail of the list.
|
*/
|
||||||
* Node gets added immediately before list.tail.
|
ListNode *ListAddHead(
|
||||||
* Parameters:
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
LinkedList *list,
|
||||||
* void * item - item to be added
|
/*! Item to be added. */
|
||||||
* Returns:
|
void *item);
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *ListAddTail(LinkedList *list, void *item);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ListAddAfter
|
* \brief Adds a node to the tail of the list. Node gets added immediately
|
||||||
|
* before list.tail.
|
||||||
*
|
*
|
||||||
* Description:
|
* Precondition: The list has been initialized.
|
||||||
* Adds a node after the specified node.
|
|
||||||
* Node gets added immediately after bnode.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* void * item - item to be added
|
|
||||||
* ListNode * bnode - node to add after
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *ListAddAfter(LinkedList *list, void *item, ListNode *bnode);
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListAddBefore
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The pointer to the ListNode on success, NULL on failure.
|
||||||
* Adds a node before the specified node.
|
*/
|
||||||
* Node gets added immediately before anode.
|
ListNode *ListAddTail(
|
||||||
* Parameters:
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
LinkedList *list,
|
||||||
* ListNode * anode - node to add the in front of.
|
/*! Item to be added. */
|
||||||
* void * item - item to be added
|
void *item);
|
||||||
* Returns:
|
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *ListAddBefore(LinkedList *list,void *item, ListNode *anode);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
/****************************************************************************
|
* \brief Adds a node after the specified node. Node gets added immediately
|
||||||
* Function: ListDelNode
|
* after bnode.
|
||||||
*
|
*
|
||||||
* Description:
|
* Precondition: The list has been initialized.
|
||||||
* Removes a node from the list
|
|
||||||
* The memory for the node is freed.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* ListNode *dnode - done to delete.
|
|
||||||
* freeItem - if !0 then item is freed using free function.
|
|
||||||
* if 0 (or free function is NULL) then item is not freed
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the item stored in the node or NULL if the item is freed.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
void *ListDelNode(LinkedList *list,ListNode *dnode, int freeItem);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListDestroy
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The pointer to the ListNode on success, NULL on failure.
|
||||||
* Removes all memory associated with list nodes.
|
*/
|
||||||
* Does not free LinkedList *list.
|
ListNode *ListAddAfter(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList *list,
|
||||||
|
/*! Item to be added. */
|
||||||
|
void *item,
|
||||||
|
/*! Node to add after. */
|
||||||
|
ListNode *bnode);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Adds a node before the specified node. Node gets added immediately
|
||||||
|
* before anode.
|
||||||
|
*
|
||||||
|
* Precondition: The list has been initialized.
|
||||||
|
*
|
||||||
|
* \return The pointer to the ListNode on success, NULL on failure.
|
||||||
|
*/
|
||||||
|
ListNode *ListAddBefore(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList *list,
|
||||||
|
/*! Item to be added. */
|
||||||
|
void *item,
|
||||||
|
/*! Node to add in front of. */
|
||||||
|
ListNode *anode);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Removes a node from the list. The memory for the node is freed.
|
||||||
|
*
|
||||||
|
* Precondition: The list has been initialized.
|
||||||
|
*
|
||||||
|
* \return The pointer to the item stored in the node or NULL if the item
|
||||||
|
* is freed.
|
||||||
|
*/
|
||||||
|
void *ListDelNode(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList *list,
|
||||||
|
/*! Node to delete. */
|
||||||
|
ListNode *dnode,
|
||||||
|
/*! if !0 then item is freed using free function. If 0 (or free
|
||||||
|
* function is NULL) then item is not freed. */
|
||||||
|
int freeItem);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Removes all memory associated with list nodes. Does not free
|
||||||
|
* LinkedList *list.
|
||||||
|
*
|
||||||
|
* Precondition: The list has been initialized.
|
||||||
|
*
|
||||||
|
* \return 0 on success, EINVAL on failure.
|
||||||
|
*/
|
||||||
|
int ListDestroy(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList *list,
|
||||||
|
/*! if !0 then item is freed using free function. If 0 (or free
|
||||||
|
* function is NULL) then item is not freed. */
|
||||||
|
int freeItem);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the head of the list.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Precondition: The list has been initialized.
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* freeItem - if !0 then items are freed using the free_function.
|
|
||||||
* if 0 (or free function is NULL) then items are not freed.
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Always returns 0.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
int ListDestroy(LinkedList *list, int freeItem);
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListHead
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The head of the list. NULL if list is empty.
|
||||||
* Returns the head of the list.
|
*/
|
||||||
|
ListNode *ListHead(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList *list);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the tail of the list.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Precondition: The list has been initialized.
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The head of the list. NULL if list is empty.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode* ListHead(LinkedList *list);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListTail
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The tail of the list. NULL if list is empty.
|
||||||
* Returns the tail of the list.
|
*/
|
||||||
|
ListNode *ListTail(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList *list);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the next item in the list.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Precondition: The list has been initialized.
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The tail of the list. NULL if list is empty.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode* ListTail(LinkedList *list);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListNext
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The next item in the list. NULL if there are no more items in list.
|
||||||
* Returns the next item in the list.
|
*/
|
||||||
|
ListNode *ListNext(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList *list,
|
||||||
|
/*! Node from the list. */
|
||||||
|
ListNode *node);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the previous item in the list.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Precondition: The list has been initialized.
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The next item in the list. NULL if there are no more items in list.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode* ListNext(LinkedList *list, ListNode * node);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListPrev
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The previous item in the list. NULL if there are no more items in list.
|
||||||
* Returns the previous item in the list.
|
*/
|
||||||
*
|
ListNode *ListPrev(
|
||||||
* Parameters:
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
LinkedList *list,
|
||||||
*
|
/*! Node from the list. */
|
||||||
* Returns:
|
ListNode *node);
|
||||||
* The previous item in the list. NULL if there are no more items in list.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode* ListPrev(LinkedList *list, ListNode * node);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ListFind
|
* \brief Finds the specified item in the list.
|
||||||
*
|
*
|
||||||
* Description:
|
* Uses the compare function specified in ListInit. If compare function
|
||||||
* Finds the specified item in the list.
|
* is NULL then compares items as pointers.
|
||||||
* Uses the compare function specified in ListInit. If compare function
|
|
||||||
* is NULL then compares items as pointers.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* ListNode *start - the node to start from, NULL if to start from
|
|
||||||
* beginning.
|
|
||||||
* void * item - the item to search for.
|
|
||||||
* Returns:
|
|
||||||
* The node containing the item. NULL if no node contains the item.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode* ListFind(LinkedList *list, ListNode *start, void * item);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ListSize
|
|
||||||
*
|
*
|
||||||
* Description:
|
* Precondition: The list has been initialized.
|
||||||
* Returns the size of the list.
|
*
|
||||||
* Parameters:
|
* \return The node containing the item. NULL if no node contains the item.
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
*/
|
||||||
|
ListNode* ListFind(
|
||||||
* Returns:
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
* The number of items in the list.
|
LinkedList *list,
|
||||||
* Precondition:
|
/*! The node to start from, NULL if to start from beginning. */
|
||||||
* The list has been initialized.
|
ListNode *start,
|
||||||
*****************************************************************************/
|
/*! The item to search for. */
|
||||||
int ListSize(LinkedList* list);
|
void *item);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the size of the list.
|
||||||
|
*
|
||||||
|
* Precondition: The list has been initialized.
|
||||||
|
*
|
||||||
|
* \return The number of items in the list.
|
||||||
|
*/
|
||||||
|
long ListSize(
|
||||||
|
/*! Must be valid, non null, pointer to a linked list. */
|
||||||
|
LinkedList* list);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,526 +32,502 @@
|
|||||||
#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 {
|
||||||
|
SHORT_TERM,
|
||||||
|
PERSISTENT
|
||||||
|
} Duration;
|
||||||
|
|
||||||
typedef enum priority {LOW_PRIORITY,
|
typedef enum priority {
|
||||||
MED_PRIORITY,
|
LOW_PRIORITY,
|
||||||
HIGH_PRIORITY} ThreadPriority;
|
MED_PRIORITY,
|
||||||
|
HIGH_PRIORITY
|
||||||
|
} ThreadPriority;
|
||||||
|
|
||||||
#define DEFAULT_PRIORITY MED_PRIORITY /* default priority used by TPJobInit */
|
/*! default priority used by TPJobInit */
|
||||||
#define DEFAULT_MIN_THREADS 1 /* default minimum used by TPAttrInit */
|
#define DEFAULT_PRIORITY MED_PRIORITY
|
||||||
#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 minimum used by TPAttrInit */
|
||||||
|
#define DEFAULT_MIN_THREADS 1
|
||||||
|
|
||||||
|
/*! default max used by TPAttrInit */
|
||||||
|
#define DEFAULT_MAX_THREADS 10
|
||||||
|
|
||||||
/* Statistics */
|
/*! default stack size used by TPAttrInit */
|
||||||
#ifdef WIN32 /* TODO: check why STATSONLY fails during compilation */
|
#define DEFAULT_STACK_SIZE 0
|
||||||
#undef STATS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef STATS
|
/*! default jobs per thread used by TPAttrInit */
|
||||||
#define STATSONLY(x) x
|
#define DEFAULT_JOBS_PER_THREAD 10
|
||||||
#else
|
|
||||||
#define STATSONLY(x)
|
/*! default starvation time used by TPAttrInit */
|
||||||
#endif
|
#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 _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_SCHED_PARAM 0 /* default priority */
|
|
||||||
|
|
||||||
/****************************************************************************
|
#define DEFAULT_POLICY SCHED_OTHER
|
||||||
* Name: free_routine
|
|
||||||
*
|
/*! Function for freeing a thread argument. */
|
||||||
* Description:
|
|
||||||
* Function for freeing a thread argument
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef void (*free_routine)(void *arg);
|
typedef void (*free_routine)(void *arg);
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: ThreadPoolAttr
|
/*! Attributes for thread pool. Used to set and change parameters of thread
|
||||||
*
|
* pool. */
|
||||||
* Description:
|
|
||||||
* Attributes for thread pool. Used to set and change parameters of
|
|
||||||
* thread pool
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef struct THREADPOOLATTR
|
typedef struct THREADPOOLATTR
|
||||||
{
|
{
|
||||||
int minThreads; /* minThreads, ThreadPool will always maintain at least
|
/*! ThreadPool will always maintain at least this many threads. */
|
||||||
this many threads */
|
int minThreads;
|
||||||
|
/*! 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 */
|
/*! This is the minimum stack size allocated for each thread. */
|
||||||
|
size_t stackSize;
|
||||||
int maxIdleTime; /* maxIdleTime (in milliseconds)
|
/*! This is the maximum time a thread will
|
||||||
this is the maximum time a thread will remain idle
|
* remain idle before dying (in milliseconds). */
|
||||||
before dying */
|
int maxIdleTime;
|
||||||
|
/*! 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
|
||||||
int starvationTime; /* the time a low priority or med priority
|
* bumped up a priority (in milliseconds). */
|
||||||
job waits before getting bumped
|
int starvationTime;
|
||||||
up a priority (in milliseconds) */
|
/*! scheduling policy to use. */
|
||||||
|
PolicyType schedPolicy;
|
||||||
PolicyType schedPolicy; /* scheduling policy to use */
|
|
||||||
|
|
||||||
} ThreadPoolAttr;
|
} ThreadPoolAttr;
|
||||||
|
|
||||||
/****************************************************************************
|
/*! Internal ThreadPool Job. */
|
||||||
* Name: ThreadPool
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Internal ThreadPool Job
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef struct THREADPOOLJOB
|
typedef struct THREADPOOLJOB
|
||||||
{
|
{
|
||||||
start_routine func;
|
start_routine func;
|
||||||
void *arg;
|
void *arg;
|
||||||
free_routine free_func;
|
free_routine free_func;
|
||||||
struct timeb requestTime;
|
struct timeval requestTime;
|
||||||
int priority;
|
int priority;
|
||||||
int jobId;
|
int jobId;
|
||||||
} ThreadPoolJob;
|
} ThreadPoolJob;
|
||||||
|
|
||||||
/****************************************************************************
|
/*! Structure to hold statistics. */
|
||||||
* Name: ThreadPoolStats
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Structure to hold statistics
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
#ifdef STATS
|
|
||||||
|
|
||||||
typedef struct TPOOLSTATS
|
typedef struct TPOOLSTATS
|
||||||
{
|
{
|
||||||
double totalTimeHQ;
|
double totalTimeHQ;
|
||||||
int totalJobsHQ;
|
int totalJobsHQ;
|
||||||
double avgWaitHQ;
|
double avgWaitHQ;
|
||||||
double totalTimeMQ;
|
double totalTimeMQ;
|
||||||
int totalJobsMQ;
|
int totalJobsMQ;
|
||||||
double avgWaitMQ;
|
double avgWaitMQ;
|
||||||
double totalTimeLQ;
|
double totalTimeLQ;
|
||||||
int totalJobsLQ;
|
int totalJobsLQ;
|
||||||
double avgWaitLQ;
|
double avgWaitLQ;
|
||||||
double totalWorkTime;
|
double totalWorkTime;
|
||||||
double totalIdleTime;
|
double totalIdleTime;
|
||||||
int workerThreads;
|
int workerThreads;
|
||||||
int idleThreads;
|
int idleThreads;
|
||||||
int persistentThreads;
|
int persistentThreads;
|
||||||
int totalThreads;
|
int totalThreads;
|
||||||
int maxThreads;
|
int maxThreads;
|
||||||
int currentJobsHQ;
|
int currentJobsHQ;
|
||||||
int currentJobsLQ;
|
int currentJobsLQ;
|
||||||
int currentJobsMQ;
|
int currentJobsMQ;
|
||||||
}ThreadPoolStats;
|
} ThreadPoolStats;
|
||||||
|
|
||||||
#endif
|
/*!
|
||||||
|
* \brief A thread pool similar to the thread pool in the UPnP SDK.
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: ThreadPool
|
|
||||||
*
|
*
|
||||||
* Description:
|
* Allows jobs to be scheduled for running by threads in a
|
||||||
* A thread pool similar to the thread pool in the UPnP SDK.
|
* thread pool. The thread pool is initialized with a
|
||||||
* Allows jobs to be scheduled for running by threads in a
|
* minimum and maximum thread number as well as a max idle time
|
||||||
* thread pool. The thread pool is initialized with a
|
* and a jobs per thread ratio. If a worker thread waits the whole
|
||||||
* minimum and maximum thread number as well as a
|
* max idle time without receiving a job and the thread pool
|
||||||
* max idle time
|
* currently has more threads running than the minimum
|
||||||
* and a jobs per thread ratio. If a worker thread waits the whole
|
* then the worker thread will exit. If when
|
||||||
* max idle time without receiving a job and the thread pool
|
* scheduling a job the current job to thread ratio
|
||||||
* currently has more threads running than the minimum
|
* becomes greater than the set ratio and the thread pool currently has
|
||||||
* then the worker thread will exit. If when
|
* less than the maximum threads then a new thread will
|
||||||
* scheduling a job the current job to thread ratio
|
* be created.
|
||||||
* becomes greater than the set ratio and the thread pool currently has
|
*/
|
||||||
* less than the maximum threads then a new thread will
|
|
||||||
* be created.
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
typedef struct THREADPOOL
|
typedef struct THREADPOOL
|
||||||
{
|
{
|
||||||
ithread_mutex_t mutex; /* mutex to protect job qs */
|
/*! Mutex to protect job qs. */
|
||||||
ithread_cond_t condition; /* condition variable to signal Q */
|
ithread_mutex_t mutex;
|
||||||
ithread_cond_t start_and_shutdown; /* condition variable for start
|
/*! Condition variable to signal Q. */
|
||||||
and stop */
|
ithread_cond_t condition;
|
||||||
int lastJobId; /* ids for jobs */
|
/*! Condition variable for start and stop. */
|
||||||
int shutdown; /* whether or not we are shutting down */
|
ithread_cond_t start_and_shutdown;
|
||||||
int totalThreads; /* total number of threads */
|
/*! ids for jobs */
|
||||||
int persistentThreads; /* number of persistent threads */
|
int lastJobId;
|
||||||
FreeList jobFreeList; /* free list of jobs */
|
/*! whether or not we are shutting down */
|
||||||
LinkedList lowJobQ; /* low priority job Q */
|
int shutdown;
|
||||||
LinkedList medJobQ; /* med priority job Q */
|
/*! total number of threads */
|
||||||
LinkedList highJobQ; /* high priority job Q */
|
int totalThreads;
|
||||||
ThreadPoolJob *persistentJob; /* persistent job */
|
/*! number of threads that are currently executing jobs */
|
||||||
|
int busyThreads;
|
||||||
ThreadPoolAttr attr; /* thread pool attributes */
|
/*! number of persistent threads */
|
||||||
|
int persistentThreads;
|
||||||
#ifdef STATS
|
/*! free list of jobs */
|
||||||
/* statistics */
|
FreeList jobFreeList;
|
||||||
ThreadPoolStats stats;
|
/*! low priority job Q */
|
||||||
#endif
|
LinkedList lowJobQ;
|
||||||
|
/*! med priority job Q */
|
||||||
|
LinkedList medJobQ;
|
||||||
|
/*! high priority job Q */
|
||||||
|
LinkedList highJobQ;
|
||||||
|
/*! persistent job */
|
||||||
|
ThreadPoolJob *persistentJob;
|
||||||
|
/*! thread pool attributes */
|
||||||
|
ThreadPoolAttr attr;
|
||||||
|
/*! statistics */
|
||||||
|
ThreadPoolStats stats;
|
||||||
} ThreadPool;
|
} ThreadPool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes and starts ThreadPool. Must be called first and
|
||||||
|
* only once for ThreadPool.
|
||||||
|
*
|
||||||
|
* \return
|
||||||
|
* \li \c 0 on success.
|
||||||
|
* \li \c EAGAIN if not enough system resources to create minimum threads.
|
||||||
|
* \li \c INVALID_POLICY if schedPolicy can't be set.
|
||||||
|
* \li \c EMAXTHREADS if minimum threads is greater than maximum threads.
|
||||||
|
*/
|
||||||
|
int ThreadPoolInit(
|
||||||
|
/*! Must be valid, non null, pointer to ThreadPool. */
|
||||||
|
ThreadPool *tp,
|
||||||
|
/*! Can be null. if not null then attr contains the following fields:
|
||||||
|
* \li \c minWorkerThreads - minimum number of worker threads thread
|
||||||
|
* pool will never have less than this number of threads.
|
||||||
|
* \li \c maxWorkerThreads - maximum number of worker threads thread
|
||||||
|
* pool will never have more than this number of threads.
|
||||||
|
* \li \c maxIdleTime - maximum time that a worker thread will spend
|
||||||
|
* idle. If a worker is idle longer than this time and there are more
|
||||||
|
* than the min number of workers running, then the worker thread
|
||||||
|
* exits.
|
||||||
|
* \li \c jobsPerThread - ratio of jobs to thread to try and maintain
|
||||||
|
* if a job is scheduled and the number of jobs per thread is greater
|
||||||
|
* than this number,and if less than the maximum number of workers are
|
||||||
|
* running then a new thread is started to help out with efficiency.
|
||||||
|
* \li \c schedPolicy - scheduling policy to try and set (OS dependent).
|
||||||
|
*/
|
||||||
|
ThreadPoolAttr *attr);
|
||||||
|
|
||||||
|
/*!
|
||||||
/****************************************************************************
|
* \brief Adds a persistent job to the thread pool.
|
||||||
* Function: ThreadPoolInit
|
|
||||||
*
|
*
|
||||||
* Description:
|
* Job will be run as soon as possible. Call will block until job is scheduled.
|
||||||
* Initializes and starts ThreadPool. Must be called first.
|
|
||||||
* And only once for ThreadPool.
|
|
||||||
* Parameters:
|
|
||||||
* tp - must be valid, non null, pointer to ThreadPool.
|
|
||||||
* attr - can be null
|
|
||||||
*
|
|
||||||
* if not null then attr contains the following fields:
|
|
||||||
*
|
|
||||||
* minWorkerThreads - minimum number of worker threads
|
|
||||||
* thread pool will never have less than this
|
|
||||||
* number of threads.
|
|
||||||
* maxWorkerThreads - maximum number of worker threads
|
|
||||||
* thread pool will never have more than this
|
|
||||||
* number of threads.
|
|
||||||
* maxIdleTime - maximum time that a worker thread will spend
|
|
||||||
* idle. If a worker is idle longer than this
|
|
||||||
* time and there are more than the min
|
|
||||||
* number of workers running, than the
|
|
||||||
* worker thread exits.
|
|
||||||
* jobsPerThread - ratio of jobs to thread to try and maintain
|
|
||||||
* if a job is scheduled and the number of jobs per
|
|
||||||
* thread is greater than this number,and
|
|
||||||
* if less than the maximum number of
|
|
||||||
* workers are running then a new thread is
|
|
||||||
* started to help out with efficiency.
|
|
||||||
* schedPolicy - scheduling policy to try and set (OS dependent)
|
|
||||||
* Returns:
|
|
||||||
* 0 on success, nonzero on failure.
|
|
||||||
* EAGAIN if not enough system resources to create minimum threads.
|
|
||||||
* INVALID_POLICY if schedPolicy can't be set
|
|
||||||
* EMAXTHREADS if minimum threads is greater than maximum threads
|
|
||||||
*****************************************************************************/
|
|
||||||
int ThreadPoolInit(ThreadPool *tp,
|
|
||||||
ThreadPoolAttr *attr);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ThreadPoolAddPersistent
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Adds a persistent job to the thread pool.
|
|
||||||
* Job will be run as soon as possible.
|
|
||||||
* Call will block until job is scheduled.
|
|
||||||
* Parameters:
|
|
||||||
* tp - valid thread pool pointer
|
|
||||||
* ThreadPoolJob - valid thread pool job with the following fields:
|
|
||||||
*
|
|
||||||
* func - ThreadFunction to run
|
|
||||||
* arg - argument to function.
|
|
||||||
* priority - priority of job.
|
|
||||||
*
|
*
|
||||||
* Returns:
|
* \return
|
||||||
* 0 on success, nonzero on failure
|
* \li \c 0 on success.
|
||||||
* EOUTOFMEM not enough memory to add job.
|
* \li \c EOUTOFMEM not enough memory to add job.
|
||||||
* EMAXTHREADS not enough threads to add persistent job.
|
* \li \c EMAXTHREADS not enough threads to add persistent job.
|
||||||
*****************************************************************************/
|
*/
|
||||||
int ThreadPoolAddPersistent (ThreadPool*tp,
|
int ThreadPoolAddPersistent(
|
||||||
ThreadPoolJob *job,
|
/*! Valid thread pool pointer. */
|
||||||
int *jobId);
|
ThreadPool*tp,
|
||||||
|
/*! Valid thread pool job. */
|
||||||
|
ThreadPoolJob *job,
|
||||||
|
/*! . */
|
||||||
|
int *jobId);
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ThreadPoolGetAttr
|
* \brief Gets the current set of attributes associated with the thread pool.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return
|
||||||
* Gets the current set of attributes
|
* \li \c 0 on success, nonzero on failure.
|
||||||
* associated with the thread pool.
|
*/
|
||||||
* Parameters:
|
int ThreadPoolGetAttr(
|
||||||
* tp - valid thread pool pointer
|
/*! valid thread pool pointer. */
|
||||||
* out - non null pointer to store attributes
|
ThreadPool *tp,
|
||||||
* Returns:
|
/*! non null pointer to store attributes. */
|
||||||
* 0 on success, nonzero on failure
|
ThreadPoolAttr *out);
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
/*!
|
||||||
int ThreadPoolGetAttr(ThreadPool *tp,
|
* \brief Sets the attributes for the thread pool.
|
||||||
ThreadPoolAttr *out);
|
* Only affects future calculations.
|
||||||
/****************************************************************************
|
|
||||||
* Function: ThreadPoolSetAttr
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return
|
||||||
* Sets the attributes for the thread pool.
|
* \li \c 0 on success, nonzero on failure.
|
||||||
* Only affects future calculations.
|
* \li \c INVALID_POLICY if policy can not be set.
|
||||||
* Parameters:
|
*/
|
||||||
* tp - valid thread pool pointer
|
int ThreadPoolSetAttr(
|
||||||
* attr - pointer to attributes, null sets attributes to default.
|
/*! valid thread pool pointer. */
|
||||||
* Returns:
|
ThreadPool *tp,
|
||||||
* 0 on success, nonzero on failure
|
/*! pointer to attributes, null sets attributes to default. */
|
||||||
* Returns INVALID_POLICY if policy can not be set.
|
ThreadPoolAttr *attr);
|
||||||
*****************************************************************************/
|
|
||||||
int ThreadPoolSetAttr(ThreadPool *tp,
|
|
||||||
ThreadPoolAttr *attr);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ThreadPoolAdd
|
* \brief Adds a job to the thread pool. Job will be run as soon as possible.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return
|
||||||
* Adds a job to the thread pool.
|
* \li \c 0 on success, nonzero on failure.
|
||||||
* Job will be run as soon as possible.
|
* \li \c EOUTOFMEM if not enough memory to add job.
|
||||||
* Parameters:
|
*/
|
||||||
* tp - valid thread pool pointer
|
int ThreadPoolAdd(
|
||||||
* func - ThreadFunction to run
|
/*! valid thread pool pointer. */
|
||||||
* arg - argument to function.
|
ThreadPool*tp,
|
||||||
* priority - priority of job.
|
/*! . */
|
||||||
* poolid - id of job
|
ThreadPoolJob *job,
|
||||||
* free_function - function to use when freeing argument
|
/*! id of job. */
|
||||||
* Returns:
|
int *jobId);
|
||||||
* 0 on success, nonzero on failure
|
|
||||||
* EOUTOFMEM if not enough memory to add job.
|
|
||||||
*****************************************************************************/
|
|
||||||
int ThreadPoolAdd (ThreadPool*tp,
|
|
||||||
ThreadPoolJob *job,
|
|
||||||
int *jobId);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ThreadPoolRemove
|
* \brief Removes a job from the thread pool. Can only remove jobs which
|
||||||
|
* are not currently running.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return
|
||||||
* Removes a job from the thread pool.
|
* \li \c 0 on success, nonzero on failure.
|
||||||
* Can only remove jobs which are not
|
* \li \c INVALID_JOB_ID if job not found.
|
||||||
* currently running.
|
*/
|
||||||
* Parameters:
|
int ThreadPoolRemove(
|
||||||
* tp - valid thread pool pointer
|
/*! valid thread pool pointer. */
|
||||||
* jobid - id of job
|
ThreadPool *tp,
|
||||||
* out - space for removed job.
|
/*! id of job. */
|
||||||
* Returns:
|
int jobId,
|
||||||
* 0 on success, nonzero on failure.
|
/*! space for removed job. */
|
||||||
* INVALID_JOB_ID if job not found.
|
ThreadPoolJob *out);
|
||||||
*****************************************************************************/
|
|
||||||
int ThreadPoolRemove(ThreadPool *tp,
|
|
||||||
int jobId, ThreadPoolJob *out);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Shuts the thread pool down. Waits for all threads to finish.
|
||||||
/****************************************************************************
|
* May block indefinitely if jobs do not exit.
|
||||||
* Function: ThreadPoolShutdown
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return 0 on success, nonzero on failure
|
||||||
* Shuts the thread pool down.
|
*/
|
||||||
* Waits for all threads to finish.
|
int ThreadPoolShutdown(
|
||||||
* May block indefinitely if jobs do not
|
/*! must be valid tp. */
|
||||||
* exit.
|
ThreadPool *tp);
|
||||||
* Parameters:
|
|
||||||
* tp - must be valid tp
|
|
||||||
* Returns:
|
|
||||||
* 0 on success, nonzero on failure
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int ThreadPoolShutdown(ThreadPool *tp);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
/****************************************************************************
|
* \brief Initializes thread pool job. Sets the priority to default defined
|
||||||
* Function: TPJobInit
|
* in ThreadPool.h. Sets the free_routine to default defined in ThreadPool.h.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Initializes thread pool job.
|
*/
|
||||||
* Sets the priority to default defined in ThreadPool.h.
|
int TPJobInit(
|
||||||
* Sets the free_routine to default defined in ThreadPool.h
|
/*! must be valid thread pool attributes. */
|
||||||
* Parameters:
|
ThreadPoolJob *job,
|
||||||
* ThreadPoolJob *job - must be valid thread pool attributes.
|
/*! function to run, must be valid. */
|
||||||
* start_routine func - function to run, must be valid
|
start_routine func,
|
||||||
* void * arg - argument to pass to function.
|
/*! argument to pass to function. */
|
||||||
* Returns:
|
void *arg);
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPJobSetPriority
|
* \brief Sets the max threads for the thread pool attributes.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the max threads for the thread pool attributes.
|
*/
|
||||||
* Parameters:
|
int TPJobSetPriority(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* maxThreads - value to set
|
ThreadPoolJob *job,
|
||||||
* Returns:
|
/*! value to set. */
|
||||||
* Always returns 0.
|
ThreadPriority priority);
|
||||||
*****************************************************************************/
|
|
||||||
int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPJobSetFreeFunction
|
* \brief Sets the max threads for the thread pool attributes.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the max threads for the thread pool attributes.
|
*/
|
||||||
* Parameters:
|
int TPJobSetFreeFunction(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* maxThreads - value to set
|
ThreadPoolJob *job,
|
||||||
* Returns:
|
/*! value to set. */
|
||||||
* Always returns 0.
|
free_routine func);
|
||||||
*****************************************************************************/
|
|
||||||
int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
/****************************************************************************
|
* \brief Initializes thread pool attributes. Sets values to defaults defined
|
||||||
* Function: TPAttrInit
|
* in ThreadPool.h.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Initializes thread pool attributes.
|
*/
|
||||||
* Sets values to defaults defined in ThreadPool.h.
|
int TPAttrInit(
|
||||||
* Parameters:
|
/*! must be valid thread pool attributes. */
|
||||||
* attr - must be valid thread pool attributes.
|
ThreadPoolAttr *attr);
|
||||||
* Returns:
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int TPAttrInit(ThreadPoolAttr *attr);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPAttrSetMaxThreads
|
* \brief Sets the max threads for the thread pool attributes.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the max threads for the thread pool attributes.
|
*/
|
||||||
* Parameters:
|
int TPAttrSetMaxThreads(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* maxThreads - value to set
|
ThreadPoolAttr *attr,
|
||||||
* Returns:
|
/*! value to set. */
|
||||||
* Always returns 0.
|
int maxThreads);
|
||||||
*****************************************************************************/
|
|
||||||
int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPAttrSetMinThreads
|
* \brief Sets the min threads for the thread pool attributes.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the min threads for the thread pool attributes.
|
*/
|
||||||
* Parameters:
|
int TPAttrSetMinThreads(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* minThreads - value to set
|
ThreadPoolAttr *attr,
|
||||||
* Returns:
|
/*! value to set. */
|
||||||
* Always returns 0.
|
int minThreads);
|
||||||
*****************************************************************************/
|
|
||||||
int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPAttrSetIdleTime
|
* \brief Sets the stack size for the thread pool attributes.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the idle time for the thread pool attributes.
|
*/
|
||||||
* Parameters:
|
int TPAttrSetStackSize(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* Returns:
|
ThreadPoolAttr *attr,
|
||||||
* Always returns 0.
|
/*! value to set. */
|
||||||
*****************************************************************************/
|
size_t stackSize);
|
||||||
int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPAttrSetJobsPerThread
|
* \brief Sets the idle time for the thread pool attributes.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the jobs per thread ratio
|
*/
|
||||||
* Parameters:
|
int TPAttrSetIdleTime(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* jobsPerThread - number of jobs per thread to maintain
|
ThreadPoolAttr *attr,
|
||||||
* Returns:
|
/*! . */
|
||||||
* Always returns 0.
|
int idleTime);
|
||||||
*****************************************************************************/
|
|
||||||
int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPAttrSetStarvationTime
|
* \brief Sets the jobs per thread ratio
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the starvation time for the thread pool attributes.
|
*/
|
||||||
* Parameters:
|
int TPAttrSetJobsPerThread(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* int starvationTime - milliseconds
|
ThreadPoolAttr *attr,
|
||||||
* Returns:
|
/*! number of jobs per thread to maintain. */
|
||||||
* Always returns 0.
|
int jobsPerThread);
|
||||||
*****************************************************************************/
|
|
||||||
int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TPAttrSetSchedPolicy
|
* \brief Sets the starvation time for the thread pool attributes.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the scheduling policy for the thread pool attributes.
|
*/
|
||||||
* Parameters:
|
int TPAttrSetStarvationTime(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* PolicyType schedPolicy - must be a valid policy type.
|
ThreadPoolAttr *attr,
|
||||||
* Returns:
|
/*! milliseconds. */
|
||||||
* Always returns 0.
|
int starvationTime);
|
||||||
*****************************************************************************/
|
|
||||||
int TPAttrSetSchedPolicy(ThreadPoolAttr *attr, PolicyType schedPolicy);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
/****************************************************************************
|
* \brief Sets the scheduling policy for the thread pool attributes.
|
||||||
* Function: TPAttrSetMaxJobsTotal
|
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Sets the maximum number jobs that can be qeued totally.
|
*/
|
||||||
* Parameters:
|
int TPAttrSetSchedPolicy(
|
||||||
* attr - must be valid thread pool attributes.
|
/*! must be valid thread pool attributes. */
|
||||||
* maxJobsTotal - maximum number of jobs
|
ThreadPoolAttr *attr,
|
||||||
* Returns:
|
/*! must be a valid policy type. */
|
||||||
* Always returns 0.
|
PolicyType schedPolicy);
|
||||||
*****************************************************************************/
|
|
||||||
int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: ThreadPoolGetStats
|
* \brief Sets the maximum number jobs that can be qeued totally.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return Always returns 0.
|
||||||
* Returns various statistics about the
|
*/
|
||||||
* thread pool.
|
int TPAttrSetMaxJobsTotal(
|
||||||
* Only valid if STATS has been defined.
|
/*! must be valid thread pool attributes. */
|
||||||
* Parameters:
|
ThreadPoolAttr *attr,
|
||||||
* ThreadPool *tp - valid initialized threadpool
|
/*! maximum number of jobs. */
|
||||||
* ThreadPoolStats *stats - valid stats, out parameter
|
int maxJobsTotal);
|
||||||
* Returns:
|
|
||||||
* Always returns 0.
|
/*!
|
||||||
*****************************************************************************/
|
* \brief Returns various statistics about the thread pool.
|
||||||
|
*
|
||||||
|
* Only valid if STATS has been defined.
|
||||||
|
*
|
||||||
|
* \return Always returns 0.
|
||||||
|
*/
|
||||||
#ifdef STATS
|
#ifdef STATS
|
||||||
EXPORT int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats);
|
EXPORT_SPEC int ThreadPoolGetStats(
|
||||||
|
/*! Valid initialized threadpool. */
|
||||||
|
ThreadPool *tp,
|
||||||
|
/*! Valid stats, out parameter. */
|
||||||
|
ThreadPoolStats *stats);
|
||||||
|
#else
|
||||||
|
static UPNP_INLINE int ThreadPoolGetStats(
|
||||||
|
/*! Valid initialized threadpool. */
|
||||||
|
ThreadPool *tp,
|
||||||
|
/*! Valid stats, out parameter. */
|
||||||
|
ThreadPoolStats *stats) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
EXPORT void ThreadPoolPrintStats(ThreadPoolStats *stats);
|
/*!
|
||||||
|
* \brief
|
||||||
|
*/
|
||||||
|
#ifdef STATS
|
||||||
|
EXPORT_SPEC void ThreadPoolPrintStats(
|
||||||
|
/*! . */
|
||||||
|
ThreadPoolStats *stats);
|
||||||
|
#else
|
||||||
|
static UPNP_INLINE void ThreadPoolPrintStats(
|
||||||
|
/*! . */
|
||||||
|
ThreadPoolStats *stats) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* ThreadPool */
|
#endif /* THREADPOOL_H */
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,13 @@
|
|||||||
#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
|
||||||
@@ -43,146 +47,111 @@ extern "C" {
|
|||||||
|
|
||||||
#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 */
|
typedef enum timeoutType {
|
||||||
/* relative means in seconds from current time */
|
/*! seconds from Jan 1, 1970. */
|
||||||
typedef enum timeoutType {ABS_SEC,REL_SEC} TimeoutType;
|
ABS_SEC,
|
||||||
|
/*! seconds from current time. */
|
||||||
|
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:
|
* Because the timer thread uses the thread pool there is no
|
||||||
* A timer thread similar to the one in the Upnp SDK that allows
|
* gurantee of timing, only approximate timing.
|
||||||
* 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
|
* Uses ThreadPool, Mutex, Condition, Thread.
|
||||||
* gurantee of timing, only approximate timing.
|
*/
|
||||||
* Uses ThreadPool, Mutex, Condition, Thread
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
typedef struct TIMERTHREAD
|
typedef struct TIMERTHREAD
|
||||||
{
|
{
|
||||||
ithread_mutex_t mutex;
|
ithread_mutex_t mutex;
|
||||||
ithread_cond_t condition;
|
ithread_cond_t condition;
|
||||||
int lastEventId;
|
int lastEventId;
|
||||||
LinkedList eventQ;
|
LinkedList eventQ;
|
||||||
int shutdown;
|
int shutdown;
|
||||||
FreeList freeEvents;
|
FreeList freeEvents;
|
||||||
ThreadPool *tp;
|
ThreadPool *tp;
|
||||||
} 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;
|
||||||
time_t eventTime; /* absolute time for event in seconds since Jan 1, 1970 */
|
/*! [in] Absolute time for event in seconds since Jan 1, 1970. */
|
||||||
Duration persistent; /* long term or short term job */
|
time_t eventTime;
|
||||||
int id;
|
/*! [in] Long term or short term job. */
|
||||||
|
Duration persistent;
|
||||||
|
int id;
|
||||||
} TimerEvent;
|
} TimerEvent;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes and starts timer thread.
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function: TimerThreadInit
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initializes and starts timer thread.
|
|
||||||
*
|
*
|
||||||
* Parameters:
|
* \return 0 on success, nonzero on failure. Returns error from
|
||||||
* timer - valid timer thread pointer.
|
* ThreadPoolAddPersistent on failure.
|
||||||
* tp - valid thread pool to use. Must be
|
*/
|
||||||
* started. Must be valid for lifetime
|
int TimerThreadInit(
|
||||||
* of timer. Timer must be shutdown
|
/*! [in] Valid timer thread pointer. */
|
||||||
* BEFORE thread pool.
|
TimerThread *timer,
|
||||||
* Return:
|
/*! [in] Valid thread pool to use. Must be started. Must be valid for
|
||||||
* 0 on success, nonzero on failure
|
* lifetime of timer. Timer must be shutdown BEFORE thread pool. */
|
||||||
* Returns error from ThreadPoolAddPersistent on failure.
|
ThreadPool *tp);
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
int TimerThreadInit(TimerThread *timer,
|
|
||||||
ThreadPool *tp);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
/************************************************************************
|
* \brief Schedules an event to run at a specified time.
|
||||||
* Function: TimerThreadSchedule
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Schedules an event to run at a specified time.
|
|
||||||
*
|
*
|
||||||
* Parameters:
|
* \return 0 on success, nonzero on failure, EOUTOFMEM if not enough memory
|
||||||
* timer - valid timer thread pointer.
|
* to schedule job.
|
||||||
* time_t - time of event.
|
*/
|
||||||
* either in absolute seconds,
|
int TimerThreadSchedule(
|
||||||
* or relative seconds in the future.
|
/*! [in] Valid timer thread pointer. */
|
||||||
* timeoutType - either ABS_SEC, or REL_SEC.
|
TimerThread* timer,
|
||||||
* if REL_SEC, then the event
|
/*! [in] time of event. Either in absolute seconds, or relative
|
||||||
* will be scheduled at the
|
* seconds in the future. */
|
||||||
* current time + REL_SEC.
|
time_t time,
|
||||||
* job-> valid Thread pool job with following fields
|
/*! [in] either ABS_SEC, or REL_SEC. If REL_SEC, then the event
|
||||||
* func - function to schedule
|
* will be scheduled at the current time + REL_SEC. */
|
||||||
* arg - argument to function
|
TimeoutType type,
|
||||||
* priority - priority of job.
|
/*! [in] Valid Thread pool job with following fields. */
|
||||||
*
|
ThreadPoolJob *job,
|
||||||
* id - id of timer event. (out, can be null)
|
/*! [in] . */
|
||||||
* Return:
|
Duration duration,
|
||||||
* 0 on success, nonzero on failure
|
/*! [in] Id of timer event. (out, can be null). */
|
||||||
* EOUTOFMEM if not enough memory to schedule job.
|
int *id);
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
int TimerThreadSchedule(TimerThread* timer,
|
|
||||||
time_t time,
|
|
||||||
TimeoutType type,
|
|
||||||
ThreadPoolJob *job,
|
|
||||||
Duration duration,
|
|
||||||
int *id);
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function: TimerThreadRemove
|
* \brief Removes an event from the timer Q.
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Removes an event from the timer Q.
|
|
||||||
* Events can only be removed
|
|
||||||
* before they have been placed in the
|
|
||||||
* thread pool.
|
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Events can only be removed before they have been placed in the thread pool.
|
||||||
* timer - valid timer thread pointer.
|
*
|
||||||
* id - id of event to remove.
|
* \return 0 on success, INVALID_EVENT_ID on failure.
|
||||||
* ThreadPoolJob *out - space for thread pool job.
|
*/
|
||||||
* Return:
|
int TimerThreadRemove(
|
||||||
* 0 on success,
|
/*! [in] Valid timer thread pointer. */
|
||||||
* INVALID_EVENT_ID on failure
|
TimerThread *timer,
|
||||||
*
|
/*! [in] Id of event to remove. */
|
||||||
************************************************************************/
|
int id,
|
||||||
int TimerThreadRemove(TimerThread *timer,
|
/*! [in] Space for thread pool job. */
|
||||||
int id,
|
ThreadPoolJob *out);
|
||||||
ThreadPoolJob *out);
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function: TimerThreadShutdown
|
* \brief Shutdown the timer thread.
|
||||||
*
|
*
|
||||||
* Description:
|
* Events scheduled in the future will NOT be run.
|
||||||
* Shutdown the timer thread
|
*
|
||||||
* Events scheduled in the future will NOT be run.
|
* Timer thread should be shutdown BEFORE it's associated thread pool.
|
||||||
* Timer thread should be shutdown BEFORE it's associated
|
*
|
||||||
* thread pool.
|
* \return 0 if succesfull, nonzero otherwise. Always returns 0.
|
||||||
* Returns:
|
*/
|
||||||
* returns 0 if succesfull,
|
int TimerThreadShutdown(
|
||||||
* nonzero otherwise.
|
/*! [in] Valid timer thread pointer. */
|
||||||
* Always returns 0.
|
TimerThread *timer);
|
||||||
***********************************************************************/
|
|
||||||
int TimerThreadShutdown(TimerThread *timer);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,144 +29,291 @@
|
|||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef ITHREADH
|
|
||||||
#define ITHREADH
|
#ifndef ITHREAD_H
|
||||||
|
#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>
|
||||||
#ifndef WIN32
|
#ifdef WIN32
|
||||||
|
/* Do not #include <unistd.h> */
|
||||||
|
#else
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
|
||||||
#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
#if defined(BSD)
|
||||||
|
#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PTHREAD_MUTEX_RECURSIVE
|
|
||||||
/* This system has SuS2-compliant mutex attributes.
|
#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
|
||||||
* E.g. on Cygwin, where we don't have the old nonportable (NP) symbols
|
/* This system has SuS2-compliant mutex attributes.
|
||||||
*/
|
* E.g. on Cygwin, where we don't have the old nonportable (NP) symbols
|
||||||
#define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL
|
*/
|
||||||
#define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
#define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL
|
||||||
#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK
|
#define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
||||||
#else
|
#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK
|
||||||
#define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_FAST_NP
|
#else /* PTHREAD_MUTEX_RECURSIVE */
|
||||||
#define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE_NP
|
#define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_FAST_NP
|
||||||
#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP
|
#define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE_NP
|
||||||
#endif
|
#define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP
|
||||||
|
#endif /* PTHREAD_MUTEX_RECURSIVE */
|
||||||
|
|
||||||
|
|
||||||
|
#define ITHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
|
||||||
|
#define ITHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
|
||||||
|
|
||||||
|
|
||||||
#define ITHREAD_CANCELED PTHREAD_CANCELED
|
#define ITHREAD_CANCELED PTHREAD_CANCELED
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
#define ITHREAD_STACK_MIN PTHREAD_STACK_MIN
|
||||||
* Name: ithread_t
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Thread handle.
|
|
||||||
* typedef to pthread_t.
|
|
||||||
* Internal Use Only.
|
|
||||||
***************************************************************************/
|
|
||||||
typedef pthread_t ithread_t;
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: ithread_attr_t
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Thread attribute.
|
|
||||||
* typedef to pthread_attr_t
|
|
||||||
* Internal Use Only
|
|
||||||
***************************************************************************/
|
|
||||||
typedef pthread_attr_t ithread_attr_t;
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/***************************************************************************
|
||||||
* Name: start_routine
|
* Name: ithread_t
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Thread start routine
|
* Thread handle.
|
||||||
* Internal Use Only.
|
* typedef to pthread_t.
|
||||||
***************************************************************************/
|
* Internal Use Only.
|
||||||
typedef void * (*start_routine) (void *arg);
|
***************************************************************************/
|
||||||
|
typedef pthread_t ithread_t;
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: ithread_cond_t
|
* Name: ithread_attr_t
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* condition variable.
|
* Thread attribute.
|
||||||
* typedef to pthread_cond_t
|
* typedef to pthread_attr_t
|
||||||
* Internal Use Only.
|
* Internal Use Only
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
typedef pthread_cond_t ithread_cond_t;
|
typedef pthread_attr_t ithread_attr_t;
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: ithread_mutexattr_t
|
* Name: start_routine
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Mutex attribute.
|
* Thread start routine
|
||||||
* typedef to pthread_mutexattr_t
|
* Internal Use Only.
|
||||||
* Internal Use Only
|
***************************************************************************/
|
||||||
***************************************************************************/
|
typedef void *(*start_routine)(void *arg);
|
||||||
typedef pthread_mutexattr_t ithread_mutexattr_t;
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: ithread_mutex_t
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Mutex.
|
|
||||||
* typedef to pthread_mutex_t
|
|
||||||
* Internal Use Only.
|
|
||||||
***************************************************************************/
|
|
||||||
typedef pthread_mutex_t ithread_mutex_t;
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: ithread_condattr_t
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Condition attribute.
|
|
||||||
* typedef to pthread_condattr_t
|
|
||||||
* NOT USED
|
|
||||||
* Internal Use Only
|
|
||||||
***************************************************************************/
|
|
||||||
typedef pthread_condattr_t ithread_condattr_t;
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ithread_mutexattr_init
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initializes a mutex attribute variable.
|
|
||||||
* Used to set the type of the mutex.
|
|
||||||
* Parameters:
|
|
||||||
* ithread_mutexattr_init * attr (must be valid non NULL pointer to
|
|
||||||
* pthread_mutexattr_t)
|
|
||||||
* Returns:
|
|
||||||
* 0 on success, Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
* See man page for pthread_mutexattr_init
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: ithread_cond_t
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* condition variable.
|
||||||
|
* typedef to pthread_cond_t
|
||||||
|
* Internal Use Only.
|
||||||
|
***************************************************************************/
|
||||||
|
typedef pthread_cond_t ithread_cond_t;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: ithread_mutexattr_t
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Mutex attribute.
|
||||||
|
* typedef to pthread_mutexattr_t
|
||||||
|
* Internal Use Only
|
||||||
|
***************************************************************************/
|
||||||
|
typedef pthread_mutexattr_t ithread_mutexattr_t;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: ithread_mutex_t
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Mutex.
|
||||||
|
* typedef to pthread_mutex_t
|
||||||
|
* Internal Use Only.
|
||||||
|
***************************************************************************/
|
||||||
|
typedef pthread_mutex_t ithread_mutex_t;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: ithread_condattr_t
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Condition attribute.
|
||||||
|
* typedef to pthread_condattr_t
|
||||||
|
* NOT USED
|
||||||
|
* Internal Use Only
|
||||||
|
***************************************************************************/
|
||||||
|
typedef pthread_condattr_t ithread_condattr_t;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: ithread_rwlockattr_t
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Mutex attribute.
|
||||||
|
* typedef to pthread_rwlockattr_t
|
||||||
|
* Internal Use Only
|
||||||
|
***************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
typedef pthread_rwlockattr_t ithread_rwlockattr_t;
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: ithread_rwlock_t
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Condition attribute.
|
||||||
|
* typedef to pthread_rwlock_t
|
||||||
|
* Internal Use Only
|
||||||
|
***************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
typedef pthread_rwlock_t ithread_rwlock_t;
|
||||||
|
#else
|
||||||
|
/* Read-write locks aren't available: use mutex instead. */
|
||||||
|
typedef ithread_mutex_t ithread_rwlock_t;
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_initialize_library
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initializes the library. Does nothing in all implementations, except
|
||||||
|
* when statically linked for WIN32.
|
||||||
|
* Parameters:
|
||||||
|
* none.
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
***************************************************************************/
|
||||||
|
static UPNP_INLINE int ithread_initialize_library(void) {
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
|
||||||
|
ret = !pthread_win32_process_attach_np();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_cleanup_library
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Clean up library resources. Does nothing in all implementations, except
|
||||||
|
* when statically linked for WIN32.
|
||||||
|
* Parameters:
|
||||||
|
* none.
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
***************************************************************************/
|
||||||
|
static UPNP_INLINE int ithread_cleanup_library(void) {
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
|
||||||
|
ret = !pthread_win32_process_detach_np();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_initialize_thread
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initializes the thread. Does nothing in all implementations, except
|
||||||
|
* when statically linked for WIN32.
|
||||||
|
* Parameters:
|
||||||
|
* none.
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
***************************************************************************/
|
||||||
|
static UPNP_INLINE int ithread_initialize_thread(void) {
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
|
||||||
|
ret = !pthread_win32_thread_attach_np();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_cleanup_thread
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Clean up thread resources. Does nothing in all implementations, except
|
||||||
|
* when statically linked for WIN32.
|
||||||
|
* Parameters:
|
||||||
|
* none.
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
***************************************************************************/
|
||||||
|
static UPNP_INLINE int ithread_cleanup_thread(void) {
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
#if defined(WIN32) && defined(PTW32_STATIC_LIB)
|
||||||
|
ret = !pthread_win32_thread_detach_np();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_mutexattr_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initializes a mutex attribute variable.
|
||||||
|
* Used to set the type of the mutex.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_mutexattr_init * attr (must be valid non NULL pointer to
|
||||||
|
* pthread_mutexattr_t)
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_mutexattr_init
|
||||||
|
***************************************************************************/
|
||||||
#define ithread_mutexattr_init pthread_mutexattr_init
|
#define ithread_mutexattr_init pthread_mutexattr_init
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Function: ithread_mutexattr_destroy
|
/****************************************************************************
|
||||||
*
|
* Function: ithread_mutexattr_destroy
|
||||||
* Description:
|
*
|
||||||
* Releases any resources held by the mutex attribute.
|
* Description:
|
||||||
* Currently there are no resources associated with the attribute
|
* Releases any resources held by the mutex attribute.
|
||||||
* Parameters:
|
* Currently there are no resources associated with the attribute
|
||||||
* ithread_mutexattr_t * attr (must be valid non NULL pointer to
|
* Parameters:
|
||||||
* pthread_mutexattr_t)
|
* ithread_mutexattr_t * attr (must be valid non NULL pointer to
|
||||||
* Returns:
|
* pthread_mutexattr_t)
|
||||||
* 0 on success, Nonzero on failure.
|
* Returns:
|
||||||
* Always returns 0.
|
* 0 on success, Nonzero on failure.
|
||||||
* See man page for pthread_mutexattr_destroy
|
* Always returns 0.
|
||||||
***************************************************************************/
|
* See man page for pthread_mutexattr_destroy
|
||||||
|
***************************************************************************/
|
||||||
#define ithread_mutexattr_destroy pthread_mutexattr_destroy
|
#define ithread_mutexattr_destroy pthread_mutexattr_destroy
|
||||||
|
|
||||||
|
|
||||||
@@ -180,7 +327,7 @@ extern "C" {
|
|||||||
* ITHREAD_MUTEX_ERRORCHECK_NP
|
* ITHREAD_MUTEX_ERRORCHECK_NP
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_mutexattr_t * mutex (must be valid non NULL pointer to
|
* ithread_mutexattr_t * attr (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)
|
||||||
@@ -189,11 +336,11 @@ extern "C" {
|
|||||||
* Returns EINVAL if the kind is not supported.
|
* Returns EINVAL if the kind is not supported.
|
||||||
* See man page for pthread_mutexattr_setkind_np
|
* See man page for pthread_mutexattr_setkind_np
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#ifdef PTHREAD_MUTEX_RECURSIVE
|
#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
|
||||||
#define ithread_mutexattr_setkind_np pthread_mutexattr_settype
|
#define ithread_mutexattr_setkind_np pthread_mutexattr_settype
|
||||||
#else
|
#else
|
||||||
#define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np
|
#define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np
|
||||||
#endif
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_mutexattr_getkind_np
|
* Function: ithread_mutexattr_getkind_np
|
||||||
@@ -205,7 +352,7 @@ extern "C" {
|
|||||||
* ITHREAD_MUTEX_ERRORCHECK_NP
|
* ITHREAD_MUTEX_ERRORCHECK_NP
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_mutexattr_t * mutex (must be valid non NULL pointer to
|
* ithread_mutexattr_t * attr (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)
|
||||||
@@ -214,11 +361,11 @@ extern "C" {
|
|||||||
* Always returns 0.
|
* Always returns 0.
|
||||||
* See man page for pthread_mutexattr_getkind_np
|
* See man page for pthread_mutexattr_getkind_np
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#ifdef PTHREAD_MUTEX_RECURSIVE
|
#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
|
||||||
#define ithread_mutexattr_getkind_np pthread_mutexattr_gettype
|
#define ithread_mutexattr_getkind_np pthread_mutexattr_gettype
|
||||||
#else
|
#else
|
||||||
#define ithread_mutexattr_getkind_np pthread_mutexattr_getkind_np
|
#define ithread_mutexattr_getkind_np pthread_mutexattr_getkind_np
|
||||||
#endif
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@@ -237,7 +384,8 @@ extern "C" {
|
|||||||
* See man page for pthread_mutex_init
|
* See man page for pthread_mutex_init
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#define ithread_mutex_init pthread_mutex_init
|
#define ithread_mutex_init pthread_mutex_init
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_mutex_lock
|
* Function: ithread_mutex_lock
|
||||||
*
|
*
|
||||||
@@ -291,7 +439,201 @@ extern "C" {
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#define ithread_mutex_destroy pthread_mutex_destroy
|
#define ithread_mutex_destroy pthread_mutex_destroy
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlockattr_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initializes a rwlock attribute variable to default values.
|
||||||
|
* Parameters:
|
||||||
|
* const ithread_rwlockattr_init *attr (must be valid non NULL pointer to
|
||||||
|
* pthread_rwlockattr_t)
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlockattr_init
|
||||||
|
***************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlockattr_init pthread_rwlockattr_init
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlockattr_destroy
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Releases any resources held by the rwlock attribute.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlockattr_t *attr (must be valid non NULL pointer to
|
||||||
|
* pthread_rwlockattr_t)
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlockattr_destroy
|
||||||
|
***************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlockattr_destroy pthread_rwlockattr_destroy
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlockatttr_setpshared
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Sets the rwlock type in the attribute.
|
||||||
|
* Valid types are: ITHREAD_PROCESS_PRIVATE
|
||||||
|
* ITHREAD_PROCESS_SHARED
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlockattr_t * attr (must be valid non NULL pointer to
|
||||||
|
* ithread_rwlockattr_t)
|
||||||
|
* int kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success. Nonzero on failure.
|
||||||
|
* Returns EINVAL if the kind is not supported.
|
||||||
|
* See man page for pthread_rwlockattr_setkind_np
|
||||||
|
*****************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlockatttr_setpshared pthread_rwlockatttr_setpshared
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlockatttr_getpshared
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Gets the rwlock type in the attribute.
|
||||||
|
* Valid types are: ITHREAD_PROCESS_PRIVATE
|
||||||
|
* ITHREAD_PROCESS_SHARED
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlockattr_t * attr (must be valid non NULL pointer to
|
||||||
|
* pthread_rwlockattr_t)
|
||||||
|
* int *kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success. Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlockatttr_getpshared
|
||||||
|
*****************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlockatttr_getpshared pthread_rwlockatttr_getpshared
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlock_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initializes rwlock.
|
||||||
|
* Must be called before use.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
|
||||||
|
* const ithread_rwlockattr_t *rwlock_attr
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlock_init
|
||||||
|
*****************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlock_init pthread_rwlock_init
|
||||||
|
#else
|
||||||
|
/* Read-write locks aren't available: use mutex instead. */
|
||||||
|
#define ithread_rwlock_init ithread_mutex_init
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlock_rdlock
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Locks rwlock for reading.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
|
||||||
|
* rwlock must be initialized.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlock_rdlock
|
||||||
|
*****************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlock_rdlock pthread_rwlock_rdlock
|
||||||
|
#else
|
||||||
|
/* Read-write locks aren't available: use mutex instead. */
|
||||||
|
#define ithread_rwlock_rdlock ithread_mutex_lock
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlock_wrlock
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Locks rwlock for writting.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
|
||||||
|
* rwlock must be initialized.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlock_wrlock
|
||||||
|
*****************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlock_wrlock pthread_rwlock_wrlock
|
||||||
|
#else
|
||||||
|
/* Read-write locks aren't available: use mutex instead. */
|
||||||
|
#define ithread_rwlock_wrlock ithread_mutex_lock
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlock_unlock
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Unlocks rwlock.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
|
||||||
|
* rwlock must be initialized.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlock_unlock
|
||||||
|
*****************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlock_unlock pthread_rwlock_unlock
|
||||||
|
#else
|
||||||
|
/* Read-write locks aren't available: use mutex instead. */
|
||||||
|
#define ithread_rwlock_unlock ithread_mutex_unlock
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_rwlock_destroy
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Releases any resources held by the rwlock.
|
||||||
|
* rwlock can no longer be used after this call.
|
||||||
|
* rwlock is only destroyed when there are no longer any threads waiting on it.
|
||||||
|
* rwlock cannot be destroyed if it is locked.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
|
||||||
|
* rwlock must be initialized.
|
||||||
|
* Returns:
|
||||||
|
* 0 on success. Nonzero on failure.
|
||||||
|
* Always returns 0.
|
||||||
|
* See man page for pthread_rwlock_destroy
|
||||||
|
*****************************************************************************/
|
||||||
|
#if UPNP_USE_RWLOCK
|
||||||
|
#define ithread_rwlock_destroy pthread_rwlock_destroy
|
||||||
|
#else
|
||||||
|
/* Read-write locks aren't available: use mutex instead. */
|
||||||
|
#define ithread_rwlock_destroy ithread_mutex_destroy
|
||||||
|
#endif /* UPNP_USE_RWLOCK */
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_cond_init
|
* Function: ithread_cond_init
|
||||||
*
|
*
|
||||||
@@ -299,8 +641,8 @@ extern "C" {
|
|||||||
* Initializes condition variable.
|
* Initializes condition variable.
|
||||||
* Must be called before use.
|
* Must be called before use.
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_cond_t * cond (must be valid non NULL pointer to pthread_cond_t)
|
* ithread_cond_t *cond (must be valid non NULL pointer to pthread_cond_t)
|
||||||
* const ithread_condattr_t * cond_attr (ignored)
|
* const ithread_condattr_t *cond_attr (ignored)
|
||||||
* Returns:
|
* Returns:
|
||||||
* 0 on success, Nonzero on failure.
|
* 0 on success, Nonzero on failure.
|
||||||
* See man page for pthread_cond_init
|
* See man page for pthread_cond_init
|
||||||
@@ -308,7 +650,6 @@ extern "C" {
|
|||||||
#define ithread_cond_init pthread_cond_init
|
#define ithread_cond_init pthread_cond_init
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_cond_signal
|
* Function: ithread_cond_signal
|
||||||
*
|
*
|
||||||
@@ -316,7 +657,7 @@ extern "C" {
|
|||||||
* Wakes up exactly one thread waiting on condition.
|
* Wakes up exactly one thread waiting on condition.
|
||||||
* Associated mutex MUST be locked by thread before entering this call.
|
* Associated mutex MUST be locked by thread before entering this call.
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_cond_t * cond (must be valid non NULL pointer to
|
* ithread_cond_t *cond (must be valid non NULL pointer to
|
||||||
* ithread_cond_t)
|
* ithread_cond_t)
|
||||||
* cond must be initialized
|
* cond must be initialized
|
||||||
* Returns:
|
* Returns:
|
||||||
@@ -333,7 +674,7 @@ extern "C" {
|
|||||||
* Wakes up all threads waiting on condition.
|
* Wakes up all threads waiting on condition.
|
||||||
* Associated mutex MUST be locked by thread before entering this call.
|
* Associated mutex MUST be locked by thread before entering this call.
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_cond_t * cond (must be valid non NULL pointer to
|
* ithread_cond_t *cond (must be valid non NULL pointer to
|
||||||
* ithread_cond_t)
|
* ithread_cond_t)
|
||||||
* cond must be initialized
|
* cond must be initialized
|
||||||
* Returns:
|
* Returns:
|
||||||
@@ -351,7 +692,7 @@ extern "C" {
|
|||||||
* Associated mutex MUST be locked by thread before entering this call.
|
* Associated mutex MUST be locked by thread before entering this call.
|
||||||
* Mutex is reacquired when call returns.
|
* Mutex is reacquired when call returns.
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_cond_t * cond (must be valid non NULL pointer to
|
* ithread_cond_t *cond (must be valid non NULL pointer to
|
||||||
* ithread_cond_t)
|
* ithread_cond_t)
|
||||||
* cond must be initialized
|
* cond must be initialized
|
||||||
* ithread_mutex_t *mutex (must be valid non NULL pointer to
|
* ithread_mutex_t *mutex (must be valid non NULL pointer to
|
||||||
@@ -367,23 +708,19 @@ extern "C" {
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: pthread_cond_timedwait
|
* Function: pthread_cond_timedwait
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Atomically releases the associated mutex and waits on the condition.
|
* Atomically releases the associated mutex and waits on the
|
||||||
* If the condition is not signaled in the specified time
|
* condition.
|
||||||
* than the
|
* If the condition is not signaled in the specified time than the
|
||||||
* call times out and returns.
|
* call times out and returns.
|
||||||
* Associated mutex MUST be locked by thread before entering
|
* Associated mutex MUST be locked by thread before entering this call.
|
||||||
* this call.
|
* Mutex is reacquired when call returns.
|
||||||
* Mutex is reacquired when call returns.
|
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_cond_t * cond (must be valid non NULL pointer to
|
* ithread_cond_t *cond (must be valid non NULL pointer to ithread_cond_t)
|
||||||
* ithread_cond_t)
|
* cond must be initialized
|
||||||
* cond must be initialized
|
* ithread_mutex_t *mutex (must be valid non NULL pointer to ithread_mutex_t)
|
||||||
* ithread_mutex_t *mutex (must be valid non NULL pointer to
|
* Mutex must be locked.
|
||||||
* ithread_mutex_t)
|
* const struct timespec *abstime (absolute time, measured from Jan 1, 1970)
|
||||||
* Mutex must be locked.
|
|
||||||
* const struct timespec *abstime (absolute time, measured
|
|
||||||
* from Jan 1, 1970)
|
|
||||||
* Returns:
|
* Returns:
|
||||||
* 0 on success. ETIMEDOUT on timeout. Nonzero on failure.
|
* 0 on success. ETIMEDOUT on timeout. Nonzero on failure.
|
||||||
* See man page for pthread_cond_timedwait
|
* See man page for pthread_cond_timedwait
|
||||||
@@ -399,7 +736,7 @@ extern "C" {
|
|||||||
* Releases any resources held by the condition variable.
|
* Releases any resources held by the condition variable.
|
||||||
* Condition variable can no longer be used after this call.
|
* Condition variable can no longer be used after this call.
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_cond_t * cond (must be valid non NULL pointer to
|
* ithread_cond_t *cond (must be valid non NULL pointer to
|
||||||
* ithread_cond_t)
|
* ithread_cond_t)
|
||||||
* cond must be initialized.
|
* cond must be initialized.
|
||||||
* Returns:
|
* Returns:
|
||||||
@@ -408,6 +745,49 @@ extern "C" {
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#define ithread_cond_destroy pthread_cond_destroy
|
#define ithread_cond_destroy pthread_cond_destroy
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_attr_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialises thread attribute object.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_attr_t *attr (must be valid non NULL pointer to
|
||||||
|
* ithread_attr_t)
|
||||||
|
* Returns:
|
||||||
|
* 0 on success. Nonzero on failure.
|
||||||
|
* See man page for pthread_attr_init
|
||||||
|
***************************************************************************/
|
||||||
|
#define ithread_attr_init pthread_attr_init
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_attr_destroy
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Destroys thread attribute object.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_attr_t *attr (must be valid non NULL pointer to
|
||||||
|
* ithread_attr_t)
|
||||||
|
* Returns:
|
||||||
|
* 0 on success. Nonzero on failure.
|
||||||
|
* See man page for pthread_attr_destroy
|
||||||
|
***************************************************************************/
|
||||||
|
#define ithread_attr_destroy pthread_attr_destroy
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Function: ithread_attr_setstacksize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Sets stack size of a thread attribute object.
|
||||||
|
* Parameters:
|
||||||
|
* ithread_attr_t *attr (must be valid non NULL pointer to
|
||||||
|
* ithread_attr_t)
|
||||||
|
* size_t stacksize (value of stacksize must be greater than
|
||||||
|
* ITHREAD_STACK_MIN and lower than system-imposed limits
|
||||||
|
* Returns:
|
||||||
|
* 0 on success. Nonzero on failure.
|
||||||
|
* See man page for pthread_attr_setstacksize
|
||||||
|
***************************************************************************/
|
||||||
|
#define ithread_attr_setstacksize pthread_attr_setstacksize
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_create
|
* Function: ithread_create
|
||||||
@@ -417,7 +797,7 @@ extern "C" {
|
|||||||
* and argument.
|
* and argument.
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* ithread_t * thread (must be valid non NULL pointer to pthread_t)
|
* ithread_t * thread (must be valid non NULL pointer to pthread_t)
|
||||||
* ithread_attr_t *attr, IGNORED
|
* ithread_attr_t *attr
|
||||||
* void * (start_routine) (void *arg) (start routine)
|
* void * (start_routine) (void *arg) (start routine)
|
||||||
* void * arg - argument.
|
* void * arg - argument.
|
||||||
* Returns:
|
* Returns:
|
||||||
@@ -455,6 +835,7 @@ extern "C" {
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#define ithread_exit pthread_exit
|
#define ithread_exit pthread_exit
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_get_current_thread_id
|
* Function: ithread_get_current_thread_id
|
||||||
*
|
*
|
||||||
@@ -478,6 +859,7 @@ extern "C" {
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#define ithread_self pthread_self
|
#define ithread_self pthread_self
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_detach
|
* Function: ithread_detach
|
||||||
*
|
*
|
||||||
@@ -491,6 +873,7 @@ extern "C" {
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#define ithread_detach pthread_detach
|
#define ithread_detach pthread_detach
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: ithread_join
|
* Function: ithread_join
|
||||||
*
|
*
|
||||||
@@ -510,7 +893,6 @@ extern "C" {
|
|||||||
#define ithread_join pthread_join
|
#define ithread_join pthread_join
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: isleep
|
* Function: isleep
|
||||||
*
|
*
|
||||||
@@ -524,7 +906,12 @@ extern "C" {
|
|||||||
* 0 on success, Nonzero on failure.
|
* 0 on success, Nonzero on failure.
|
||||||
* See man page for sleep (man 3 sleep)
|
* See man page for sleep (man 3 sleep)
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#define isleep sleep
|
#ifdef WIN32
|
||||||
|
#define isleep(x) Sleep((x)*1000)
|
||||||
|
#else
|
||||||
|
#define isleep sleep
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Function: isleep
|
* Function: isleep
|
||||||
@@ -539,32 +926,23 @@ extern "C" {
|
|||||||
* 0 on success, Nonzero on failure.
|
* 0 on success, Nonzero on failure.
|
||||||
* See man page for sleep (man 3 sleep)
|
* See man page for sleep (man 3 sleep)
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#define imillisleep(x) usleep(1000*x)
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#ifndef UPNP_STATIC_LIB
|
#define imillisleep Sleep
|
||||||
#ifdef LIBUPNP_EXPORTS
|
|
||||||
/* set up declspec for dll export to make functions visible to library users */
|
|
||||||
#define EXPORT_SPEC __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define EXPORT_SPEC __declspec(dllimport)
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define EXPORT_SPEC
|
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
#define EXPORT_SPEC
|
#define imillisleep(x) usleep(1000*x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef PTHREAD_MUTEX_RECURSIVE
|
#if !defined(PTHREAD_MUTEX_RECURSIVE) && !defined(__DragonFly__)
|
||||||
/* NK: Added for satisfying the gcc compiler */
|
/* NK: Added for satisfying the gcc compiler */
|
||||||
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 */
|
||||||
|
|
||||||
|
|||||||
@@ -1,177 +1,111 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// 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 "FreeList.h"
|
#include "FreeList.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
/****************************************************************************
|
int FreeListInit(FreeList *free_list, size_t elementSize, int maxFreeListLength)
|
||||||
* Function: FreeListInit
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initializes Free List. Must be called first.
|
|
||||||
* And only once for FreeList.
|
|
||||||
* Parameters:
|
|
||||||
* free_list - must be valid, non null, pointer to a linked list.
|
|
||||||
* size_t - size of elements to store in free list
|
|
||||||
* maxFreeListSize - max size that the free list can grow to
|
|
||||||
* before returning memory to O.S.
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int
|
|
||||||
FreeListInit( FreeList * free_list,
|
|
||||||
size_t elementSize,
|
|
||||||
int maxFreeListLength )
|
|
||||||
{
|
{
|
||||||
assert( free_list != NULL );
|
assert(free_list != NULL);
|
||||||
|
|
||||||
if( free_list == NULL )
|
if (free_list == NULL)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
free_list->element_size = elementSize;
|
||||||
|
free_list->maxFreeListLength = maxFreeListLength;
|
||||||
|
free_list->head = NULL;
|
||||||
|
free_list->freeListLength = 0;
|
||||||
|
|
||||||
free_list->element_size = elementSize;
|
return 0;
|
||||||
free_list->maxFreeListLength = maxFreeListLength;
|
|
||||||
free_list->head = NULL;
|
|
||||||
free_list->freeListLength = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
void *FreeListAlloc(FreeList *free_list)
|
||||||
* Function: FreeListAlloc
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Allocates chunk of set size.
|
|
||||||
* If a free item is available in the list, returnes the stored item.
|
|
||||||
* Otherwise calls the O.S. to allocate memory.
|
|
||||||
* Parameters:
|
|
||||||
* free_list - must be valid, non null, pointer to a linked list.
|
|
||||||
* Returns:
|
|
||||||
* Non NULL on success. NULL on failure.
|
|
||||||
*****************************************************************************/
|
|
||||||
void *
|
|
||||||
FreeListAlloc( FreeList * free_list )
|
|
||||||
{
|
{
|
||||||
FreeListNode *ret = NULL;
|
FreeListNode *ret = NULL;
|
||||||
|
|
||||||
assert( free_list != NULL );
|
assert(free_list != NULL);
|
||||||
|
|
||||||
if( free_list == NULL )
|
if (free_list == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if( free_list->head ) {
|
if (free_list->head) {
|
||||||
ret = free_list->head;
|
ret = free_list->head;
|
||||||
free_list->head = free_list->head->next;
|
free_list->head = free_list->head->next;
|
||||||
free_list->freeListLength--;
|
free_list->freeListLength--;
|
||||||
} else {
|
} else {
|
||||||
ret = malloc( free_list->element_size );
|
ret = malloc(free_list->element_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
int FreeListFree(FreeList *free_list, void *element)
|
||||||
* Function: FreeListFree
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Returns an item to the Free List.
|
|
||||||
* If the free list is smaller than the max size than
|
|
||||||
* adds the item to the free list.
|
|
||||||
* Otherwise returns the item to the O.S.
|
|
||||||
* Parameters:
|
|
||||||
* free_list - must be valid, non null, pointer to a free list.
|
|
||||||
* element - must be a pointer allocated by FreeListAlloc
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int
|
|
||||||
FreeListFree( FreeList * free_list,
|
|
||||||
void *element )
|
|
||||||
{
|
{
|
||||||
|
FreeListNode *temp = NULL;
|
||||||
|
|
||||||
FreeListNode *temp = NULL;
|
assert(free_list != NULL);
|
||||||
|
|
||||||
assert( free_list != NULL );
|
if (free_list == NULL)
|
||||||
|
return EINVAL;
|
||||||
|
if (element != NULL &&
|
||||||
|
free_list->freeListLength + 1 < free_list->maxFreeListLength) {
|
||||||
|
free_list->freeListLength++;
|
||||||
|
temp = (FreeListNode *)element;
|
||||||
|
temp->next = free_list->head;
|
||||||
|
free_list->head = temp;
|
||||||
|
} else {
|
||||||
|
free(element);
|
||||||
|
}
|
||||||
|
|
||||||
if( free_list == NULL )
|
return 0;
|
||||||
return EINVAL;
|
|
||||||
|
|
||||||
if( ( element != NULL ) &&
|
|
||||||
( ( free_list->freeListLength + 1 ) <
|
|
||||||
free_list->maxFreeListLength ) ) {
|
|
||||||
free_list->freeListLength++;
|
|
||||||
temp = ( FreeListNode * ) element;
|
|
||||||
temp->next = free_list->head;
|
|
||||||
free_list->head = temp;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
free( element );
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
int FreeListDestroy(FreeList *free_list)
|
||||||
* Function: FreeListDestroy
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Releases the resources stored with the free list.
|
|
||||||
* Parameters:
|
|
||||||
* free_list - must be valid, non null, pointer to a linked list.
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
*****************************************************************************/
|
|
||||||
int
|
|
||||||
FreeListDestroy( FreeList * free_list )
|
|
||||||
{
|
{
|
||||||
FreeListNode *temp = NULL;
|
FreeListNode *temp = NULL;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
assert( free_list != NULL );
|
assert(free_list != NULL);
|
||||||
|
|
||||||
if( free_list == NULL )
|
if (!free_list)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
while (free_list->head) {
|
||||||
|
i++;
|
||||||
|
temp = free_list->head->next;
|
||||||
|
free(free_list->head);
|
||||||
|
free_list->head = temp;
|
||||||
|
}
|
||||||
|
free_list->freeListLength = 0;
|
||||||
|
|
||||||
while( free_list->head ) {
|
return 0;
|
||||||
i++;
|
|
||||||
temp = free_list->head->next;
|
|
||||||
free( free_list->head );
|
|
||||||
free_list->head = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
free_list->freeListLength = 0;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,534 +1,309 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
// All rights reserved.
|
* All rights reserved.
|
||||||
//
|
*
|
||||||
// Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
//
|
*
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
* without specific prior written permission.
|
||||||
//
|
*
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
**************************************************************************/
|
||||||
|
|
||||||
#include "LinkedList.h"
|
#include "LinkedList.h"
|
||||||
#include <sys/param.h>
|
|
||||||
#if (defined(BSD) && BSD >= 199306)
|
#ifdef WIN32
|
||||||
#include <stdlib.h>
|
/* Do not #include <sys/param.h> */
|
||||||
#else
|
#else
|
||||||
#include <malloc.h>
|
#include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (defined(BSD) && BSD >= 199306) || defined(__OSX__) || defined(__APPLE__)
|
||||||
|
#include <stdlib.h>
|
||||||
|
#else
|
||||||
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
static int
|
static int freeListNode(ListNode *node, LinkedList *list)
|
||||||
freeListNode( ListNode * node,
|
|
||||||
LinkedList * list )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
return FreeListFree( &list->freeNodeList, node );
|
return FreeListFree(&list->freeNodeList, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: CreateListNode
|
* \brief Dynamically creates a list node.
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Creates a list node. Dynamically.
|
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* void * item - the item to store
|
* void * item - the item to store
|
||||||
* Returns:
|
* Returns:
|
||||||
* The new node, NULL on failure.
|
* The new node, NULL on failure.
|
||||||
*****************************************************************************/
|
*/
|
||||||
static ListNode *
|
static ListNode *CreateListNode(
|
||||||
CreateListNode( void *item,
|
/*! the item to store. */
|
||||||
LinkedList * list )
|
void *item,
|
||||||
|
/*! The list to add it to. */
|
||||||
|
LinkedList *list)
|
||||||
{
|
{
|
||||||
|
ListNode *temp = NULL;
|
||||||
|
|
||||||
ListNode *temp = NULL;
|
assert(list != NULL);
|
||||||
|
|
||||||
assert( list != NULL );
|
temp = (ListNode *)FreeListAlloc(&list->freeNodeList);
|
||||||
|
if (temp) {
|
||||||
|
temp->prev = NULL;
|
||||||
|
temp->next = NULL;
|
||||||
|
temp->item = item;
|
||||||
|
}
|
||||||
|
|
||||||
temp = ( ListNode * ) FreeListAlloc( &list->freeNodeList );
|
return temp;
|
||||||
if( temp ) {
|
|
||||||
temp->prev = NULL;
|
|
||||||
temp->next = NULL;
|
|
||||||
temp->item = item;
|
|
||||||
}
|
|
||||||
return temp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
int ListInit(LinkedList *list, cmp_routine cmp_func, free_function free_func)
|
||||||
* Function: ListInit
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initializes LinkedList. Must be called first.
|
|
||||||
* And only once for List.
|
|
||||||
* Parameters:
|
|
||||||
* list - must be valid, non null, pointer to a linked list.
|
|
||||||
* cmp_func - function used to compare items. (May be NULL)
|
|
||||||
* free_func - function used to free items. (May be NULL)
|
|
||||||
* Returns:
|
|
||||||
* 0 on success, EOUTOFMEM on failure.
|
|
||||||
*****************************************************************************/
|
|
||||||
int
|
|
||||||
ListInit( LinkedList * list,
|
|
||||||
cmp_routine cmp_func,
|
|
||||||
free_function free_func )
|
|
||||||
{
|
{
|
||||||
|
int retCode = 0;
|
||||||
|
|
||||||
int retCode = 0;
|
assert(list != NULL);
|
||||||
|
|
||||||
assert( list != NULL );
|
if (!list)
|
||||||
|
return EINVAL;
|
||||||
|
list->size = 0;
|
||||||
|
list->cmp_func = cmp_func;
|
||||||
|
list->free_func = free_func;
|
||||||
|
retCode = FreeListInit(&list->freeNodeList, sizeof(ListNode), FREELISTSIZE);
|
||||||
|
|
||||||
if( list == NULL )
|
assert(retCode == 0);
|
||||||
return EINVAL;
|
|
||||||
|
|
||||||
list->size = 0;
|
list->head.item = NULL;
|
||||||
list->cmp_func = cmp_func;
|
list->head.next = &list->tail;
|
||||||
list->free_func = free_func;
|
list->head.prev = NULL;
|
||||||
|
list->tail.item = NULL;
|
||||||
|
list->tail.prev = &list->head;
|
||||||
|
list->tail.next = NULL;
|
||||||
|
|
||||||
retCode =
|
return 0;
|
||||||
FreeListInit( &list->freeNodeList, sizeof( ListNode ),
|
|
||||||
FREELISTSIZE );
|
|
||||||
|
|
||||||
assert( retCode == 0 );
|
|
||||||
|
|
||||||
list->head.item = NULL;
|
|
||||||
list->head.next = &list->tail;
|
|
||||||
list->head.prev = NULL;
|
|
||||||
|
|
||||||
list->tail.item = NULL;
|
|
||||||
list->tail.prev = &list->head;
|
|
||||||
list->tail.next = NULL;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListAddHead(LinkedList *list, void *item)
|
||||||
* Function: ListAddHead
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Adds a node to the head of the list.
|
|
||||||
* Node gets immediately after list.head.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* void * item - item to be added
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListAddHead( LinkedList * list,
|
|
||||||
void *item )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
if( list == NULL )
|
if (list == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return ListAddAfter( list, item, &list->head );
|
return ListAddAfter(list, item, &list->head);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListAddTail(LinkedList *list, void *item)
|
||||||
* Function: ListAddTail
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Adds a node to the tail of the list.
|
|
||||||
* Node gets added immediately before list.tail.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* void * item - item to be added
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListAddTail( LinkedList * list,
|
|
||||||
void *item )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
if( list == NULL )
|
if (!list)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return ListAddBefore( list, item, &list->tail );
|
return ListAddBefore(list, item, &list->tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListAddAfter(LinkedList *list, void *item, ListNode *bnode)
|
||||||
* Function: ListAddAfter
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Adds a node after the specified node.
|
|
||||||
* Node gets added immediately after bnode.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* void * item - item to be added
|
|
||||||
* ListNode * bnode - node to add after
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListAddAfter( LinkedList * list,
|
|
||||||
void *item,
|
|
||||||
ListNode * bnode )
|
|
||||||
{
|
{
|
||||||
ListNode *newNode = NULL;
|
ListNode *newNode = NULL;
|
||||||
|
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
if( ( list == NULL ) || ( bnode == NULL ) )
|
if (!list || !bnode)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
newNode = CreateListNode(item, list);
|
||||||
|
if (newNode) {
|
||||||
|
ListNode *temp = bnode->next;
|
||||||
|
|
||||||
newNode = CreateListNode( item, list );
|
bnode->next = newNode;
|
||||||
if( newNode ) {
|
newNode->prev = bnode;
|
||||||
ListNode *temp = bnode->next;
|
newNode->next = temp;
|
||||||
|
temp->prev = newNode;
|
||||||
|
list->size++;
|
||||||
|
|
||||||
bnode->next = newNode;
|
return newNode;
|
||||||
newNode->prev = bnode;
|
}
|
||||||
newNode->next = temp;
|
|
||||||
temp->prev = newNode;
|
return NULL;
|
||||||
list->size++;
|
|
||||||
return newNode;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListAddBefore(LinkedList *list, void *item, ListNode *anode)
|
||||||
* Function: ListAddBefore
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Adds a node before the specified node.
|
|
||||||
* Node gets added immediately before anode.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* ListNode * anode - node to add the in front of.
|
|
||||||
* void * item - item to be added
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the ListNode on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListAddBefore( LinkedList * list,
|
|
||||||
void *item,
|
|
||||||
ListNode * anode )
|
|
||||||
{
|
{
|
||||||
ListNode *newNode = NULL;
|
ListNode *newNode = NULL;
|
||||||
|
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
if( ( list == NULL ) || ( anode == NULL ) )
|
if (!list || !anode)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
newNode = CreateListNode(item, list);
|
||||||
|
if (newNode) {
|
||||||
|
ListNode *temp = anode->prev;
|
||||||
|
|
||||||
newNode = CreateListNode( item, list );
|
anode->prev = newNode;
|
||||||
|
newNode->next = anode;
|
||||||
|
newNode->prev = temp;
|
||||||
|
temp->next = newNode;
|
||||||
|
list->size++;
|
||||||
|
|
||||||
if( newNode ) {
|
return newNode;
|
||||||
ListNode *temp = anode->prev;
|
}
|
||||||
|
|
||||||
anode->prev = newNode;
|
return NULL;
|
||||||
newNode->next = anode;
|
|
||||||
newNode->prev = temp;
|
|
||||||
temp->next = newNode;
|
|
||||||
list->size++;
|
|
||||||
return newNode;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
void *ListDelNode(LinkedList *list, ListNode *dnode, int freeItem)
|
||||||
* Function: ListDelNode
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Removes a node from the list
|
|
||||||
* The memory for the node is freed but the
|
|
||||||
* the memory for the items are not.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* ListNode *dnode - done to delete.
|
|
||||||
* Returns:
|
|
||||||
* The pointer to the item stored in node on success, NULL on failure.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
void *
|
|
||||||
ListDelNode( LinkedList * list,
|
|
||||||
ListNode * dnode,
|
|
||||||
int freeItem )
|
|
||||||
{
|
{
|
||||||
void *temp;
|
void *temp;
|
||||||
|
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
assert( dnode != &list->head );
|
assert(dnode != &list->head);
|
||||||
assert( dnode != &list->tail );
|
assert(dnode != &list->tail);
|
||||||
|
|
||||||
if( ( list == NULL ) ||
|
if (!list || dnode == &list->head || dnode == &list->tail || !dnode)
|
||||||
( dnode == &list->head ) ||
|
return NULL;
|
||||||
( dnode == &list->tail ) || ( dnode == NULL ) ) {
|
temp = dnode->item;
|
||||||
return NULL;
|
dnode->prev->next = dnode->next;
|
||||||
}
|
dnode->next->prev = dnode->prev;
|
||||||
|
freeListNode(dnode, list);
|
||||||
|
list->size--;
|
||||||
|
if (freeItem && list->free_func) {
|
||||||
|
list->free_func(temp);
|
||||||
|
temp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
temp = dnode->item;
|
return temp;
|
||||||
dnode->prev->next = dnode->next;
|
|
||||||
dnode->next->prev = dnode->prev;
|
|
||||||
|
|
||||||
freeListNode( dnode, list );
|
|
||||||
list->size--;
|
|
||||||
|
|
||||||
if( freeItem && list->free_func ) {
|
|
||||||
list->free_func( temp );
|
|
||||||
temp = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return temp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
int ListDestroy(LinkedList *list, int freeItem)
|
||||||
* Function: ListDestroy
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Removes all memory associated with list nodes.
|
|
||||||
* Does not free LinkedList *list.
|
|
||||||
* Items stored in the list are not freed, only nodes are.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Nonzero on failure.
|
|
||||||
* Always returns 0.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
int
|
|
||||||
ListDestroy( LinkedList * list,
|
|
||||||
int freeItem )
|
|
||||||
{
|
{
|
||||||
ListNode *dnode = NULL;
|
ListNode *dnode = NULL;
|
||||||
ListNode *temp = NULL;
|
ListNode *temp = NULL;
|
||||||
|
|
||||||
if( list == NULL )
|
if(!list)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
for( dnode = list->head.next; dnode != &list->tail; ) {
|
for (dnode = list->head.next; dnode != &list->tail; ) {
|
||||||
temp = dnode->next;
|
temp = dnode->next;
|
||||||
ListDelNode( list, dnode, freeItem );
|
ListDelNode(list, dnode, freeItem);
|
||||||
dnode = temp;
|
dnode = temp;
|
||||||
}
|
}
|
||||||
|
list->size = 0;
|
||||||
|
FreeListDestroy(&list->freeNodeList);
|
||||||
|
|
||||||
list->size = 0;
|
return 0;
|
||||||
FreeListDestroy( &list->freeNodeList );
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListHead(LinkedList *list)
|
||||||
* Function: ListHead
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Returns the head of the list.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The head of the list. NULL if list is empty.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListHead( LinkedList * list )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
if( list == NULL )
|
if (!list)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if( list->size == 0 )
|
if (!list->size)
|
||||||
return NULL;
|
return NULL;
|
||||||
else
|
else
|
||||||
return list->head.next;
|
return list->head.next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListTail(LinkedList *list)
|
||||||
* Function: ListTail
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Returns the tail of the list.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The tail of the list. NULL if list is empty.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListTail( LinkedList * list )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
if( list == NULL )
|
if (!list)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if( list->size == 0 )
|
if (!list->size)
|
||||||
return NULL;
|
return NULL;
|
||||||
else
|
else
|
||||||
return list->tail.prev;
|
return list->tail.prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListNext(LinkedList *list, ListNode *node)
|
||||||
* Function: ListNext
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Returns the next item in the list.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The next item in the list. NULL if there are no more items in list.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListNext( LinkedList * list,
|
|
||||||
ListNode * node )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
assert( node != NULL );
|
assert(node != NULL);
|
||||||
|
|
||||||
if( ( list == NULL ) || ( node == NULL ) )
|
if (!list || !node)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
if (node->next == &list->tail)
|
||||||
if( node->next == &list->tail )
|
return NULL;
|
||||||
return NULL;
|
else
|
||||||
else
|
return node->next;
|
||||||
return node->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListPrev(LinkedList *list, ListNode *node)
|
||||||
* Function: ListPrev
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Returns the previous item in the list.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The previous item in the list. NULL if there are no more items in list.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListPrev( LinkedList * list,
|
|
||||||
ListNode * node )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
assert( node != NULL );
|
assert(node != NULL);
|
||||||
|
|
||||||
if( ( list == NULL ) || ( node == NULL ) )
|
if (!list || !node)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if( node->prev == &list->head )
|
if (node->prev == &list->head)
|
||||||
return NULL;
|
return NULL;
|
||||||
else
|
else
|
||||||
return node->prev;
|
return node->prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
ListNode *ListFind(LinkedList *list, ListNode *start, void *item)
|
||||||
* Function: ListFind
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Finds the specified item in the list.
|
|
||||||
* Uses the compare function specified in ListInit. If compare function
|
|
||||||
* is NULL then compares items as pointers.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
* ListNode *start - the node to start from, NULL if to start from
|
|
||||||
* beginning.
|
|
||||||
* void * item - the item to search for.
|
|
||||||
* Returns:
|
|
||||||
* The node containing the item. NULL if no node contains the item.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
ListNode *
|
|
||||||
ListFind( LinkedList * list,
|
|
||||||
ListNode * start,
|
|
||||||
void *item )
|
|
||||||
{
|
{
|
||||||
|
ListNode *finger = NULL;
|
||||||
|
|
||||||
ListNode *finger = NULL;
|
if (!list)
|
||||||
|
return NULL;
|
||||||
|
if (!start)
|
||||||
|
start = &list->head;
|
||||||
|
|
||||||
if( list == NULL )
|
assert(start);
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if( start == NULL )
|
finger = start->next;
|
||||||
start = &list->head;
|
|
||||||
|
|
||||||
assert( start );
|
assert(finger);
|
||||||
|
|
||||||
finger = start->next;
|
while (finger != &list->tail) {
|
||||||
|
if (list->cmp_func) {
|
||||||
assert( finger );
|
if (list->cmp_func(item, finger->item))
|
||||||
|
return finger;
|
||||||
while( finger != &list->tail ) {
|
} else {
|
||||||
if( list->cmp_func ) {
|
if (item == finger->item)
|
||||||
if( list->cmp_func( item, finger->item ) )
|
return finger;
|
||||||
return finger;
|
}
|
||||||
} else {
|
finger = finger->next;
|
||||||
if( item == finger->item )
|
}
|
||||||
return finger;
|
|
||||||
}
|
|
||||||
finger = finger->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
long ListSize(LinkedList *list)
|
||||||
* Function: ListSize
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Returns the size of the list.
|
|
||||||
* Parameters:
|
|
||||||
* LinkedList *list - must be valid, non null, pointer to a linked list.
|
|
||||||
|
|
||||||
* Returns:
|
|
||||||
* The number of items in the list.
|
|
||||||
* Precondition:
|
|
||||||
* The list has been initialized.
|
|
||||||
*****************************************************************************/
|
|
||||||
int
|
|
||||||
ListSize( LinkedList * list )
|
|
||||||
{
|
{
|
||||||
assert( list != NULL );
|
assert(list != NULL);
|
||||||
|
|
||||||
if( list == NULL )
|
if (!list)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
return list->size;
|
return list->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,203 +1,160 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/*******************************************************************************
|
||||||
//
|
*
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
// All rights reserved.
|
* All rights reserved.
|
||||||
//
|
*
|
||||||
// Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
//
|
*
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
* without specific prior written permission.
|
||||||
//
|
*
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
******************************************************************************/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*/
|
||||||
|
|
||||||
#include "TimerThread.h"
|
#include "TimerThread.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: FreeTimerEvent
|
* \brief Deallocates a dynamically allocated TimerEvent.
|
||||||
*
|
*/
|
||||||
* Description:
|
static void FreeTimerEvent(
|
||||||
* Deallocates a dynamically allocated TimerEvent.
|
/*! [in] Valid timer thread pointer. */
|
||||||
* Parameters:
|
TimerThread *timer,
|
||||||
* TimerEvent *event - must be allocated with CreateTimerEvent
|
/*! [in] Must be allocated with CreateTimerEvent*/
|
||||||
*****************************************************************************/
|
TimerEvent *event)
|
||||||
static void
|
|
||||||
FreeTimerEvent( TimerThread * timer,
|
|
||||||
TimerEvent * event )
|
|
||||||
{
|
{
|
||||||
|
assert(timer != NULL);
|
||||||
|
|
||||||
assert( timer != NULL );
|
FreeListFree(&timer->freeEvents, event);
|
||||||
|
|
||||||
FreeListFree( &timer->freeEvents, event );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: TimerThreadWorker
|
* \brief Implements timer thread.
|
||||||
*
|
*
|
||||||
* Description:
|
* Waits for next event to occur and schedules associated job into threadpool.
|
||||||
* Implements timer thread.
|
*/
|
||||||
* Waits for next event to occur and schedules
|
static void *TimerThreadWorker(
|
||||||
* associated job into threadpool.
|
/*! [in] arg is cast to (TimerThread *). */
|
||||||
* Internal Only.
|
void *arg)
|
||||||
* 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;
|
||||||
|
|
||||||
TimerEvent *nextEvent = NULL;
|
TimerEvent *nextEvent = NULL;
|
||||||
|
|
||||||
time_t currentTime = 0;
|
time_t currentTime = 0;
|
||||||
time_t nextEventTime = 0;
|
time_t nextEventTime = 0;
|
||||||
struct timespec timeToWait;
|
struct timespec timeToWait;
|
||||||
|
|
||||||
int tempId;
|
int tempId;
|
||||||
|
|
||||||
assert( timer != NULL );
|
assert( timer != NULL );
|
||||||
|
|
||||||
ithread_mutex_lock( &timer->mutex );
|
ithread_mutex_lock( &timer->mutex );
|
||||||
|
while (1) {
|
||||||
while( 1 )
|
/* mutex should always be locked at top of loop */
|
||||||
{
|
/* Check for shutdown. */
|
||||||
|
if (timer->shutdown) {
|
||||||
//mutex should always be locked at top of loop
|
|
||||||
|
|
||||||
//Check for 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;
|
||||||
|
/* Get the next event if possible. */
|
||||||
//Get the next event if possible
|
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;
|
||||||
}
|
}
|
||||||
|
currentTime = time(NULL);
|
||||||
currentTime = time( NULL );
|
/* If time has elapsed, schedule job. */
|
||||||
|
if (nextEvent && currentTime >= nextEventTime) {
|
||||||
//If time has elapsed, schedule job
|
|
||||||
|
|
||||||
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) {
|
||||||
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.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return
|
||||||
* Calculates the appropriate timeout in absolute seconds since
|
*/
|
||||||
* Jan 1, 1970
|
static int CalculateEventTime(
|
||||||
* Internal Only.
|
/*! [in] Timeout. */
|
||||||
* Parameters:
|
time_t *timeout,
|
||||||
* time_t *timeout - timeout
|
/*! [in] Timeout type. */
|
||||||
*
|
TimeoutType type)
|
||||||
*****************************************************************************/
|
|
||||||
static int
|
|
||||||
CalculateEventTime( time_t * timeout,
|
|
||||||
TimeoutType type )
|
|
||||||
{
|
{
|
||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
assert( timeout != NULL );
|
assert( timeout != NULL );
|
||||||
|
|
||||||
if( type == ABS_SEC )
|
if (type == ABS_SEC)
|
||||||
return 0;
|
return 0;
|
||||||
else if( type == REL_SEC ) {
|
else /*if (type == REL_SEC) */{
|
||||||
time( &now );
|
time(&now);
|
||||||
( *timeout ) += now;
|
( *timeout ) += now;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*!
|
||||||
* Function: CreateTimerEvent
|
* \brief Creates a Timer Event. (Dynamically allocated).
|
||||||
*
|
*
|
||||||
* Description:
|
* \return (TimerEvent *) on success, NULL on failure.
|
||||||
* Creates a Timer Event. (Dynamically allocated)
|
*/
|
||||||
* Internal to timer thread.
|
static TimerEvent *CreateTimerEvent(
|
||||||
* Parameters:
|
/*! [in] Valid timer thread pointer. */
|
||||||
* func - thread function to run.
|
TimerThread *timer,
|
||||||
* arg - argument to function.
|
/*! [in] . */
|
||||||
* priority - priority of job.
|
ThreadPoolJob *job,
|
||||||
* eventTime - the absoule time of the event
|
/*! [in] . */
|
||||||
* in seconds from Jan, 1970
|
Duration persistent,
|
||||||
* id - id of job
|
/*! [in] The absoule time of the event in seconds from Jan, 1970. */
|
||||||
*
|
time_t eventTime,
|
||||||
* Returns:
|
/*! [in] Id of job. */
|
||||||
* TimerEvent * on success, NULL on failure.
|
int id)
|
||||||
****************************************************************************/
|
|
||||||
static TimerEvent *
|
|
||||||
CreateTimerEvent( TimerThread * timer,
|
|
||||||
ThreadPoolJob * job,
|
|
||||||
Duration persistent,
|
|
||||||
time_t eventTime,
|
|
||||||
int id )
|
|
||||||
{
|
{
|
||||||
TimerEvent *temp = NULL;
|
TimerEvent *temp = NULL;
|
||||||
|
|
||||||
@@ -215,25 +172,8 @@ CreateTimerEvent( TimerThread * timer,
|
|||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function: TimerThreadInit
|
int TimerThreadInit(TimerThread *timer, ThreadPool *tp)
|
||||||
*
|
|
||||||
* 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;
|
||||||
@@ -287,42 +227,16 @@ TimerThreadInit( TimerThread * timer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
int TimerThreadSchedule(
|
||||||
* Function: TimerThreadSchedule
|
TimerThread *timer,
|
||||||
*
|
time_t timeout,
|
||||||
* Description:
|
TimeoutType type,
|
||||||
* Schedules an event to run at a specified time.
|
ThreadPoolJob *job,
|
||||||
*
|
Duration duration,
|
||||||
* Parameters:
|
int *id)
|
||||||
* 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,
|
|
||||||
TimeoutType type,
|
|
||||||
ThreadPoolJob * job,
|
|
||||||
Duration duration,
|
|
||||||
int *id )
|
|
||||||
{
|
{
|
||||||
|
|
||||||
int rc = EOUTOFMEM;
|
int rc = EOUTOFMEM;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
int tempId = 0;
|
int tempId = 0;
|
||||||
@@ -355,35 +269,25 @@ TimerThreadSchedule( TimerThread * timer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
tempNode = ListHead( &timer->eventQ );
|
tempNode = ListHead( &timer->eventQ );
|
||||||
//add job to Q
|
/* add job to Q. Q is ordered by eventTime with the head of the Q being
|
||||||
//Q is ordered by eventTime
|
* the next event. */
|
||||||
//with the head of the Q being the next event
|
|
||||||
|
|
||||||
while( tempNode != NULL ) {
|
while( tempNode != NULL ) {
|
||||||
temp = ( TimerEvent * ) tempNode->item;
|
temp = ( TimerEvent * ) tempNode->item;
|
||||||
if( temp->eventTime >= timeout )
|
if( temp->eventTime >= timeout ) {
|
||||||
{
|
if (ListAddBefore( &timer->eventQ, newEvent, tempNode))
|
||||||
|
|
||||||
if( ListAddBefore( &timer->eventQ, newEvent, tempNode ) !=
|
|
||||||
NULL )
|
|
||||||
rc = 0;
|
rc = 0;
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
tempNode = ListNext( &timer->eventQ, tempNode );
|
tempNode = ListNext( &timer->eventQ, tempNode );
|
||||||
}
|
}
|
||||||
|
/* add to the end of Q. */
|
||||||
//add to the end of Q
|
if (!found) {
|
||||||
if( !found ) {
|
|
||||||
|
|
||||||
if( ListAddTail( &timer->eventQ, newEvent ) != NULL )
|
if( ListAddTail( &timer->eventQ, newEvent ) != NULL )
|
||||||
rc = 0;
|
rc = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
//signal change in Q
|
/* signal change in Q. */
|
||||||
if( rc == 0 ) {
|
if( rc == 0 ) {
|
||||||
|
|
||||||
ithread_cond_signal( &timer->condition );
|
ithread_cond_signal( &timer->condition );
|
||||||
} else {
|
} else {
|
||||||
FreeTimerEvent( timer, newEvent );
|
FreeTimerEvent( timer, newEvent );
|
||||||
@@ -394,28 +298,10 @@ TimerThreadSchedule( TimerThread * timer,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
int TimerThreadRemove(
|
||||||
* Function: TimerThreadRemove
|
TimerThread *timer,
|
||||||
*
|
int id,
|
||||||
* Description:
|
ThreadPoolJob *out)
|
||||||
* 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,
|
|
||||||
ThreadPoolJob * out )
|
|
||||||
{
|
{
|
||||||
int rc = INVALID_EVENT_ID;
|
int rc = INVALID_EVENT_ID;
|
||||||
ListNode *tempNode = NULL;
|
ListNode *tempNode = NULL;
|
||||||
@@ -450,21 +336,7 @@ TimerThreadRemove( TimerThread * timer,
|
|||||||
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;
|
||||||
@@ -480,9 +352,7 @@ TimerThreadShutdown( TimerThread * timer )
|
|||||||
timer->shutdown = 1;
|
timer->shutdown = 1;
|
||||||
tempNode = ListHead( &timer->eventQ );
|
tempNode = ListHead( &timer->eventQ );
|
||||||
|
|
||||||
//Delete nodes in Q
|
/* Delete nodes in Q. Call registered free function on argument. */
|
||||||
//call registered free function
|
|
||||||
//on argument
|
|
||||||
while( tempNode != NULL ) {
|
while( tempNode != NULL ) {
|
||||||
TimerEvent *temp = ( TimerEvent * ) tempNode->item;
|
TimerEvent *temp = ( TimerEvent * ) tempNode->item;
|
||||||
|
|
||||||
@@ -500,20 +370,19 @@ TimerThreadShutdown( TimerThread * timer )
|
|||||||
|
|
||||||
ithread_cond_broadcast( &timer->condition );
|
ithread_cond_broadcast( &timer->condition );
|
||||||
|
|
||||||
while( timer->shutdown ) //wait for timer thread to shutdown
|
while (timer->shutdown) {
|
||||||
{
|
/* wait for timer thread to shutdown. */
|
||||||
ithread_cond_wait( &timer->condition, &timer->mutex );
|
ithread_cond_wait( &timer->condition, &timer->mutex );
|
||||||
}
|
}
|
||||||
|
ithread_mutex_unlock(&timer->mutex);
|
||||||
|
|
||||||
ithread_mutex_unlock( &timer->mutex );
|
/* destroy condition. */
|
||||||
|
while(ithread_cond_destroy(&timer->condition) != 0) {
|
||||||
//destroy condition
|
|
||||||
while( ithread_cond_destroy( &timer->condition ) != 0 ) {
|
|
||||||
}
|
}
|
||||||
|
/* destroy mutex. */
|
||||||
//destroy mutex
|
while (ithread_mutex_destroy(&timer->mutex) != 0) {
|
||||||
while( ithread_mutex_destroy( &timer->mutex ) != 0 ) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,153 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
#if (defined(BSD) && BSD >= 199306)
|
|
||||||
#include <stdlib.h>
|
|
||||||
#else
|
|
||||||
#include <malloc.h>
|
|
||||||
#endif
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "iasnprintf.h"
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
#define NULL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#define vsnprintf _vsnprintf
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates enough memory for the
|
|
||||||
* Formatted string, up to max
|
|
||||||
* specified.
|
|
||||||
* With max set to -1, it allocates as
|
|
||||||
* much size as needed.
|
|
||||||
* Memory must be freed using free.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
iasnprintf( char **ret,
|
|
||||||
int incr,
|
|
||||||
int max,
|
|
||||||
const char *fmt,
|
|
||||||
... )
|
|
||||||
{
|
|
||||||
int size = incr;
|
|
||||||
int retc = 0;
|
|
||||||
va_list ap;
|
|
||||||
char *temp = NULL;
|
|
||||||
|
|
||||||
assert( ret );
|
|
||||||
assert( fmt );
|
|
||||||
( *ret ) = ( char * )malloc( incr );
|
|
||||||
|
|
||||||
if( ( *ret ) == NULL ) return -1;
|
|
||||||
|
|
||||||
while( 1 ) {
|
|
||||||
va_start( ap, fmt );
|
|
||||||
retc = vsnprintf( ( *ret ), size, fmt, ap );
|
|
||||||
va_end( ap );
|
|
||||||
|
|
||||||
if( retc < 0 ) {
|
|
||||||
//size not big enough
|
|
||||||
//and vsnprintf does NOT return the
|
|
||||||
//necessary number of bytes
|
|
||||||
if( ( max != -1 ) && ( size == max ) ) //max reached
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
incr *= 2; //increase increment
|
|
||||||
//increase size and try again
|
|
||||||
if( ( max != -1 ) && ( ( size + incr ) > max ) ) {
|
|
||||||
incr = ( max - size );
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ( char * )realloc( ( *ret ), size + incr );
|
|
||||||
if( temp == NULL ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
size += incr;
|
|
||||||
( *ret ) = temp;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if( ( retc + 1 ) > size ) {
|
|
||||||
//size not big enough
|
|
||||||
//and vsnprintf
|
|
||||||
//returns the necessary
|
|
||||||
//number of bytes
|
|
||||||
if( ( max != -1 ) && ( retc + 1 > max ) ) {
|
|
||||||
retc = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ( char * )realloc( ( *ret ), retc + 1 );
|
|
||||||
if( temp == NULL ) {
|
|
||||||
retc = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
size = retc + 1;
|
|
||||||
( *ret ) = temp; //size increased try again
|
|
||||||
} else if( ( retc + 1 ) < size ) {
|
|
||||||
//size is bigger than needed
|
|
||||||
//try and reallocate smaller
|
|
||||||
|
|
||||||
temp = ( char * )realloc( ( *ret ), retc + 1 );
|
|
||||||
if( temp != NULL ) {
|
|
||||||
( *ret ) = temp;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
} else //size is just right, exit
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( retc < 0 ) {
|
|
||||||
free( ( *ret ) );
|
|
||||||
( *ret ) = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return retc;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
iasnprintfFree( char *fChar )
|
|
||||||
{
|
|
||||||
free( fChar );
|
|
||||||
fChar = NULL;
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# "Makefile.am" for "libupnp/upnp"
|
# "Makefile.am" for "libupnp/upnp"
|
||||||
#
|
#
|
||||||
# Copyright (C) 2005 R<EFBFBD>mi Turboult <r3mi@users.sourceforge.net>
|
# Copyright (C) 2005 Rémi Turboult <r3mi@users.sourceforge.net>
|
||||||
#
|
#
|
||||||
|
|
||||||
SUBDIRS = doc . sample
|
SUBDIRS = doc . sample
|
||||||
@@ -11,10 +11,6 @@ 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 \
|
||||||
@@ -23,8 +19,11 @@ LDADD = \
|
|||||||
|
|
||||||
upnpincludedir = $(includedir)/upnp
|
upnpincludedir = $(includedir)/upnp
|
||||||
upnpinclude_HEADERS = \
|
upnpinclude_HEADERS = \
|
||||||
|
inc/UpnpString.h \
|
||||||
inc/upnp.h \
|
inc/upnp.h \
|
||||||
inc/upnpdebug.h
|
inc/upnpdebug.h \
|
||||||
|
inc/UpnpGlobal.h \
|
||||||
|
inc/UpnpInet.h
|
||||||
|
|
||||||
nodist_upnpinclude_HEADERS = inc/upnpconfig.h
|
nodist_upnpinclude_HEADERS = inc/upnpconfig.h
|
||||||
if ENABLE_TOOLS
|
if ENABLE_TOOLS
|
||||||
@@ -50,7 +49,6 @@ libupnp_la_SOURCES = \
|
|||||||
src/inc/gena_device.h \
|
src/inc/gena_device.h \
|
||||||
src/inc/global.h \
|
src/inc/global.h \
|
||||||
src/inc/gmtdate.h \
|
src/inc/gmtdate.h \
|
||||||
src/inc/http_client.h \
|
|
||||||
src/inc/httpparser.h \
|
src/inc/httpparser.h \
|
||||||
src/inc/httpreadwrite.h \
|
src/inc/httpreadwrite.h \
|
||||||
src/inc/md5.h \
|
src/inc/md5.h \
|
||||||
@@ -69,13 +67,12 @@ libupnp_la_SOURCES = \
|
|||||||
src/inc/sysdep.h \
|
src/inc/sysdep.h \
|
||||||
src/inc/unixutil.h \
|
src/inc/unixutil.h \
|
||||||
src/inc/upnpapi.h \
|
src/inc/upnpapi.h \
|
||||||
src/inc/upnpclosesocket.h \
|
|
||||||
src/inc/upnp_timeout.h \
|
src/inc/upnp_timeout.h \
|
||||||
src/inc/uri.h \
|
src/inc/uri.h \
|
||||||
src/inc/urlconfig.h \
|
src/inc/urlconfig.h \
|
||||||
src/inc/util.h \
|
src/inc/upnputil.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
|
||||||
@@ -114,10 +111,14 @@ libupnp_la_SOURCES += \
|
|||||||
src/gena/gena_callback2.c
|
src/gena/gena_callback2.c
|
||||||
|
|
||||||
# api
|
# api
|
||||||
libupnp_la_SOURCES += src/api/upnpapi.c
|
libupnp_la_SOURCES += \
|
||||||
|
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
|
||||||
@@ -134,6 +135,12 @@ 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
|
||||||
@@ -142,8 +149,7 @@ test_init_SOURCES = test/test_init.c
|
|||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
LICENSE \
|
LICENSE \
|
||||||
src/inc/inet_pton.h \
|
m4/libupnp.m4 \
|
||||||
src/inet_pton.c \
|
|
||||||
src/win_dll.c
|
src/win_dll.c
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
124
upnp/inc/UpnpGlobal.h
Normal file
124
upnp/inc/UpnpGlobal.h
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#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.
|
||||||
|
*/
|
||||||
|
#ifdef __STRICT_ANSI__
|
||||||
|
#define UPNP_INLINE __inline__
|
||||||
|
#else
|
||||||
|
#define UPNP_INLINE inline
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \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 */
|
||||||
|
|
||||||
40
upnp/inc/UpnpInet.h
Normal file
40
upnp/inc/UpnpInet.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
|
||||||
|
#ifndef UPNPINET_H
|
||||||
|
#define UPNPINET_H
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* \brief Provides a platform independent way to include TCP/IP types and functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <iphlpapi.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <Ws2tcpip.h>
|
||||||
|
|
||||||
|
#define UpnpCloseSocket closesocket
|
||||||
|
#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>
|
||||||
|
|
||||||
|
/* include <unistd.h> for close().
|
||||||
|
* Do not include this file in win32. */
|
||||||
|
#include <unistd.h>
|
||||||
|
/* SOCKET is unsigned and is not a file descriptor on win32. */
|
||||||
|
#define SOCKET int
|
||||||
|
/* INVALID_SOCKET is unsigned on win32. */
|
||||||
|
#define INVALID_SOCKET (-1)
|
||||||
|
/* select() returns SOCKET_ERROR on win32. */
|
||||||
|
#define SOCKET_ERROR (-1)
|
||||||
|
#define UpnpCloseSocket close
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* UPNPINET_H */
|
||||||
|
|
||||||
171
upnp/inc/UpnpString.h
Normal file
171
upnp/inc/UpnpString.h
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#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 declaration.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h> /* for size_t */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Type of the string objects inside libupnp.
|
||||||
|
*/
|
||||||
|
typedef struct s_UpnpString UpnpString;
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Constructor.
|
||||||
|
*
|
||||||
|
* \return A pointer to a new allocated object.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC UpnpString *UpnpString_new();
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Destructor.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC void UpnpString_delete(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
UpnpString *p);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Copy Constructor.
|
||||||
|
*
|
||||||
|
* \return A pointer to a new allocated copy of the original object.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC UpnpString *UpnpString_dup(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
const UpnpString *p);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Assignment operator.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC void UpnpString_assign(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
UpnpString *p,
|
||||||
|
/*! [in] The \em \b that pointer. */
|
||||||
|
const UpnpString *q);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the length of the string.
|
||||||
|
*
|
||||||
|
* \return The length of the string.
|
||||||
|
* */
|
||||||
|
EXPORT_SPEC size_t UpnpString_get_Length(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
const UpnpString *p);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Truncates the string to the specified lenght, or does nothing
|
||||||
|
* if the current lenght is less than or equal to the requested length.
|
||||||
|
* */
|
||||||
|
EXPORT_SPEC void UpnpString_set_Length(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
UpnpString *p,
|
||||||
|
/*! [in] The requested length. */
|
||||||
|
size_t n);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the pointer to char.
|
||||||
|
*
|
||||||
|
* \return The pointer to char.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC const char *UpnpString_get_String(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
const UpnpString *p);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Sets the string from a pointer to char.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC int UpnpString_set_String(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
UpnpString *p,
|
||||||
|
/*! [in] (char *) to copy from. */
|
||||||
|
const char *s);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Sets the string from a pointer to char using a maximum of N chars.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC int UpnpString_set_StringN(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
UpnpString *p,
|
||||||
|
/*! [in] (char *) to copy from. */
|
||||||
|
const char *s,
|
||||||
|
/*! Maximum number of chars to copy.*/
|
||||||
|
size_t n);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Clears the string, sets its size to zero.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC void UpnpString_clear(
|
||||||
|
/*! [in] The \em \b this pointer. */
|
||||||
|
UpnpString *p);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Compares two strings for equality. Case matters.
|
||||||
|
*
|
||||||
|
* \return The result of strcmp().
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC int UpnpString_cmp(
|
||||||
|
/*! [in] The \em \b the first string. */
|
||||||
|
UpnpString *p,
|
||||||
|
/*! [in] The \em \b the second string. */
|
||||||
|
UpnpString *q);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Compares two strings for equality. Case does not matter.
|
||||||
|
*
|
||||||
|
* \return The result of strcasecmp().
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC int UpnpString_casecmp(
|
||||||
|
/*! [in] The \em \b the first string. */
|
||||||
|
UpnpString *p,
|
||||||
|
/*! [in] The \em \b the second string. */
|
||||||
|
UpnpString *q);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
/* @} UpnpString The UpnpString API */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* STRING_H */
|
||||||
|
|
||||||
4153
upnp/inc/upnp.h
4153
upnp/inc/upnp.h
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
/* -*- C -*- */
|
/* -*- C -*- */
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright (c) 2006 R<EFBFBD>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
|
||||||
@@ -52,7 +52,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 \
|
||||||
((UPNP_VERSION_MAJOR*100 + UPNP_VERSION_MINOR)*100 + UPNP_VERSION_PATCH)
|
((UPNP_VERSION_MAJOR * 100 + UPNP_VERSION_MINOR) * 100 + UPNP_VERSION_PATCH)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -90,6 +90,9 @@
|
|||||||
* (i.e. configure --enable-tools) : <upnp/upnptools.h> file is available */
|
* (i.e. configure --enable-tools) : <upnp/upnptools.h> file is available */
|
||||||
#undef UPNP_HAVE_TOOLS
|
#undef UPNP_HAVE_TOOLS
|
||||||
|
|
||||||
|
/** Defined to 1 if the library has been compiled with ipv6 support
|
||||||
|
* (i.e. configure --enable-ipv6) */
|
||||||
|
#undef UPNP_ENABLE_IPV6
|
||||||
|
|
||||||
#endif /* UPNP_CONFIG_H */
|
#endif /* UPNP_CONFIG_H */
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
* Copyright (c) 2006 R<EFBFBD>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.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@@ -33,8 +33,13 @@
|
|||||||
#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>
|
||||||
|
|
||||||
@@ -42,16 +47,15 @@
|
|||||||
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 {\tt UpnpSetLogLevel}.
|
* see \c 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
|
||||||
@@ -60,14 +64,11 @@ 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.
|
||||||
* \begin{itemize}
|
* \li \c UPNP_CRITICAL [0]
|
||||||
* \item {\tt UPNP_CRITICAL [0]}
|
* \li \c UPNP_PACKET [1]
|
||||||
* \item {\tt UPNP_PACKET [1]}
|
* \li \c UPNP_INFO [2]
|
||||||
* \item {\tt UPNP_INFO [2]}
|
* \li \c UPNP_ALL [3]
|
||||||
* \item {\tt UPNP_ALL [3]}
|
|
||||||
* \end{itemize}
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum Upnp_Module {
|
typedef enum Upnp_Module {
|
||||||
SSDP,
|
SSDP,
|
||||||
SOAP,
|
SOAP,
|
||||||
@@ -79,252 +80,254 @@ 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
|
|
||||||
*
|
*
|
||||||
* Parameters: void
|
* \return -1 if fails or UPNP_E_SUCCESS if succeeds.
|
||||||
*
|
*/
|
||||||
* Description:
|
|
||||||
* This functions initializes the log files
|
|
||||||
*
|
|
||||||
* Returns: int
|
|
||||||
* -1 : If fails
|
|
||||||
* UPNP_E_SUCCESS : if success
|
|
||||||
***************************************************************************/
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
int UpnpInitLog();
|
int UpnpInitLog(void);
|
||||||
#else
|
#else
|
||||||
static UPNP_INLINE int UpnpInitLog() { return UPNP_E_SUCCESS; }
|
static UPNP_INLINE int UpnpInitLog(void)
|
||||||
|
{
|
||||||
|
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(Upnp_LogLevel log_level);
|
void UpnpSetLogLevel(
|
||||||
|
/*! [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)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
log_level = 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 UpnpCloseLog(void);
|
||||||
#else
|
#else
|
||||||
static UPNP_INLINE void UpnpCloseLog() {}
|
static UPNP_INLINE void UpnpCloseLog(void) {}
|
||||||
#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(
|
||||||
const char *ErrFileName,
|
const char *ErrFileName,
|
||||||
const char *InfoFileName) {}
|
const char *InfoFileName)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
ErrFileName = ErrFileName;
|
||||||
|
InfoFileName = InfoFileName;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
/***************************************************************************
|
* \brief Check if the module is turned on for debug and returns the file
|
||||||
* Function : UpnpGetDebugFile
|
* descriptor corresponding to the debug level
|
||||||
*
|
*
|
||||||
* Parameters:
|
* \return NULL if the module is turn off for debug otheriwse returns the
|
||||||
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
|
* right file descriptor.
|
||||||
* 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(Upnp_LogLevel level, Dbg_Module module);
|
FILE *UpnpGetDebugFile(
|
||||||
|
/*! [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)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
level = level;
|
||||||
|
module = module;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/*!
|
||||||
* Function : DebugAtThisLevel
|
* \brief Returns true if debug output should be done in this module.
|
||||||
*
|
|
||||||
* 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
|
* \return Nonzero value if true, zero if false.
|
||||||
***************************************************************************/
|
*/
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
int DebugAtThisLevel(
|
int DebugAtThisLevel(
|
||||||
IN Upnp_LogLevel DLevel,
|
/*! [in] The level of the debug logging. It will decide whether debug
|
||||||
IN Dbg_Module Module);
|
* statement will go to standard output, or any of the log files. */
|
||||||
|
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(
|
||||||
IN Upnp_LogLevel DLevel,
|
Upnp_LogLevel DLevel,
|
||||||
IN Dbg_Module Module) { return 0; }
|
Dbg_Module Module)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
DLevel = DLevel;
|
||||||
|
Module = Module;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/*!
|
||||||
* Function : UpnpPrintf
|
* \brief Prints the debug statement either on the standard output or log file
|
||||||
*
|
* 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
|
#else /* DEBUG */
|
||||||
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
|
{
|
||||||
|
return;
|
||||||
|
DLevel = DLevel;
|
||||||
|
Module = Module;
|
||||||
|
DbgFileName = DbgFileName;
|
||||||
|
DbgLineNo = DbgLineNo;
|
||||||
|
FmtStr = FmtStr;
|
||||||
|
}
|
||||||
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/*!
|
||||||
* Function : UpnpDisplayBanner
|
* \brief Writes the file name and file number from where debug statement is
|
||||||
*
|
* coming to the log file.
|
||||||
* 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(
|
|
||||||
FILE *fd,
|
|
||||||
const char **lines,
|
|
||||||
size_t size,
|
|
||||||
int starlength);
|
|
||||||
#else
|
|
||||||
static UPNP_INLINE void UpnpDisplayBanner(
|
|
||||||
FILE *fd,
|
|
||||||
const char **lines,
|
|
||||||
size_t size,
|
|
||||||
int starlength) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 UpnpDisplayFileAndLine(
|
void UpnpDisplayFileAndLine(
|
||||||
|
/*! [in] File descriptor where line number and file name will be written. */
|
||||||
FILE *fd,
|
FILE *fd,
|
||||||
|
/*! [in] Name of the file. */
|
||||||
const char *DbgFileName,
|
const char *DbgFileName,
|
||||||
|
/*! [in] Line number of the file. */
|
||||||
int DbgLineNo);
|
int DbgLineNo);
|
||||||
#else
|
#else
|
||||||
static UPNP_INLINE void UpnpDisplayFileAndLine(
|
static UPNP_INLINE void UpnpDisplayFileAndLine(
|
||||||
FILE *fd,
|
FILE *fd,
|
||||||
const char *DbgFileName,
|
const char *DbgFileName,
|
||||||
int DbgLineNo) {}
|
int DbgLineNo)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
fd = fd;
|
||||||
|
DbgFileName = DbgFileName;
|
||||||
|
DbgLineNo = DbgLineNo;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*! @} */
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes the buffer in the file as per the requested banner
|
||||||
|
*/
|
||||||
|
#ifdef DEBUG
|
||||||
|
void UpnpDisplayBanner(
|
||||||
|
/*! [in] file descriptor where the banner will be written. */
|
||||||
|
FILE *fd,
|
||||||
|
/*! [in] The buffer that will be written. */
|
||||||
|
const char **lines,
|
||||||
|
/*! [in] Size of the buffer. */
|
||||||
|
size_t size,
|
||||||
|
/*! [in] This parameter provides the width of the banner. */
|
||||||
|
size_t starlength);
|
||||||
|
#else
|
||||||
|
static UPNP_INLINE void UpnpDisplayBanner(
|
||||||
|
FILE *fd,
|
||||||
|
const char **lines,
|
||||||
|
size_t size,
|
||||||
|
int starlength)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
fd = fd;
|
||||||
|
lines = lines;
|
||||||
|
size = size;
|
||||||
|
starlength = starlength;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Prints thread pool statistics.
|
||||||
|
*/
|
||||||
|
#ifdef DEBUG
|
||||||
|
void PrintThreadPoolStats(
|
||||||
|
/*! [in] The thread pool. */
|
||||||
|
ThreadPool *tp,
|
||||||
|
/*! [in] The file name that called this function, use the macro __FILE__. */
|
||||||
|
const char *DbgFileName,
|
||||||
|
/*! [in] The line number that the function was called, use the macro __LINE__. */
|
||||||
|
int DbgLineNo,
|
||||||
|
/*! [in] The message. */
|
||||||
|
const char *msg);
|
||||||
|
#else
|
||||||
|
static UPNP_INLINE void PrintThreadPoolStats(
|
||||||
|
ThreadPool *tp,
|
||||||
|
const char *DbgFileName,
|
||||||
|
int DbgLineNo,
|
||||||
|
const char *msg)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
tp = tp;
|
||||||
|
DbgFileName = DbgFileName;
|
||||||
|
DbgLineNo = DbgLineNo;
|
||||||
|
msg = msg;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,201 +29,261 @@
|
|||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/** @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
|
/*!
|
||||||
* allocated by the caller and must be large enough to hold the
|
* \brief Converts an SDK error code into a string error message suitable for
|
||||||
* {\bf BaseURL} and {\bf RelURL} combined.
|
* display. The memory returned from this function should NOT be freed.
|
||||||
*
|
*
|
||||||
* @return [int] An integer representing one of the following:
|
* \return An ASCII text string representation of the error message associated
|
||||||
* \begin{itemize}
|
* with the error code or the string "Unknown error code"
|
||||||
* \item {\tt UPNP_E_SUCCESS}: The operation completed successfully.
|
*/
|
||||||
* \item {\tt UPNP_E_INVALID_PARAM}: {\bf RelURL} is {\tt NULL}.
|
EXPORT_SPEC const char *UpnpGetErrorMessage(
|
||||||
* \item {\tt UPNP_E_INVALID_URL}: The {\bf BaseURL} / {\bf RelURL}
|
/*! [in] The SDK error code to convert. */
|
||||||
|
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.
|
||||||
* \item {\tt UPNP_E_OUTOF_MEMORY}: Insufficient resources exist to
|
* \li <tt>UPNP_E_OUTOF_MEMORY</tt>: Insufficient resources exist to
|
||||||
* complete this operation.
|
* complete this operation.
|
||||||
* \end{itemize}
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
EXPORT_SPEC int UpnpResolveURL(
|
EXPORT_SPEC int UpnpResolveURL(
|
||||||
IN const char * BaseURL, /** The base URL to combine. */
|
/*! [in] The base URL to combine. */
|
||||||
IN const char * RelURL, /** The relative URL to {\bf BaseURL}. */
|
const char *BaseURL,
|
||||||
OUT char * AbsURL /** A pointer to a buffer to store the
|
/*! [in] The relative URL to \b BaseURL. */
|
||||||
absolute URL. */
|
const char *RelURL,
|
||||||
);
|
/*! [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
|
|
||||||
* parameters can be passed to this function but every input variable name
|
|
||||||
* should have a matching value argument.
|
|
||||||
*
|
|
||||||
* @return [IXML_Document*] The action node of {\bf Upnp_Document} type or
|
|
||||||
* {\tt NULL} if the operation failed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
EXPORT_SPEC IXML_Document* UpnpMakeAction(
|
/*!
|
||||||
IN const char * ActionName, /** The action name. */
|
* \brief Combines a base URL and a relative URL into a single absolute URL.
|
||||||
IN const char * ServType, /** The service type. */
|
|
||||||
IN int NumArg, /** Number of argument pairs to be passed. */
|
|
||||||
IN const char * Arg, /** Status variable name and value pair. */
|
|
||||||
IN ... /* Other status variable name and value pairs. */
|
|
||||||
);
|
|
||||||
|
|
||||||
/** {\bf UpnpAddToAction} creates an action request packet based on its input
|
|
||||||
* parameters (status variable name and value pair). 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
|
|
||||||
* {\bf Upnp_Document} variable initialized with {\tt NULL} should be passed
|
|
||||||
* as a parameter.
|
|
||||||
*
|
*
|
||||||
* @return [int] An integer representing one of the following:
|
* The memory for \b AbsURL becomes owned by the caller and should be freed
|
||||||
* \begin{itemize}
|
* later.
|
||||||
* \item {\tt UPNP_E_SUCCESS}: The operation completed successfully.
|
*
|
||||||
* \item {\tt UPNP_E_INVALID_PARAM}: One or more of the parameters
|
* \return An integer representing one of the following:
|
||||||
* are invalid.
|
* \li <tt>UPNP_E_SUCCESS</tt>: The operation completed successfully.
|
||||||
* \item {\tt UPNP_E_OUTOF_MEMORY}: Insufficient resources exist to
|
* \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.
|
||||||
|
* \li <tt>UPNP_E_OUTOF_MEMORY</tt>: Insufficient resources exist to
|
||||||
* complete this operation.
|
* complete this operation.
|
||||||
* \end{itemize}
|
|
||||||
*/
|
*/
|
||||||
|
EXPORT_SPEC int UpnpResolveURL2(
|
||||||
|
/*! [in] The base URL to combine. */
|
||||||
|
const char *BaseURL,
|
||||||
|
/*! [in] The relative URL to \b BaseURL. */
|
||||||
|
const char *RelURL,
|
||||||
|
/*! [out] A pointer to a pointer to a buffer to store the
|
||||||
|
* absolute URL. Must be freed later by the caller. */
|
||||||
|
char **AbsURL);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Creates an action request packet based on its input parameters
|
||||||
|
* (status variable name and value pair).
|
||||||
|
*
|
||||||
|
* Any number of input parameters can be passed to this function but every
|
||||||
|
* input variable name should have a matching value argument.
|
||||||
|
*
|
||||||
|
* It is a wrapper function that calls makeAction() function to create the
|
||||||
|
* action request.
|
||||||
|
*
|
||||||
|
* \return The action node of \b Upnp_Document type or <tt>NULL</tt> if the
|
||||||
|
* operation failed.
|
||||||
|
*/
|
||||||
|
EXPORT_SPEC IXML_Document *UpnpMakeAction(
|
||||||
|
/*! [in] Name of the action request or response. */
|
||||||
|
const char *ActionName,
|
||||||
|
/*! [in] The service type. */
|
||||||
|
const char *ServType,
|
||||||
|
/*! [in] Number of argument pairs to be passed. */
|
||||||
|
int NumArg,
|
||||||
|
/*! [in] pointer to the first argument. */
|
||||||
|
const char *Arg,
|
||||||
|
/*! [in] Argument list. */
|
||||||
|
...);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Ceates an action response packet based on its output parameters
|
||||||
|
* (status variable name and value pair).
|
||||||
|
*
|
||||||
|
* Any number of input parameters can be passed to this function but every
|
||||||
|
* output variable name should have a matching value argument.
|
||||||
|
*
|
||||||
|
* 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 *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.
|
||||||
|
*/
|
||||||
EXPORT_SPEC int UpnpAddToAction(
|
EXPORT_SPEC int UpnpAddToAction(
|
||||||
IN OUT IXML_Document ** ActionDoc,
|
/*! [in,out] A pointer to store the action document node. */
|
||||||
/** A pointer to store the action
|
IXML_Document **ActionDoc,
|
||||||
document node. */
|
/*! [in] The action name. */
|
||||||
IN const char * ActionName, /** The action name. */
|
const char *ActionName,
|
||||||
IN const char * ServType, /** The service type. */
|
/*! [in] The service type. */
|
||||||
IN const char * ArgName, /** The status variable name. */
|
const char *ServType,
|
||||||
IN const char * ArgVal /** The status variable value. */
|
/*! [in] The status variable name. */
|
||||||
);
|
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
|
|
||||||
* number of input parameters can be passed to this function but every output
|
|
||||||
* variable name should have a matching value argument.
|
|
||||||
*
|
|
||||||
* @return [IXML_Document*] The action node of {\bf Upnp_Document} type or
|
|
||||||
* {\tt NULL} if the operation failed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
EXPORT_SPEC IXML_Document* UpnpMakeActionResponse(
|
/*!
|
||||||
IN const char * ActionName, /** The action name. */
|
* \brief Creates an action response packet based on its output parameters
|
||||||
IN const char * ServType, /** The service type. */
|
* (status variable name and value pair).
|
||||||
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:
|
* This API is especially suitable inside a loop to add any number of input
|
||||||
* \begin{itemize}
|
* parameters into an existing action response. If no action document exists
|
||||||
* \item {\tt UPNP_E_SUCCESS}: The operation completed successfully.
|
* in the beginning, a \b Upnp_Document variable initialized with <tt>NULL</tt>
|
||||||
* \item {\tt UPNP_E_INVALID_PARAM}: One or more of the parameters
|
* should be passed as a parameter.
|
||||||
* are invalid.
|
*
|
||||||
* \item {\tt UPNP_E_OUTOF_MEMORY}: Insufficient resources exist to
|
* It is a wrapper function that calls addToAction() function to add the
|
||||||
* complete this operation.
|
* argument in the action request.
|
||||||
* \end{itemize}
|
*
|
||||||
|
* \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 int UpnpAddToActionResponse(
|
EXPORT_SPEC int UpnpAddToActionResponse(
|
||||||
IN OUT IXML_Document ** ActionResponse,
|
/*! [in,out] Pointer to a document to store the action document node. */
|
||||||
/** Pointer to a document to
|
IXML_Document **ActionResponse,
|
||||||
store the action document
|
/*! [in] The action name. */
|
||||||
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 UpnpAddToPropertySet} 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
|
* \brief Creates a property set message packet.
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
* @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}
|
|
||||||
*
|
*
|
||||||
|
* Any number of input parameters can be passed to this function but every
|
||||||
|
* input variable name should have a matching value input argument.
|
||||||
|
*
|
||||||
|
* \return <tt>NULL</tt> on failure, or the property-set document node.
|
||||||
*/
|
*/
|
||||||
|
EXPORT_SPEC IXML_Document *UpnpCreatePropertySet(
|
||||||
|
/*! [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.
|
||||||
|
*/
|
||||||
EXPORT_SPEC int UpnpAddToPropertySet(
|
EXPORT_SPEC int UpnpAddToPropertySet(
|
||||||
IN OUT IXML_Document **PropSet,
|
/*! [in,out] A pointer to the document containing the property set document node. */
|
||||||
/** A pointer to the document containing
|
IXML_Document **PropSet,
|
||||||
the property set document node. */
|
/*! [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 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 */
|
||||||
|
|
||||||
|
|||||||
97
upnp/m4/libupnp.m4
Normal file
97
upnp/m4/libupnp.m4
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
# -*- Autoconf -*-
|
||||||
|
# This file is part of the aMule project.
|
||||||
|
# This file is part of the libupnp library project.
|
||||||
|
#
|
||||||
|
# Copyright (c) 2003-2008 aMule Team ( admin@amule.org / http://www.amule.org )
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
#
|
||||||
|
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl LIBUPNP_CHECK([VERSION = 1.6.6], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
dnl
|
||||||
|
dnl Check for the libupnp library
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl
|
||||||
|
dnl This macro sets these variables:
|
||||||
|
dnl - LIBUPNP_VERSION
|
||||||
|
dnl Something like "1.6.7"
|
||||||
|
dnl - LIBUPNP_CPPFLAGS
|
||||||
|
dnl Flags to be added to CPPFLAGS
|
||||||
|
dnl - LIBUPNP_CFLAGS
|
||||||
|
dnl Flags to be added to CFLAGS
|
||||||
|
dnl - LIBUPNP_LDFLAGS
|
||||||
|
dnl Flags to be added to LDFLAGS
|
||||||
|
dnl - LIBUPNP_LIBS
|
||||||
|
dnl Library to be added to LIBS
|
||||||
|
dnl
|
||||||
|
dnl The LIBUPNP_CPPFLAGS, LIBUPNP_CFLAGS, LIBUPNP_LDFLAGS and LIBUPNP_LIBS variables are also substituted.
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([LIBUPNP_CHECK],
|
||||||
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||||
|
m4_define([MIN_LIBUPNP_VERSION], [m4_ifval([$1], [$1], [1.6.6])])dnl
|
||||||
|
|
||||||
|
dnl Test for --with-libupnp-prefix
|
||||||
|
AC_ARG_WITH(
|
||||||
|
[libupnp-prefix],
|
||||||
|
[AS_HELP_STRING(
|
||||||
|
[--with-libupnp-prefix=PREFIX],
|
||||||
|
[UPnP library location])],
|
||||||
|
[export PKG_CONFIG_PATH=$withval/lib/pkgconfig])
|
||||||
|
|
||||||
|
dnl Check for libupnp >= MIN_LIBUPNP_VERSION
|
||||||
|
AS_IF([test $cross_compiling = no], [
|
||||||
|
AC_MSG_CHECKING([for libupnp version >= MIN_LIBUPNP_VERSION])
|
||||||
|
AS_IF([test -n "$PKG_CONFIG"], [
|
||||||
|
AS_IF([$PKG_CONFIG libupnp --exists], [
|
||||||
|
LIBUPNP_VERSION=`$PKG_CONFIG libupnp --modversion`
|
||||||
|
AS_IF([$PKG_CONFIG libupnp --atleast-version=MIN_LIBUPNP_VERSION], [
|
||||||
|
result=yes
|
||||||
|
resultstr=" (version $LIBUPNP_VERSION)"
|
||||||
|
LIBUPNP_CPPFLAGS=`$PKG_CONFIG libupnp --cflags-only-I`
|
||||||
|
LIBUPNP_CFLAGS=`$PKG_CONFIG libupnp --cflags-only-other`
|
||||||
|
LIBUPNP_LDFLAGS=`$PKG_CONFIG libupnp --libs-only-L`
|
||||||
|
LIBUPNP_LIBS=`$PKG_CONFIG libupnp --libs-only-other`
|
||||||
|
LIBUPNP_LIBS="$LIBUPNP_LIBS `$PKG_CONFIG libupnp --libs-only-l`"
|
||||||
|
], [
|
||||||
|
result=no
|
||||||
|
resultstr=" (version $LIBUPNP_VERSION is not new enough)"
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
result=no
|
||||||
|
resultstr=" (try to use --with-libupnp-prefix=PREFIX)"
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
result=no
|
||||||
|
resultstr=" (pkg-config not found)"
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT([$result$resultstr])
|
||||||
|
libupnp_error="libupnp >= MIN_LIBUPNP_VERSION not found$resultstr"
|
||||||
|
], [
|
||||||
|
dnl Currently cross-compilation with libupnp is not supported.
|
||||||
|
result=no
|
||||||
|
libupnp_error="cross compiling"
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Execute the right action.
|
||||||
|
AS_IF([test ${result:-no} = yes], [$2], [$3])
|
||||||
|
|
||||||
|
dnl Exported symbols
|
||||||
|
AC_SUBST([LIBUPNP_CPPFLAGS])dnl
|
||||||
|
AC_SUBST([LIBUPNP_CFLAGS])dnl
|
||||||
|
AC_SUBST([LIBUPNP_LDFLAGS])dnl
|
||||||
|
AC_SUBST([LIBUPNP_LIBS])dnl
|
||||||
|
m4_undefine([MIN_LIBUPNP_VERSION])dnl
|
||||||
|
])
|
||||||
@@ -9,10 +9,6 @@ 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 \
|
||||||
@@ -23,21 +19,21 @@ LDADD = \
|
|||||||
noinst_PROGRAMS =
|
noinst_PROGRAMS =
|
||||||
if ENABLE_SAMPLES
|
if ENABLE_SAMPLES
|
||||||
if ENABLE_CLIENT
|
if ENABLE_CLIENT
|
||||||
noinst_PROGRAMS += upnp_tv_ctrlpt
|
noinst_PROGRAMS += tv_ctrlpt
|
||||||
upnp_tv_ctrlpt_CPPFLAGS = \
|
tv_ctrlpt_CPPFLAGS = \
|
||||||
$(AM_CPPFLAGS) \
|
$(AM_CPPFLAGS) \
|
||||||
-I$(srcdir)/common/ \
|
-I$(srcdir)/common/ \
|
||||||
-I$(srcdir)/tvctrlpt
|
-I$(srcdir)/tvctrlpt
|
||||||
if ENABLE_DEVICE
|
if ENABLE_DEVICE
|
||||||
noinst_PROGRAMS += upnp_tv_combo
|
noinst_PROGRAMS += tv_combo
|
||||||
upnp_tv_combo_CPPFLAGS = $(AM_CPPFLAGS) \
|
tv_combo_CPPFLAGS = $(AM_CPPFLAGS) \
|
||||||
-I$(srcdir)/common/ \
|
-I$(srcdir)/common/ \
|
||||||
-I$(srcdir)/tvcombo
|
-I$(srcdir)/tvcombo
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if ENABLE_DEVICE
|
if ENABLE_DEVICE
|
||||||
noinst_PROGRAMS += upnp_tv_device
|
noinst_PROGRAMS += tv_device
|
||||||
upnp_tv_device_CPPFLAGS = \
|
tv_device_CPPFLAGS = \
|
||||||
$(AM_CPPFLAGS) \
|
$(AM_CPPFLAGS) \
|
||||||
-I$(srcdir)/common/ \
|
-I$(srcdir)/common/ \
|
||||||
-I$(srcdir)/tvdevice
|
-I$(srcdir)/tvdevice
|
||||||
@@ -45,36 +41,37 @@ endif
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
upnp_tv_device_SOURCES = \
|
tv_device_SOURCES = \
|
||||||
common/sample_util.c \
|
common/sample_util.c \
|
||||||
common/sample_util.h \
|
common/sample_util.h \
|
||||||
tvdevice/upnp_tv_device.c \
|
common/tv_device.c \
|
||||||
tvdevice/upnp_tv_device.h \
|
common/tv_device.h \
|
||||||
tvdevice/linux/upnp_tv_device_main.c
|
linux/tv_device_main.c
|
||||||
|
|
||||||
|
|
||||||
upnp_tv_ctrlpt_SOURCES = \
|
tv_ctrlpt_SOURCES = \
|
||||||
common/sample_util.c \
|
common/sample_util.c \
|
||||||
common/sample_util.h \
|
common/sample_util.h \
|
||||||
tvctrlpt/upnp_tv_ctrlpt.c \
|
common/tv_ctrlpt.c \
|
||||||
tvctrlpt/upnp_tv_ctrlpt.h \
|
common/tv_ctrlpt.h \
|
||||||
tvctrlpt/linux/upnp_tv_ctrlpt_main.c
|
linux/tv_ctrlpt_main.c
|
||||||
|
|
||||||
upnp_tv_combo_SOURCES = \
|
tv_combo_SOURCES = \
|
||||||
common/sample_util.c \
|
common/sample_util.c \
|
||||||
common/sample_util.h \
|
common/sample_util.h \
|
||||||
tvcombo/upnp_tv_ctrlpt.c \
|
common/tv_ctrlpt.c \
|
||||||
tvcombo/upnp_tv_ctrlpt.h \
|
common/tv_ctrlpt.h \
|
||||||
tvcombo/upnp_tv_device.c \
|
common/tv_device.c \
|
||||||
tvcombo/upnp_tv_device.h \
|
common/tv_device.h \
|
||||||
tvcombo/linux/upnp_tv_combo_main.c
|
linux/tv_combo_main.c
|
||||||
|
|
||||||
|
|
||||||
if WITH_DOCUMENTATION
|
if WITH_DOCUMENTATION
|
||||||
examplesdir = $(docdir)/examples
|
examplesdir = $(docdir)/examples
|
||||||
examples_DATA = \
|
examples_DATA = \
|
||||||
$(upnp_tv_ctrlpt_SOURCES) \
|
$(sort \
|
||||||
$(upnp_tv_device_SOURCES)
|
$(tv_ctrlpt_SOURCES) \
|
||||||
|
$(tv_device_SOURCES))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,268 +1,263 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/*******************************************************************************
|
||||||
//
|
*
|
||||||
// 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
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#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"
|
#ifdef SAMPLE_UTIL_C
|
||||||
#include "ithread.h"
|
/*! Service types for tv services. */
|
||||||
#include "ixml.h"
|
const char *TvServiceType[] = {
|
||||||
|
"urn:schemas-upnp-org:service:tvcontrol:1",
|
||||||
|
"urn:schemas-upnp-org:service:tvpicture:1"
|
||||||
|
};
|
||||||
|
#else /* SAMPLE_UTIL_C */
|
||||||
|
extern const char *TvServiceType[];
|
||||||
|
#endif /* SAMPLE_UTIL_C */
|
||||||
|
|
||||||
//mutex to control displaying of events
|
/* mutex to control displaying of events */
|
||||||
extern ithread_mutex_t display_mutex ;
|
extern ithread_mutex_t display_mutex;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
STATE_UPDATE = 0,
|
STATE_UPDATE = 0,
|
||||||
DEVICE_ADDED =1,
|
DEVICE_ADDED = 1,
|
||||||
DEVICE_REMOVED=2,
|
DEVICE_REMOVED = 2,
|
||||||
GET_VAR_COMPLETE=3
|
GET_VAR_COMPLETE = 3
|
||||||
} eventType;
|
} eventType;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Given a DOM node such as <Channel>11</Channel>, this routine
|
||||||
|
* extracts the value (e.g., 11) from the node and returns it as
|
||||||
|
* a string. The string must be freed by the caller using free.
|
||||||
|
*
|
||||||
|
* \return The DOM node as a string.
|
||||||
|
*/
|
||||||
|
char *SampleUtil_GetElementValue(
|
||||||
|
/*! [in] The DOM node from which to extract the value. */
|
||||||
|
IXML_Element *element);
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_GetElementValue
|
* \brief Given a DOM node representing a UPnP Device Description Document,
|
||||||
|
* this routine parses the document and finds the first service list
|
||||||
|
* (i.e., the service list for the root device). The service list
|
||||||
|
* is returned as a DOM node list. The NodeList must be freed using
|
||||||
|
* NodeList_free.
|
||||||
*
|
*
|
||||||
* Description:
|
* \return The service list is returned as a DOM node list.
|
||||||
* Given a DOM node such as <Channel>11</Channel>, this routine
|
*/
|
||||||
* extracts the value (e.g., 11) from the node and returns it as
|
IXML_NodeList *SampleUtil_GetFirstServiceList(
|
||||||
* a string. The string must be freed by the caller using
|
/*! [in] The DOM node from which to extract the service list. */
|
||||||
* free.
|
IXML_Document *doc);
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* node -- The DOM node from which to extract the value
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
char * SampleUtil_GetElementValue(IN IXML_Element *element);
|
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_GetFirstServiceList
|
* \brief Given a document node, this routine searches for the first element
|
||||||
*
|
* named by the input string item, and returns its value as a string.
|
||||||
* Description:
|
* String must be freed by caller using free.
|
||||||
* Given a DOM node representing a UPnP Device Description Document,
|
*/
|
||||||
* this routine parses the document and finds the first service list
|
char *SampleUtil_GetFirstDocumentItem(
|
||||||
* (i.e., the service list for the root device). The service list
|
/*! [in] The DOM document from which to extract the value. */
|
||||||
* is returned as a DOM node list. The NodeList must be freed using
|
IXML_Document *doc,
|
||||||
* NodeList_free.
|
/*! [in] The item to search for. */
|
||||||
*
|
const char *item);
|
||||||
* Parameters:
|
|
||||||
* node -- The DOM node from which to extract the service list
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
|
|
||||||
IXML_NodeList *SampleUtil_GetFirstServiceList(IN IXML_Document * doc);
|
/*!
|
||||||
|
* \brief Given a DOM element, this routine searches for the first element
|
||||||
|
* named by the input string item, and returns its value as a string.
|
||||||
|
* The string must be freed using free.
|
||||||
|
*/
|
||||||
|
char *SampleUtil_GetFirstElementItem(
|
||||||
|
/*! [in] The DOM element from which to extract the value. */
|
||||||
|
IXML_Element *element,
|
||||||
|
/*! [in] The item to search for. */
|
||||||
|
const char *item);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Prints a callback event type as a string.
|
||||||
|
*/
|
||||||
|
void SampleUtil_PrintEventType(
|
||||||
|
/*! [in] The callback event. */
|
||||||
|
Upnp_EventType S);
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_GetFirstDocumentItem
|
* \brief Prints callback event structure details.
|
||||||
*
|
*/
|
||||||
* Description:
|
int SampleUtil_PrintEvent(
|
||||||
* Given a document node, this routine searches for the first element
|
/*! [in] The type of callback event. */
|
||||||
* named by the input string item, and returns its value as a string.
|
Upnp_EventType EventType,
|
||||||
* String must be freed by caller using free.
|
/*! [in] The callback event structure. */
|
||||||
* Parameters:
|
void *Event);
|
||||||
* doc -- The DOM document from which to extract the value
|
|
||||||
* item -- The item to search for
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
char * SampleUtil_GetFirstDocumentItem(IN IXML_Document *doc, IN const char *item);
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This routine finds the first occurance of a service in a DOM
|
||||||
|
* representation of a description document and parses it. Note that this
|
||||||
|
* function currently assumes that the eventURL and controlURL values in
|
||||||
|
* the service definitions are full URLs. Relative URLs are not handled here.
|
||||||
|
*/
|
||||||
|
int SampleUtil_FindAndParseService (
|
||||||
|
/*! [in] The DOM description document. */
|
||||||
|
IXML_Document *DescDoc,
|
||||||
|
/*! [in] The location of the description document. */
|
||||||
|
const char *location,
|
||||||
|
/*! [in] The type of service to search for. */
|
||||||
|
const char *serviceType,
|
||||||
|
/*! [out] The service ID. */
|
||||||
|
char **serviceId,
|
||||||
|
/*! [out] The event URL for the service. */
|
||||||
|
char **eventURL,
|
||||||
|
/*! [out] The control URL for the service. */
|
||||||
|
char **controlURL);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Prototype for displaying strings. All printing done by the device,
|
||||||
|
* control point, and sample util, ultimately use this to display strings
|
||||||
|
* to the user.
|
||||||
|
*/
|
||||||
|
typedef void (*print_string)(
|
||||||
|
/*! [in] Format. */
|
||||||
|
const char *string,
|
||||||
|
/*! [in] Arguments. */
|
||||||
|
...)
|
||||||
|
#if (__GNUC__ >= 3)
|
||||||
|
/* This enables printf like format checking by the compiler */
|
||||||
|
__attribute__((format (__printf__, 1, 2)))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
/********************************************************************************
|
/*! global print function used by sample util */
|
||||||
* SampleUtil_GetFirstElementItem
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Given a DOM element, this routine searches for the first element
|
|
||||||
* named by the input string item, and returns its value as a string.
|
|
||||||
* The string must be freed using free.
|
|
||||||
* Parameters:
|
|
||||||
* node -- The DOM element from which to extract the value
|
|
||||||
* item -- The item to search for
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
char * SampleUtil_GetFirstElementItem(IN IXML_Element *element, IN const char *item);
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* SampleUtil_PrintEventType
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Prints a callback event type as a string.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* S -- The callback event
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
void SampleUtil_PrintEventType(IN Upnp_EventType S);
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* SampleUtil_PrintEvent
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Prints callback event structure details.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* EventType -- The type of callback event
|
|
||||||
* Event -- The callback event structure
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
int SampleUtil_PrintEvent(IN Upnp_EventType EventType,
|
|
||||||
IN void *Event);
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* SampleUtil_FindAndParseService
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This routine finds the first occurance of a service in a DOM representation
|
|
||||||
* of a description document and parses it. Note that this function currently
|
|
||||||
* assumes that the eventURL and controlURL values in the service definitions
|
|
||||||
* are full URLs. Relative URLs are not handled here.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* DescDoc -- The DOM description document
|
|
||||||
* location -- The location of the description document
|
|
||||||
* serviceSearchType -- The type of service to search for
|
|
||||||
* serviceId -- OUT -- The service ID
|
|
||||||
* eventURL -- OUT -- The event URL for the service
|
|
||||||
* controlURL -- OUT -- The control URL for the service
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
int SampleUtil_FindAndParseService (IN IXML_Document *DescDoc, IN char* location,
|
|
||||||
IN char *serviceType, OUT char **serviceId,
|
|
||||||
OUT char **eventURL, OUT char **controlURL);
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* print_string
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Prototype for displaying strings. All printing done by the device,
|
|
||||||
* control point, and sample util, ultimately use this to display strings
|
|
||||||
* to the user.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* const char * string.
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
typedef void (*print_string)(const char *string);
|
|
||||||
|
|
||||||
//global print function used by sample util
|
|
||||||
extern print_string gPrintFun;
|
extern print_string gPrintFun;
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* state_update
|
* \brief Prototype for passing back state changes.
|
||||||
*
|
*/
|
||||||
* Description:
|
typedef void (*state_update)(
|
||||||
* Prototype for passing back state changes
|
/*! [in] . */
|
||||||
*
|
const char *varName,
|
||||||
* Parameters:
|
/*! [in] . */
|
||||||
* const char * varName
|
const char *varValue,
|
||||||
* const char * varValue
|
/*! [in] . */
|
||||||
* const char * UDN
|
const char *UDN,
|
||||||
* int newDevice
|
/*! [in] . */
|
||||||
********************************************************************************/
|
eventType type);
|
||||||
typedef void (*state_update)( const char *varName, const char *varValue, const char *UDN,
|
|
||||||
eventType type);
|
|
||||||
|
|
||||||
//global state update function used by smaple util
|
/*! global state update function used by smaple util */
|
||||||
extern state_update gStateUpdateFun;
|
extern state_update gStateUpdateFun;
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_Initialize
|
* \brief Initializes the sample util. Must be called before any sample util
|
||||||
*
|
* functions. May be called multiple times.
|
||||||
* Description:
|
*/
|
||||||
* Initializes the sample util. Must be called before any sample util
|
int SampleUtil_Initialize(
|
||||||
* functions. May be called multiple times.
|
/*! [in] Print function to use in SampleUtil_Print. */
|
||||||
*
|
print_string print_function);
|
||||||
* Parameters:
|
|
||||||
* print_function - print function to use in SampleUtil_Print
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
int SampleUtil_Initialize(print_string print_function);
|
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_Finish
|
* \brief Releases Resources held by sample util.
|
||||||
*
|
*/
|
||||||
* Description:
|
int SampleUtil_Finish();
|
||||||
* Releases Resources held by sample util.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
int SampleUtil_Finish(void);
|
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_Print
|
* \brief Function emulating printf that ultimately calls the registered print
|
||||||
|
* function with the formatted string.
|
||||||
*
|
*
|
||||||
* Description:
|
* Provides platform-specific print functionality. This function should be
|
||||||
* Function emulating printf that ultimately calls the registered print
|
* called when you want to print content suitable for console output (i.e.,
|
||||||
* function with the formatted string.
|
* in a large text box or on a screen). If your device/operating system is
|
||||||
|
* not supported here, you should add a port.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* \return The same as printf.
|
||||||
* fmt - format (see printf)
|
*/
|
||||||
* . . . - variable number of args. (see printf)
|
int SampleUtil_Print(
|
||||||
*
|
/*! [in] Format (see printf). */
|
||||||
********************************************************************************/
|
const char *fmt,
|
||||||
int SampleUtil_Print( char *fmt, ... );
|
/*! [in] Format data. */
|
||||||
|
...)
|
||||||
|
#if (__GNUC__ >= 3)
|
||||||
|
/* This enables printf like format checking by the compiler */
|
||||||
|
__attribute__((format (__printf__, 1, 2)))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_RegisterUpdateFunction
|
* \brief
|
||||||
*
|
*/
|
||||||
* Description:
|
int SampleUtil_RegisterUpdateFunction(
|
||||||
*
|
/*! [in] . */
|
||||||
* Parameters:
|
state_update update_function);
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
int SampleUtil_RegisterUpdateFunction( state_update update_function );
|
|
||||||
|
|
||||||
/********************************************************************************
|
/*!
|
||||||
* SampleUtil_StateUpdate
|
* \brief
|
||||||
*
|
*/
|
||||||
* Description:
|
void SampleUtil_StateUpdate(
|
||||||
*
|
/*! [in] . */
|
||||||
* Parameters:
|
const char *varName,
|
||||||
*
|
/*! [in] . */
|
||||||
********************************************************************************/
|
const char *varValue,
|
||||||
void SampleUtil_StateUpdate( const char *varName, const char *varValue, const char *UDN,
|
/*! [in] . */
|
||||||
eventType type);
|
const char *UDN,
|
||||||
|
/*! [in] . */
|
||||||
|
eventType type);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Prints a string to standard out.
|
||||||
|
*/
|
||||||
|
void linux_print(const char *format, ...)
|
||||||
|
#if (__GNUC__ >= 3)
|
||||||
|
/* This enables printf like format checking by the compiler */
|
||||||
|
__attribute__((format (__printf__, 1, 2)))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
};
|
};
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#define snprintf _snprintf
|
||||||
|
#define strcasecmp stricmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* UPNPSDK_UTIL_H */
|
#endif /* SAMPLE_UTIL_H */
|
||||||
|
|
||||||
|
|||||||
1570
upnp/sample/common/tv_ctrlpt.c
Normal file
1570
upnp/sample/common/tv_ctrlpt.c
Normal file
File diff suppressed because it is too large
Load Diff
222
upnp/sample/common/tv_ctrlpt.h
Normal file
222
upnp/sample/common/tv_ctrlpt.h
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef UPNP_TV_CTRLPT_H
|
||||||
|
#define UPNP_TV_CTRLPT_H
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "sample_util.h"
|
||||||
|
|
||||||
|
#include "ithread.h"
|
||||||
|
#include "upnp.h"
|
||||||
|
#include "UpnpString.h"
|
||||||
|
#include "upnptools.h"
|
||||||
|
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
/* Do not #include <unistd.h> */
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define TV_SERVICE_SERVCOUNT 2
|
||||||
|
#define TV_SERVICE_CONTROL 0
|
||||||
|
#define TV_SERVICE_PICTURE 1
|
||||||
|
|
||||||
|
#define TV_CONTROL_VARCOUNT 3
|
||||||
|
#define TV_CONTROL_POWER 0
|
||||||
|
#define TV_CONTROL_CHANNEL 1
|
||||||
|
#define TV_CONTROL_VOLUME 2
|
||||||
|
|
||||||
|
#define TV_PICTURE_VARCOUNT 4
|
||||||
|
#define TV_PICTURE_COLOR 0
|
||||||
|
#define TV_PICTURE_TINT 1
|
||||||
|
#define TV_PICTURE_CONTRAST 2
|
||||||
|
#define TV_PICTURE_BRIGHTNESS 3
|
||||||
|
|
||||||
|
#define TV_MAX_VAL_LEN 5
|
||||||
|
|
||||||
|
#define TV_SUCCESS 0
|
||||||
|
#define TV_ERROR (-1)
|
||||||
|
#define TV_WARNING 1
|
||||||
|
|
||||||
|
/* This should be the maximum VARCOUNT from above */
|
||||||
|
#define TV_MAXVARS TV_PICTURE_VARCOUNT
|
||||||
|
|
||||||
|
extern const char *TvServiceName[];
|
||||||
|
extern const char *TvVarName[TV_SERVICE_SERVCOUNT][TV_MAXVARS];
|
||||||
|
extern char TvVarCount[];
|
||||||
|
|
||||||
|
struct tv_service {
|
||||||
|
char ServiceId[NAME_SIZE];
|
||||||
|
char ServiceType[NAME_SIZE];
|
||||||
|
char *VariableStrVal[TV_MAXVARS];
|
||||||
|
char EventURL[NAME_SIZE];
|
||||||
|
char ControlURL[NAME_SIZE];
|
||||||
|
char SID[NAME_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct TvDeviceNode *GlobalDeviceList;
|
||||||
|
|
||||||
|
struct TvDevice {
|
||||||
|
char UDN[250];
|
||||||
|
char DescDocURL[250];
|
||||||
|
char FriendlyName[250];
|
||||||
|
char PresURL[250];
|
||||||
|
int AdvrTimeOut;
|
||||||
|
struct tv_service TvService[TV_SERVICE_SERVCOUNT];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TvDeviceNode {
|
||||||
|
struct TvDevice device;
|
||||||
|
struct TvDeviceNode *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern ithread_mutex_t DeviceListMutex;
|
||||||
|
|
||||||
|
extern UpnpClient_Handle ctrlpt_handle;
|
||||||
|
|
||||||
|
void TvCtrlPointPrintHelp(void);
|
||||||
|
int TvCtrlPointDeleteNode(struct TvDeviceNode *);
|
||||||
|
int TvCtrlPointRemoveDevice(const char *);
|
||||||
|
int TvCtrlPointRemoveAll(void);
|
||||||
|
int TvCtrlPointRefresh(void);
|
||||||
|
|
||||||
|
int TvCtrlPointSendAction(int, int, const char *, const char **, char **, int);
|
||||||
|
int TvCtrlPointSendActionNumericArg(int devnum, int service, const char *actionName, const char *paramName, int paramValue);
|
||||||
|
int TvCtrlPointSendPowerOn(int devnum);
|
||||||
|
int TvCtrlPointSendPowerOff(int devnum);
|
||||||
|
int TvCtrlPointSendSetChannel(int, int);
|
||||||
|
int TvCtrlPointSendSetVolume(int, int);
|
||||||
|
int TvCtrlPointSendSetColor(int, int);
|
||||||
|
int TvCtrlPointSendSetTint(int, int);
|
||||||
|
int TvCtrlPointSendSetContrast(int, int);
|
||||||
|
int TvCtrlPointSendSetBrightness(int, int);
|
||||||
|
|
||||||
|
int TvCtrlPointGetVar(int, int, const char *);
|
||||||
|
int TvCtrlPointGetPower(int devnum);
|
||||||
|
int TvCtrlPointGetChannel(int);
|
||||||
|
int TvCtrlPointGetVolume(int);
|
||||||
|
int TvCtrlPointGetColor(int);
|
||||||
|
int TvCtrlPointGetTint(int);
|
||||||
|
int TvCtrlPointGetContrast(int);
|
||||||
|
int TvCtrlPointGetBrightness(int);
|
||||||
|
|
||||||
|
int TvCtrlPointGetDevice(int, struct TvDeviceNode **);
|
||||||
|
int TvCtrlPointPrintList(void);
|
||||||
|
int TvCtrlPointPrintDevice(int);
|
||||||
|
void TvCtrlPointAddDevice(IXML_Document *, const char *, int);
|
||||||
|
void TvCtrlPointHandleGetVar(const char *, const char *, const DOMString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Update a Tv state table. Called when an event is received.
|
||||||
|
*
|
||||||
|
* Note: this function is NOT thread save. It must be called from another
|
||||||
|
* function that has locked the global device list.
|
||||||
|
**/
|
||||||
|
void TvStateUpdate(
|
||||||
|
/*! [in] The UDN of the parent device. */
|
||||||
|
char *UDN,
|
||||||
|
/*! [in] The service state table to update. */
|
||||||
|
int Service,
|
||||||
|
/*! [out] DOM document representing the XML received with the event. */
|
||||||
|
IXML_Document *ChangedVariables,
|
||||||
|
/*! [out] pointer to the state table for the Tv service to update. */
|
||||||
|
char **State);
|
||||||
|
|
||||||
|
void TvCtrlPointHandleEvent(const char *, int, IXML_Document *);
|
||||||
|
void TvCtrlPointHandleSubscribeUpdate(const char *, const Upnp_SID, int);
|
||||||
|
int TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks the advertisement each device in the global device list.
|
||||||
|
*
|
||||||
|
* If an advertisement expires, the device is removed from the list.
|
||||||
|
*
|
||||||
|
* If an advertisement is about to expire, a search request is sent for that
|
||||||
|
* device.
|
||||||
|
*/
|
||||||
|
void TvCtrlPointVerifyTimeouts(
|
||||||
|
/*! [in] The increment to subtract from the timeouts each time the
|
||||||
|
* function is called. */
|
||||||
|
int incr);
|
||||||
|
|
||||||
|
void TvCtrlPointPrintCommands(void);
|
||||||
|
void* TvCtrlPointCommandLoop(void *);
|
||||||
|
int TvCtrlPointStart(print_string printFunctionPtr, state_update updateFunctionPtr, int combo);
|
||||||
|
int TvCtrlPointStop(void);
|
||||||
|
int TvCtrlPointProcessCommand(char *cmdline);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Print help info for this application.
|
||||||
|
*/
|
||||||
|
void TvCtrlPointPrintShortHelp(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Print long help info for this application.
|
||||||
|
*/
|
||||||
|
void TvCtrlPointPrintLongHelp(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \briefPrint the list of valid command line commands to the user
|
||||||
|
*/
|
||||||
|
void TvCtrlPointPrintCommands(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Function that receives commands from the user at the command prompt
|
||||||
|
* during the lifetime of the device, and calls the appropriate
|
||||||
|
* functions for those commands.
|
||||||
|
*/
|
||||||
|
void *TvCtrlPointCommandLoop(void *args);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief
|
||||||
|
*/
|
||||||
|
int TvCtrlPointProcessCommand(char *cmdline);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* UPNP_TV_CTRLPT_H */
|
||||||
|
|
||||||
1510
upnp/sample/common/tv_device.c
Normal file
1510
upnp/sample/common/tv_device.c
Normal file
File diff suppressed because it is too large
Load Diff
566
upnp/sample/common/tv_device.h
Normal file
566
upnp/sample/common/tv_device.h
Normal file
@@ -0,0 +1,566 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef UPNP_TV_DEVICE_H
|
||||||
|
#define UPNP_TV_DEVICE_H
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "sample_util.h"
|
||||||
|
|
||||||
|
#include "ithread.h"
|
||||||
|
#include "upnp.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
/* Do not #include <unistd.h> */
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*! Color constants */
|
||||||
|
#define MAX_COLOR 10
|
||||||
|
#define MIN_COLOR 1
|
||||||
|
|
||||||
|
/*! Brightness constants */
|
||||||
|
#define MAX_BRIGHTNESS 10
|
||||||
|
#define MIN_BRIGHTNESS 1
|
||||||
|
|
||||||
|
/*! Power constants */
|
||||||
|
#define POWER_ON 1
|
||||||
|
#define POWER_OFF 0
|
||||||
|
|
||||||
|
/*! Tint constants */
|
||||||
|
#define MAX_TINT 10
|
||||||
|
#define MIN_TINT 1
|
||||||
|
|
||||||
|
/*! Volume constants */
|
||||||
|
#define MAX_VOLUME 10
|
||||||
|
#define MIN_VOLUME 1
|
||||||
|
|
||||||
|
/*! Contrast constants */
|
||||||
|
#define MAX_CONTRAST 10
|
||||||
|
#define MIN_CONTRAST 1
|
||||||
|
|
||||||
|
/*! Channel constants */
|
||||||
|
#define MAX_CHANNEL 100
|
||||||
|
#define MIN_CHANNEL 1
|
||||||
|
|
||||||
|
/*! Number of services. */
|
||||||
|
#define TV_SERVICE_SERVCOUNT 2
|
||||||
|
|
||||||
|
/*! Index of control service */
|
||||||
|
#define TV_SERVICE_CONTROL 0
|
||||||
|
|
||||||
|
/*! Index of picture service */
|
||||||
|
#define TV_SERVICE_PICTURE 1
|
||||||
|
|
||||||
|
/*! Number of control variables */
|
||||||
|
#define TV_CONTROL_VARCOUNT 3
|
||||||
|
|
||||||
|
/*! Index of power variable */
|
||||||
|
#define TV_CONTROL_POWER 0
|
||||||
|
|
||||||
|
/*! Index of channel variable */
|
||||||
|
#define TV_CONTROL_CHANNEL 1
|
||||||
|
|
||||||
|
/*! Index of volume variable */
|
||||||
|
#define TV_CONTROL_VOLUME 2
|
||||||
|
|
||||||
|
/*! Number of picture variables */
|
||||||
|
#define TV_PICTURE_VARCOUNT 4
|
||||||
|
|
||||||
|
/*! Index of color variable */
|
||||||
|
#define TV_PICTURE_COLOR 0
|
||||||
|
|
||||||
|
/*! Index of tint variable */
|
||||||
|
#define TV_PICTURE_TINT 1
|
||||||
|
|
||||||
|
/*! Index of contrast variable */
|
||||||
|
#define TV_PICTURE_CONTRAST 2
|
||||||
|
|
||||||
|
/*! Index of brightness variable */
|
||||||
|
#define TV_PICTURE_BRIGHTNESS 3
|
||||||
|
|
||||||
|
/*! Max value length */
|
||||||
|
#define TV_MAX_VAL_LEN 5
|
||||||
|
|
||||||
|
/*! Max actions */
|
||||||
|
#define TV_MAXACTIONS 12
|
||||||
|
|
||||||
|
/*! This should be the maximum VARCOUNT from above */
|
||||||
|
#define TV_MAXVARS TV_PICTURE_VARCOUNT
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Prototype for all actions. For each action that a service
|
||||||
|
* implements, there is a corresponding function with this prototype.
|
||||||
|
*
|
||||||
|
* Pointers to these functions, along with action names, are stored
|
||||||
|
* in the service table. When an action request comes in the action
|
||||||
|
* name is matched, and the appropriate function is called.
|
||||||
|
* Each function returns UPNP_E_SUCCESS, on success, and a nonzero
|
||||||
|
* error code on failure.
|
||||||
|
*/
|
||||||
|
typedef int (*upnp_action)(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *request,
|
||||||
|
/*! [out] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] Error string in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*! Structure for storing Tv Service identifiers and state table. */
|
||||||
|
struct TvService {
|
||||||
|
/*! Universally Unique Device Name. */
|
||||||
|
char UDN[NAME_SIZE];
|
||||||
|
/*! . */
|
||||||
|
char ServiceId[NAME_SIZE];
|
||||||
|
/*! . */
|
||||||
|
char ServiceType[NAME_SIZE];
|
||||||
|
/*! . */
|
||||||
|
const char *VariableName[TV_MAXVARS];
|
||||||
|
/*! . */
|
||||||
|
char *VariableStrVal[TV_MAXVARS];
|
||||||
|
/*! . */
|
||||||
|
const char *ActionNames[TV_MAXACTIONS];
|
||||||
|
/*! . */
|
||||||
|
upnp_action actions[TV_MAXACTIONS];
|
||||||
|
/*! . */
|
||||||
|
int VariableCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! Array of service structures */
|
||||||
|
extern struct TvService tv_service_table[];
|
||||||
|
|
||||||
|
/*! Device handle returned from sdk */
|
||||||
|
extern UpnpDevice_Handle device_handle;
|
||||||
|
|
||||||
|
/*! Mutex for protecting the global state table data
|
||||||
|
* in a multi-threaded, asynchronous environment.
|
||||||
|
* All functions should lock this mutex before reading
|
||||||
|
* or writing the state table data. */
|
||||||
|
extern ithread_mutex_t TVDevMutex;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes the action table for the specified service.
|
||||||
|
*
|
||||||
|
* Note that knowledge of the service description is assumed.
|
||||||
|
* Action names are hardcoded.
|
||||||
|
*/
|
||||||
|
int SetActionTable(
|
||||||
|
/*! [in] one of TV_SERVICE_CONTROL or, TV_SERVICE_PICTURE. */
|
||||||
|
int serviceType,
|
||||||
|
/*! [in,out] service containing action table to set. */
|
||||||
|
struct TvService *out);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initialize the device state table for this TvDevice, pulling
|
||||||
|
* identifier info from the description Document.
|
||||||
|
*
|
||||||
|
* Note that knowledge of the service description is assumed.
|
||||||
|
* State table variables and default values are currently hardcoded in
|
||||||
|
* this file rather than being read from service description documents.
|
||||||
|
*/
|
||||||
|
int TvDeviceStateTableInit(
|
||||||
|
/*! [in] The description document URL. */
|
||||||
|
char *DescDocURL);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Called during a subscription request callback.
|
||||||
|
*
|
||||||
|
* If the subscription request is for this device and either its
|
||||||
|
* control service or picture service, then accept it.
|
||||||
|
*/
|
||||||
|
int TvDeviceHandleSubscriptionRequest(
|
||||||
|
/*! [in] The subscription request event structure. */
|
||||||
|
struct Upnp_Subscription_Request *sr_event);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Called during a get variable request callback.
|
||||||
|
*
|
||||||
|
* If the request is for this device and either its control service or
|
||||||
|
* picture service, then respond with the variable value.
|
||||||
|
*/
|
||||||
|
int TvDeviceHandleGetVarRequest(
|
||||||
|
/*! [in,out] The control get variable request event structure. */
|
||||||
|
struct Upnp_State_Var_Request *cgv_event);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Called during an action request callback.
|
||||||
|
*
|
||||||
|
* If the request is for this device and either its control service
|
||||||
|
* or picture service, then perform the action and respond.
|
||||||
|
*/
|
||||||
|
int TvDeviceHandleActionRequest(
|
||||||
|
/*! [in,out] The control action request event structure. */
|
||||||
|
struct Upnp_Action_Request *ca_event);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief The callback handler registered with the SDK while registering
|
||||||
|
* root device.
|
||||||
|
*
|
||||||
|
* Dispatches the request to the appropriate procedure
|
||||||
|
* based on the value of EventType. The four requests handled by the
|
||||||
|
* device are:
|
||||||
|
* \li 1) Event Subscription requests.
|
||||||
|
* \li 2) Get Variable requests.
|
||||||
|
* \li 3) Action requests.
|
||||||
|
*/
|
||||||
|
int TvDeviceCallbackEventHandler(
|
||||||
|
/*! [in] The type of callback event. */
|
||||||
|
Upnp_EventType,
|
||||||
|
/*! [in] Data structure containing event data. */
|
||||||
|
void *Event,
|
||||||
|
/*! [in] Optional data specified during callback registration. */
|
||||||
|
void *Cookie);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Update the TvDevice service state table, and notify all subscribed
|
||||||
|
* control points of the updated state.
|
||||||
|
*
|
||||||
|
* Note that since this function blocks on the mutex TVDevMutex,
|
||||||
|
* to avoid a hang this function should not be called within any other
|
||||||
|
* function that currently has this mutex locked.
|
||||||
|
*/
|
||||||
|
int TvDeviceSetServiceTableVar(
|
||||||
|
/*! [in] The service number (TV_SERVICE_CONTROL or TV_SERVICE_PICTURE). */
|
||||||
|
unsigned int service,
|
||||||
|
/*! [in] The variable number (TV_CONTROL_POWER, TV_CONTROL_CHANNEL,
|
||||||
|
* TV_CONTROL_VOLUME, TV_PICTURE_COLOR, TV_PICTURE_TINT,
|
||||||
|
* TV_PICTURE_CONTRAST, or TV_PICTURE_BRIGHTNESS). */
|
||||||
|
int variable,
|
||||||
|
/*! [in] The string representation of the new value. */
|
||||||
|
char *value);
|
||||||
|
|
||||||
|
/* Control Service Actions */
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Turn the power on.
|
||||||
|
*/
|
||||||
|
int TvDevicePowerOn(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Turn the power off.
|
||||||
|
*/
|
||||||
|
int TvDevicePowerOff(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Change the channel, update the TvDevice control service
|
||||||
|
* state table, and notify all subscribed control points of the
|
||||||
|
* updated state.
|
||||||
|
*/
|
||||||
|
int TvDeviceSetChannel(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Increase the channel.
|
||||||
|
*/
|
||||||
|
int TvDeviceIncreaseChannel(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Decrease the channel.
|
||||||
|
*/
|
||||||
|
int TvDeviceDecreaseChannel(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Change the volume, update the TvDevice control service
|
||||||
|
* state table, and notify all subscribed control points of the
|
||||||
|
* updated state.
|
||||||
|
*/
|
||||||
|
int TvDeviceSetVolume(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Increase the volume.
|
||||||
|
*/
|
||||||
|
int TvDeviceIncreaseVolume(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Decrease the volume.
|
||||||
|
*/
|
||||||
|
int TvDeviceDecreaseVolume(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*Picture Service Actions */
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Change the color, update the TvDevice picture service
|
||||||
|
* state table, and notify all subscribed control points of the
|
||||||
|
* updated state.
|
||||||
|
*/
|
||||||
|
int TvDeviceSetColor(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Increase the color.
|
||||||
|
*/
|
||||||
|
int TvDeviceIncreaseColor(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Decrease the color.
|
||||||
|
*/
|
||||||
|
int TvDeviceDecreaseColor(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Change the tint, update the TvDevice picture service
|
||||||
|
* state table, and notify all subscribed control points of the
|
||||||
|
* updated state.
|
||||||
|
*/
|
||||||
|
int TvDeviceSetTint(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Increase tint.
|
||||||
|
*/
|
||||||
|
int TvDeviceIncreaseTint(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Decrease tint.
|
||||||
|
*/
|
||||||
|
int TvDeviceDecreaseTint(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Change the contrast, update the TvDevice picture service
|
||||||
|
* state table, and notify all subscribed control points of the
|
||||||
|
* updated state.
|
||||||
|
*/
|
||||||
|
int TvDeviceSetContrast(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Increase the contrast.
|
||||||
|
*/
|
||||||
|
int TvDeviceIncreaseContrast(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Decrease the contrast.
|
||||||
|
*/
|
||||||
|
int TvDeviceDecreaseContrast(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Change the brightness, update the TvDevice picture service
|
||||||
|
* state table, and notify all subscribed control points of the
|
||||||
|
* updated state.
|
||||||
|
*/
|
||||||
|
int TvDeviceSetBrightness(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Increase brightnesss.
|
||||||
|
*/
|
||||||
|
int TvDeviceIncreaseBrightness(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Decrease brightnesss.
|
||||||
|
*/
|
||||||
|
int TvDeviceDecreaseBrightness(
|
||||||
|
/*! [in] Document of action request. */
|
||||||
|
IXML_Document *in,
|
||||||
|
/*! [in] Action result. */
|
||||||
|
IXML_Document **out,
|
||||||
|
/*! [out] ErrorString in case action was unsuccessful. */
|
||||||
|
const char **errorString);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes the UPnP Sdk, registers the device, and sends out
|
||||||
|
* advertisements.
|
||||||
|
*/
|
||||||
|
int TvDeviceStart(
|
||||||
|
/*! [in] ip address to initialize the sdk (may be NULL)
|
||||||
|
* if null, then the first non null loopback address is used. */
|
||||||
|
char *ip_address,
|
||||||
|
/*! [in] port number to initialize the sdk (may be 0)
|
||||||
|
* if zero, then a random number is used. */
|
||||||
|
unsigned short port,
|
||||||
|
/*! [in] name of description document.
|
||||||
|
* may be NULL. Default is tvdevicedesc.xml. */
|
||||||
|
const char *desc_doc_name,
|
||||||
|
/*! [in] path of web directory.
|
||||||
|
* may be NULL. Default is ./web (for Linux) or ../tvdevice/web. */
|
||||||
|
const char *web_dir_path,
|
||||||
|
/*! [in] print function to use. */
|
||||||
|
print_string pfun,
|
||||||
|
/*! [in] Non-zero if called from the combo application. */
|
||||||
|
int combo);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Stops the device. Uninitializes the sdk.
|
||||||
|
*/
|
||||||
|
int TvDeviceStop(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Function that receives commands from the user at the command prompt
|
||||||
|
* during the lifetime of the device, and calls the appropriate
|
||||||
|
* functions for those commands. Only one command, exit, is currently
|
||||||
|
* defined.
|
||||||
|
*/
|
||||||
|
void *TvDeviceCommandLoop(void *args);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Main entry point for tv device application.
|
||||||
|
*
|
||||||
|
* Initializes and registers with the sdk.
|
||||||
|
* Initializes the state stables of the service.
|
||||||
|
* Starts the command loop.
|
||||||
|
*
|
||||||
|
* Accepts the following optional arguments:
|
||||||
|
* \li \c -ip ipaddress
|
||||||
|
* \li \c -port port
|
||||||
|
* \li \c -desc desc_doc_name
|
||||||
|
* \li \c -webdir web_dir_path
|
||||||
|
* \li \c -help
|
||||||
|
*/
|
||||||
|
int device_main(int argc, char *argv[]);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
72
upnp/sample/linux/tv_combo_main.c
Normal file
72
upnp/sample/linux/tv_combo_main.c
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* 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 "sample_util.h"
|
||||||
|
#include "tv_ctrlpt.h"
|
||||||
|
#include "tv_device.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
ithread_t cmdloop_thread;
|
||||||
|
#ifdef WIN32
|
||||||
|
#else
|
||||||
|
int sig;
|
||||||
|
sigset_t sigs_to_catch;
|
||||||
|
#endif
|
||||||
|
int code;
|
||||||
|
|
||||||
|
device_main(argc, argv);
|
||||||
|
rc = TvCtrlPointStart(linux_print, NULL, 1);
|
||||||
|
if (rc != TV_SUCCESS) {
|
||||||
|
SampleUtil_Print("Error starting UPnP TV Control Point\n");
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
/* start a command loop thread */
|
||||||
|
code = ithread_create(&cmdloop_thread, NULL, TvCtrlPointCommandLoop, NULL);
|
||||||
|
#ifdef WIN32
|
||||||
|
ithread_join(cmdloop_thread, NULL);
|
||||||
|
#else
|
||||||
|
/* Catch Ctrl-C and properly shutdown */
|
||||||
|
sigemptyset(&sigs_to_catch);
|
||||||
|
sigaddset(&sigs_to_catch, SIGINT);
|
||||||
|
sigwait(&sigs_to_catch, &sig);
|
||||||
|
SampleUtil_Print("Shutting down on signal %d...\n", sig);
|
||||||
|
#endif
|
||||||
|
TvDeviceStop();
|
||||||
|
rc = TvCtrlPointStop();
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
72
upnp/sample/linux/tv_ctrlpt_main.c
Normal file
72
upnp/sample/linux/tv_ctrlpt_main.c
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* 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 "sample_util.h"
|
||||||
|
#include "tv_ctrlpt.h"
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
ithread_t cmdloop_thread;
|
||||||
|
#ifdef WIN32
|
||||||
|
#else
|
||||||
|
int sig;
|
||||||
|
sigset_t sigs_to_catch;
|
||||||
|
#endif
|
||||||
|
int code;
|
||||||
|
|
||||||
|
rc = TvCtrlPointStart(linux_print, NULL, 0);
|
||||||
|
if (rc != TV_SUCCESS) {
|
||||||
|
SampleUtil_Print("Error starting UPnP TV Control Point\n");
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
/* start a command loop thread */
|
||||||
|
code = ithread_create(&cmdloop_thread, NULL, TvCtrlPointCommandLoop, NULL);
|
||||||
|
#ifdef WIN32
|
||||||
|
ithread_join(cmdloop_thread, NULL);
|
||||||
|
#else
|
||||||
|
/* Catch Ctrl-C and properly shutdown */
|
||||||
|
sigemptyset(&sigs_to_catch);
|
||||||
|
sigaddset(&sigs_to_catch, SIGINT);
|
||||||
|
sigwait(&sigs_to_catch, &sig);
|
||||||
|
SampleUtil_Print("Shutting down on signal %d...\n", sig);
|
||||||
|
#endif
|
||||||
|
rc = TvCtrlPointStop();
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
argc = argc;
|
||||||
|
argv = argv;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -6,12 +6,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.
|
||||||
*
|
*
|
||||||
@@ -29,38 +29,37 @@
|
|||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "sample_util.h"
|
||||||
|
#include "tv_device.h"
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#define EXPORT
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
#ifdef __cplusplus
|
int rc;
|
||||||
extern "C" {
|
ithread_t cmdloop_thread;
|
||||||
#endif
|
#ifdef WIN32
|
||||||
|
|
||||||
/**
|
|
||||||
* 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
|
#else
|
||||||
;
|
int sig;
|
||||||
|
sigset_t sigs_to_catch;
|
||||||
#endif
|
#endif
|
||||||
|
int code;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
device_main(argc, argv);
|
||||||
}
|
/* 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 */
|
||||||
|
sigemptyset(&sigs_to_catch);
|
||||||
|
sigaddset(&sigs_to_catch, SIGINT);
|
||||||
|
sigwait(&sigs_to_catch, &sig);
|
||||||
|
SampleUtil_Print("Shutting down on signal %d...\n", sig);
|
||||||
#endif
|
#endif
|
||||||
|
rc = TvDeviceStop();
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,489 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 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 "sample_util.h"
|
|
||||||
#include "upnp_tv_ctrlpt.h"
|
|
||||||
#include "upnp_tv_device.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
Tags for valid commands issued at the command prompt
|
|
||||||
*/
|
|
||||||
enum cmdloop_tvcmds {
|
|
||||||
PRTHELP = 0, PRTFULLHELP, POWON, POWOFF,
|
|
||||||
SETCHAN, SETVOL, SETCOL, SETTINT, SETCONT, SETBRT,
|
|
||||||
CTRLACTION, PICTACTION, CTRLGETVAR, PICTGETVAR,
|
|
||||||
PRTDEV, LSTDEV, REFRESH, EXITCMD
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
Data structure for parsing commands from the command line
|
|
||||||
*/
|
|
||||||
struct cmdloop_commands {
|
|
||||||
char *str; // the string
|
|
||||||
int cmdnum; // the command
|
|
||||||
int numargs; // the number of arguments
|
|
||||||
char *args; // the args
|
|
||||||
} cmdloop_commands;
|
|
||||||
|
|
||||||
/*
|
|
||||||
Mappings between command text names, command tag,
|
|
||||||
and required command arguments for command line
|
|
||||||
commands
|
|
||||||
*/
|
|
||||||
static struct cmdloop_commands cmdloop_cmdlist[] = {
|
|
||||||
{"Help", PRTHELP, 1, ""},
|
|
||||||
{"HelpFull", PRTFULLHELP, 1, ""},
|
|
||||||
{"ListDev", LSTDEV, 1, ""},
|
|
||||||
{"Refresh", REFRESH, 1, ""},
|
|
||||||
{"PrintDev", PRTDEV, 2, "<devnum>"},
|
|
||||||
{"PowerOn", POWON, 2, "<devnum>"},
|
|
||||||
{"PowerOff", POWOFF, 2, "<devnum>"},
|
|
||||||
{"SetChannel", SETCHAN, 3, "<devnum> <channel (int)>"},
|
|
||||||
{"SetVolume", SETVOL, 3, "<devnum> <volume (int)>"},
|
|
||||||
{"SetColor", SETCOL, 3, "<devnum> <color (int)>"},
|
|
||||||
{"SetTint", SETTINT, 3, "<devnum> <tint (int)>"},
|
|
||||||
{"SetContrast", SETCONT, 3, "<devnum> <contrast (int)>"},
|
|
||||||
{"SetBrightness", SETBRT, 3, "<devnum> <brightness (int)>"},
|
|
||||||
{"CtrlAction", CTRLACTION, 2, "<devnum> <action (string)>"},
|
|
||||||
{"PictAction", PICTACTION, 2, "<devnum> <action (string)>"},
|
|
||||||
{"CtrlGetVar", CTRLGETVAR, 2, "<devnum> <varname (string)>"},
|
|
||||||
{"PictGetVar", PICTGETVAR, 2, "<devnum> <varname (string)>"},
|
|
||||||
{"Exit", EXITCMD, 1, ""}
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
linux_print( const char *string )
|
|
||||||
{
|
|
||||||
puts( string );
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* TvCtrlPointPrintHelp
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Print help info for this application.
|
|
||||||
********************************************************************************/
|
|
||||||
void
|
|
||||||
TvCtrlPointPrintShortHelp( void )
|
|
||||||
{
|
|
||||||
SampleUtil_Print( "Commands:" );
|
|
||||||
SampleUtil_Print( " Help" );
|
|
||||||
SampleUtil_Print( " HelpFull" );
|
|
||||||
SampleUtil_Print( " ListDev" );
|
|
||||||
SampleUtil_Print( " Refresh" );
|
|
||||||
SampleUtil_Print( " PrintDev <devnum>" );
|
|
||||||
SampleUtil_Print( " PowerOn <devnum>" );
|
|
||||||
SampleUtil_Print( " PowerOff <devnum>" );
|
|
||||||
SampleUtil_Print( " SetChannel <devnum> <channel>" );
|
|
||||||
SampleUtil_Print( " SetVolume <devnum> <volume>" );
|
|
||||||
SampleUtil_Print( " SetColor <devnum> <color>" );
|
|
||||||
SampleUtil_Print( " SetTint <devnum> <tint>" );
|
|
||||||
SampleUtil_Print( " SetContrast <devnum> <contrast>" );
|
|
||||||
SampleUtil_Print( " SetBrightness <devnum> <brightness>" );
|
|
||||||
SampleUtil_Print( " CtrlAction <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " PictAction <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " CtrlGetVar <devnum> <varname>" );
|
|
||||||
SampleUtil_Print( " PictGetVar <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " Exit" );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TvCtrlPointPrintLongHelp( void )
|
|
||||||
{
|
|
||||||
SampleUtil_Print( "" );
|
|
||||||
SampleUtil_Print( "******************************" );
|
|
||||||
SampleUtil_Print( "* TV Control Point Help Info *" );
|
|
||||||
SampleUtil_Print( "******************************" );
|
|
||||||
SampleUtil_Print( "" );
|
|
||||||
SampleUtil_Print( "This sample control point application automatically searches" );
|
|
||||||
SampleUtil_Print( "for and subscribes to the services of television device emulator" );
|
|
||||||
SampleUtil_Print( "devices. While registers a tv device itself." );
|
|
||||||
SampleUtil_Print( "" );
|
|
||||||
SampleUtil_Print( "Commands:" );
|
|
||||||
SampleUtil_Print( " Help" );
|
|
||||||
SampleUtil_Print( " Print this help info." );
|
|
||||||
SampleUtil_Print( " ListDev" );
|
|
||||||
SampleUtil_Print( " Print the current list of TV Device Emulators that this" );
|
|
||||||
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( " Refresh" );
|
|
||||||
SampleUtil_Print( " 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( " 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( " PowerOn <devnum>" );
|
|
||||||
SampleUtil_Print( " Sends the PowerOn action to the Control Service of" );
|
|
||||||
SampleUtil_Print( " device <devnum>." );
|
|
||||||
SampleUtil_Print( " PowerOff <devnum>" );
|
|
||||||
SampleUtil_Print( " Sends the PowerOff action to the Control Service of" );
|
|
||||||
SampleUtil_Print( " device <devnum>." );
|
|
||||||
SampleUtil_Print( " SetChannel <devnum> <channel>" );
|
|
||||||
SampleUtil_Print( " 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( " SetVolume <devnum> <volume>" );
|
|
||||||
SampleUtil_Print( " 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( " SetColor <devnum> <color>" );
|
|
||||||
SampleUtil_Print( " 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( " SetTint <devnum> <tint>" );
|
|
||||||
SampleUtil_Print( " 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( " SetContrast <devnum> <contrast>" );
|
|
||||||
SampleUtil_Print( " 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( " SetBrightness <devnum> <brightness>" );
|
|
||||||
SampleUtil_Print( " 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( " CtrlAction <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " Sends an action request specified by the string <action>" );
|
|
||||||
SampleUtil_Print( " 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( " Sends an action request specified by the string <action>" );
|
|
||||||
SampleUtil_Print( " 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( " 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( " PictGetVar <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " 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( " Exit" );
|
|
||||||
SampleUtil_Print( " Exits the control point application." );
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* TvCtrlPointPrintCommands
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Print the list of valid command line commands to the user
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
void
|
|
||||||
TvCtrlPointPrintCommands()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands );
|
|
||||||
|
|
||||||
SampleUtil_Print( "Valid Commands:" );
|
|
||||||
for( i = 0; i < numofcmds; i++ ) {
|
|
||||||
SampleUtil_Print( " %-14s %s", cmdloop_cmdlist[i].str,
|
|
||||||
cmdloop_cmdlist[i].args );
|
|
||||||
}
|
|
||||||
SampleUtil_Print( "" );
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* TvCtrlPointCommandLoop
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Function that receives commands from the user at the command prompt
|
|
||||||
* during the lifetime of the control point, and calls the appropriate
|
|
||||||
* functions for those commands.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
void *
|
|
||||||
TvCtrlPointCommandLoop( void *args )
|
|
||||||
{
|
|
||||||
char cmdline[100];
|
|
||||||
|
|
||||||
while( 1 ) {
|
|
||||||
SampleUtil_Print( "\n>> " );
|
|
||||||
fgets( cmdline, 100, stdin );
|
|
||||||
TvCtrlPointProcessCommand( cmdline );
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
TvCtrlPointProcessCommand( char *cmdline )
|
|
||||||
{
|
|
||||||
char cmd[100];
|
|
||||||
char strarg[100];
|
|
||||||
int arg_val_err = -99999;
|
|
||||||
int arg1 = arg_val_err;
|
|
||||||
int arg2 = arg_val_err;
|
|
||||||
int cmdnum = -1;
|
|
||||||
int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands );
|
|
||||||
int cmdfound = 0;
|
|
||||||
int i,
|
|
||||||
rc;
|
|
||||||
int invalidargs = 0;
|
|
||||||
int validargs;
|
|
||||||
|
|
||||||
validargs = sscanf( cmdline, "%s %d %d", cmd, &arg1, &arg2 );
|
|
||||||
|
|
||||||
for( i = 0; i < numofcmds; i++ ) {
|
|
||||||
if( strcasecmp( cmd, cmdloop_cmdlist[i].str ) == 0 ) {
|
|
||||||
cmdnum = cmdloop_cmdlist[i].cmdnum;
|
|
||||||
cmdfound++;
|
|
||||||
if( validargs != cmdloop_cmdlist[i].numargs )
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !cmdfound ) {
|
|
||||||
SampleUtil_Print( "Command not found; try 'Help'" );
|
|
||||||
return TV_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( invalidargs ) {
|
|
||||||
SampleUtil_Print( "Invalid arguments; try 'Help'" );
|
|
||||||
return TV_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ( cmdnum ) {
|
|
||||||
case PRTHELP:
|
|
||||||
TvCtrlPointPrintShortHelp();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PRTFULLHELP:
|
|
||||||
TvCtrlPointPrintLongHelp();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POWON:
|
|
||||||
TvCtrlPointSendPowerOn( arg1 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POWOFF:
|
|
||||||
TvCtrlPointSendPowerOff( arg1 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETCHAN:
|
|
||||||
TvCtrlPointSendSetChannel( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETVOL:
|
|
||||||
TvCtrlPointSendSetVolume( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETCOL:
|
|
||||||
TvCtrlPointSendSetColor( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETTINT:
|
|
||||||
TvCtrlPointSendSetTint( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETCONT:
|
|
||||||
TvCtrlPointSendSetContrast( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETBRT:
|
|
||||||
TvCtrlPointSendSetBrightness( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CTRLACTION:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointSendAction( TV_SERVICE_CONTROL, arg1, strarg,
|
|
||||||
NULL, NULL, 0 );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PICTACTION:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointSendAction( TV_SERVICE_PICTURE, arg1, strarg,
|
|
||||||
NULL, NULL, 0 );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CTRLGETVAR:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointGetVar( TV_SERVICE_CONTROL, arg1, strarg );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PICTGETVAR:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointGetVar( TV_SERVICE_PICTURE, arg1, strarg );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PRTDEV:
|
|
||||||
TvCtrlPointPrintDevice( arg1 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LSTDEV:
|
|
||||||
TvCtrlPointPrintList();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case REFRESH:
|
|
||||||
TvCtrlPointRefresh();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EXITCMD:
|
|
||||||
rc = TvCtrlPointStop();
|
|
||||||
exit( rc );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
SampleUtil_Print( "Command not implemented; see 'Help'" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( invalidargs )
|
|
||||||
SampleUtil_Print( "Invalid args in command; see 'Help'" );
|
|
||||||
|
|
||||||
return TV_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
device_main( int argc, char **argv )
|
|
||||||
{
|
|
||||||
|
|
||||||
unsigned int portTemp = 0;
|
|
||||||
char *ip_address = NULL,
|
|
||||||
*desc_doc_name = NULL,
|
|
||||||
*web_dir_path = NULL;
|
|
||||||
unsigned int port = 0;
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
SampleUtil_Initialize( linux_print );
|
|
||||||
|
|
||||||
// Parse options
|
|
||||||
for( i = 1; i < argc; i++ ) {
|
|
||||||
if( strcmp( argv[i], "-ip" ) == 0 ) {
|
|
||||||
ip_address = argv[++i];
|
|
||||||
} else if( strcmp( argv[i], "-port" ) == 0 ) {
|
|
||||||
sscanf( argv[++i], "%u", &portTemp );
|
|
||||||
} else if( strcmp( argv[i], "-desc" ) == 0 ) {
|
|
||||||
desc_doc_name = argv[++i];
|
|
||||||
} else if( strcmp( argv[i], "-webdir" ) == 0 ) {
|
|
||||||
web_dir_path = argv[++i];
|
|
||||||
} else if( strcmp( argv[i], "-help" ) == 0 ) {
|
|
||||||
SampleUtil_Print( "Usage: %s -ip ipaddress -port port"
|
|
||||||
" -desc desc_doc_name -webdir web_dir_path"
|
|
||||||
" -help (this message)\n", argv[0] );
|
|
||||||
SampleUtil_Print( "\tipaddress: IP address of the device"
|
|
||||||
" (must match desc. doc)\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: 192.168.0.4\n" );
|
|
||||||
SampleUtil_Print( "\tport: Port number to use for "
|
|
||||||
"receiving UPnP messages (must match desc. doc)\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: 5431\n" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( "\tdesc_doc_name: name of device description document\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: tvcombodesc.xml\n" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( "\tweb_dir_path: Filesystem path where web files "
|
|
||||||
"related to the device are stored\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: /upnp/sample/web\n" );
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
port = ( unsigned short )portTemp;
|
|
||||||
|
|
||||||
return TvDeviceStart(
|
|
||||||
ip_address, port, desc_doc_name, web_dir_path, linux_print );
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main( int argc, char **argv )
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
ithread_t cmdloop_thread;
|
|
||||||
int sig;
|
|
||||||
sigset_t sigs_to_catch;
|
|
||||||
int code;
|
|
||||||
|
|
||||||
device_main(argc, argv);
|
|
||||||
rc = TvCtrlPointStart( linux_print, NULL );
|
|
||||||
if( rc != TV_SUCCESS ) {
|
|
||||||
SampleUtil_Print( "Error starting UPnP TV Control Point" );
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
// start a command loop thread
|
|
||||||
code =
|
|
||||||
ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop,
|
|
||||||
NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Catch Ctrl-C and properly shutdown
|
|
||||||
*/
|
|
||||||
sigemptyset( &sigs_to_catch );
|
|
||||||
sigaddset( &sigs_to_catch, SIGINT );
|
|
||||||
sigwait( &sigs_to_catch, &sig );
|
|
||||||
|
|
||||||
SampleUtil_Print( "Shutting down on signal %d...", sig );
|
|
||||||
TvDeviceStop();
|
|
||||||
rc = TvCtrlPointStop();
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,158 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef UPNP_TV_CTRLPT_H
|
|
||||||
#define UPNP_TV_CTRLPT_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "ithread.h"
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "upnp.h"
|
|
||||||
#include "upnptools.h"
|
|
||||||
#include "sample_util.h"
|
|
||||||
|
|
||||||
#define TV_SERVICE_SERVCOUNT 2
|
|
||||||
#define TV_SERVICE_CONTROL 0
|
|
||||||
#define TV_SERVICE_PICTURE 1
|
|
||||||
|
|
||||||
#define TV_CONTROL_VARCOUNT 3
|
|
||||||
#define TV_CONTROL_POWER 0
|
|
||||||
#define TV_CONTROL_CHANNEL 1
|
|
||||||
#define TV_CONTROL_VOLUME 2
|
|
||||||
|
|
||||||
#define TV_PICTURE_VARCOUNT 4
|
|
||||||
#define TV_PICTURE_COLOR 0
|
|
||||||
#define TV_PICTURE_TINT 1
|
|
||||||
#define TV_PICTURE_CONTRAST 2
|
|
||||||
#define TV_PICTURE_BRIGHTNESS 3
|
|
||||||
|
|
||||||
#define TV_MAX_VAL_LEN 5
|
|
||||||
|
|
||||||
#define TV_SUCCESS 0
|
|
||||||
#define TV_ERROR (-1)
|
|
||||||
#define TV_WARNING 1
|
|
||||||
|
|
||||||
/* This should be the maximum VARCOUNT from above */
|
|
||||||
#define TV_MAXVARS TV_PICTURE_VARCOUNT
|
|
||||||
|
|
||||||
extern char TvDeviceType[];
|
|
||||||
extern char *TvServiceType[];
|
|
||||||
extern char *TvServiceName[];
|
|
||||||
extern char *TvVarName[TV_SERVICE_SERVCOUNT][TV_MAXVARS];
|
|
||||||
extern char TvVarCount[];
|
|
||||||
|
|
||||||
struct tv_service {
|
|
||||||
char ServiceId[NAME_SIZE];
|
|
||||||
char ServiceType[NAME_SIZE];
|
|
||||||
char *VariableStrVal[TV_MAXVARS];
|
|
||||||
char EventURL[NAME_SIZE];
|
|
||||||
char ControlURL[NAME_SIZE];
|
|
||||||
char SID[NAME_SIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct TvDeviceNode *GlobalDeviceList;
|
|
||||||
|
|
||||||
struct TvDevice {
|
|
||||||
char UDN[250];
|
|
||||||
char DescDocURL[250];
|
|
||||||
char FriendlyName[250];
|
|
||||||
char PresURL[250];
|
|
||||||
int AdvrTimeOut;
|
|
||||||
struct tv_service TvService[TV_SERVICE_SERVCOUNT];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TvDeviceNode {
|
|
||||||
struct TvDevice device;
|
|
||||||
struct TvDeviceNode *next;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern ithread_mutex_t DeviceListMutex;
|
|
||||||
|
|
||||||
extern UpnpClient_Handle ctrlpt_handle;
|
|
||||||
|
|
||||||
void TvCtrlPointPrintHelp( void );
|
|
||||||
int TvCtrlPointDeleteNode(struct TvDeviceNode*);
|
|
||||||
int TvCtrlPointRemoveDevice(char*);
|
|
||||||
int TvCtrlPointRemoveAll( void );
|
|
||||||
int TvCtrlPointRefresh( void );
|
|
||||||
|
|
||||||
|
|
||||||
int TvCtrlPointSendAction(int, int, char *, char **, char **, int);
|
|
||||||
int TvCtrlPointSendActionNumericArg(int devnum, int service, char *actionName, char *paramName, int paramValue);
|
|
||||||
int TvCtrlPointSendPowerOn(int devnum);
|
|
||||||
int TvCtrlPointSendPowerOff(int devnum);
|
|
||||||
int TvCtrlPointSendSetChannel(int, int);
|
|
||||||
int TvCtrlPointSendSetVolume(int, int);
|
|
||||||
int TvCtrlPointSendSetColor(int, int);
|
|
||||||
int TvCtrlPointSendSetTint(int, int);
|
|
||||||
int TvCtrlPointSendSetContrast(int, int);
|
|
||||||
int TvCtrlPointSendSetBrightness(int, int);
|
|
||||||
|
|
||||||
int TvCtrlPointGetVar(int, int, char*);
|
|
||||||
int TvCtrlPointGetPower(int devnum);
|
|
||||||
int TvCtrlPointGetChannel(int);
|
|
||||||
int TvCtrlPointGetVolume(int);
|
|
||||||
int TvCtrlPointGetColor(int);
|
|
||||||
int TvCtrlPointGetTint(int);
|
|
||||||
int TvCtrlPointGetContrast(int);
|
|
||||||
int TvCtrlPointGetBrightness(int);
|
|
||||||
|
|
||||||
int TvCtrlPointGetDevice(int, struct TvDeviceNode **);
|
|
||||||
int TvCtrlPointPrintList( void );
|
|
||||||
int TvCtrlPointPrintDevice(int);
|
|
||||||
void TvCtrlPointAddDevice (IXML_Document *, char *, int);
|
|
||||||
void TvCtrlPointHandleGetVar(char *,char *,DOMString);
|
|
||||||
void TvStateUpdate(char*,int, IXML_Document * , char **);
|
|
||||||
void TvCtrlPointHandleEvent(Upnp_SID, int, IXML_Document *);
|
|
||||||
void TvCtrlPointHandleSubscribeUpdate(char *, Upnp_SID, int);
|
|
||||||
int TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *);
|
|
||||||
void TvCtrlPointVerifyTimeouts(int);
|
|
||||||
void TvCtrlPointPrintCommands( void );
|
|
||||||
void* TvCtrlPointCommandLoop( void* );
|
|
||||||
int TvCtrlPointStart( print_string printFunctionPtr, state_update updateFunctionPtr );
|
|
||||||
int TvCtrlPointStop( void );
|
|
||||||
int TvCtrlPointProcessCommand( char *cmdline );
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif //UPNP_TV_CTRLPT_H
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,638 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef UPNP_TV_DEVICE_H
|
|
||||||
#define UPNP_TV_DEVICE_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "ithread.h"
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "upnp.h"
|
|
||||||
#include "sample_util.h"
|
|
||||||
|
|
||||||
//Color constants
|
|
||||||
#define MAX_COLOR 10
|
|
||||||
#define MIN_COLOR 1
|
|
||||||
|
|
||||||
//Brightness constants
|
|
||||||
#define MAX_BRIGHTNESS 10
|
|
||||||
#define MIN_BRIGHTNESS 1
|
|
||||||
|
|
||||||
//Power constants
|
|
||||||
#define POWER_ON 1
|
|
||||||
#define POWER_OFF 0
|
|
||||||
|
|
||||||
//Tint constants
|
|
||||||
#define MAX_TINT 10
|
|
||||||
#define MIN_TINT 1
|
|
||||||
|
|
||||||
//Volume constants
|
|
||||||
#define MAX_VOLUME 10
|
|
||||||
#define MIN_VOLUME 1
|
|
||||||
|
|
||||||
//Contrast constants
|
|
||||||
#define MAX_CONTRAST 10
|
|
||||||
#define MIN_CONTRAST 1
|
|
||||||
|
|
||||||
//Channel constants
|
|
||||||
#define MAX_CHANNEL 100
|
|
||||||
#define MIN_CHANNEL 1
|
|
||||||
|
|
||||||
//Number of services.
|
|
||||||
#define TV_SERVICE_SERVCOUNT 2
|
|
||||||
|
|
||||||
//Index of control service
|
|
||||||
#define TV_SERVICE_CONTROL 0
|
|
||||||
|
|
||||||
//Index of picture service
|
|
||||||
#define TV_SERVICE_PICTURE 1
|
|
||||||
|
|
||||||
//Number of control variables
|
|
||||||
#define TV_CONTROL_VARCOUNT 3
|
|
||||||
|
|
||||||
//Index of power variable
|
|
||||||
#define TV_CONTROL_POWER 0
|
|
||||||
|
|
||||||
//Index of channel variable
|
|
||||||
#define TV_CONTROL_CHANNEL 1
|
|
||||||
|
|
||||||
//Index of volume variable
|
|
||||||
#define TV_CONTROL_VOLUME 2
|
|
||||||
|
|
||||||
//Number of picture variables
|
|
||||||
#define TV_PICTURE_VARCOUNT 4
|
|
||||||
|
|
||||||
//Index of color variable
|
|
||||||
#define TV_PICTURE_COLOR 0
|
|
||||||
|
|
||||||
//Index of tint variable
|
|
||||||
#define TV_PICTURE_TINT 1
|
|
||||||
|
|
||||||
//Index of contrast variable
|
|
||||||
#define TV_PICTURE_CONTRAST 2
|
|
||||||
|
|
||||||
//Index of brightness variable
|
|
||||||
#define TV_PICTURE_BRIGHTNESS 3
|
|
||||||
|
|
||||||
//Max value length
|
|
||||||
#define TV_MAX_VAL_LEN 5
|
|
||||||
|
|
||||||
//Max actions
|
|
||||||
#define TV_MAXACTIONS 12
|
|
||||||
|
|
||||||
/* This should be the maximum VARCOUNT from above */
|
|
||||||
#define TV_MAXVARS TV_PICTURE_VARCOUNT
|
|
||||||
|
|
||||||
|
|
||||||
extern char TvDeviceType[];
|
|
||||||
|
|
||||||
extern char *TvServiceType[];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* upnp_action
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Prototype for all actions. For each action that a service
|
|
||||||
* implements, there is a corresponding function with this prototype.
|
|
||||||
* Pointers to these functions, along with action names, are stored
|
|
||||||
* in the service table. When an action request comes in the action
|
|
||||||
* name is matched, and the appropriate function is called.
|
|
||||||
* Each function returns UPNP_E_SUCCESS, on success, and a nonzero
|
|
||||||
* error code on failure.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * request - document of action request
|
|
||||||
* IXML_Document **out - action result
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
typedef int (*upnp_action) (IXML_Document *request, IXML_Document **out,
|
|
||||||
char **errorString);
|
|
||||||
|
|
||||||
/* Structure for storing Tv Service
|
|
||||||
identifiers and state table */
|
|
||||||
struct TvService {
|
|
||||||
|
|
||||||
char UDN[NAME_SIZE]; /* Universally Unique Device Name */
|
|
||||||
char ServiceId[NAME_SIZE];
|
|
||||||
char ServiceType[NAME_SIZE];
|
|
||||||
char *VariableName[TV_MAXVARS];
|
|
||||||
char *VariableStrVal[TV_MAXVARS];
|
|
||||||
char *ActionNames[TV_MAXACTIONS];
|
|
||||||
upnp_action actions[TV_MAXACTIONS];
|
|
||||||
unsigned int VariableCount;
|
|
||||||
};
|
|
||||||
|
|
||||||
//Array of service structures
|
|
||||||
extern struct TvService tv_service_table[];
|
|
||||||
|
|
||||||
//Device handle returned from sdk
|
|
||||||
extern UpnpDevice_Handle device_handle;
|
|
||||||
|
|
||||||
|
|
||||||
/* Mutex for protecting the global state table data
|
|
||||||
in a multi-threaded, asynchronous environment.
|
|
||||||
All functions should lock this mutex before reading
|
|
||||||
or writing the state table data. */
|
|
||||||
extern ithread_mutex_t TVDevMutex;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* SetActionTable
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initializes the action table for the specified service.
|
|
||||||
* Note that
|
|
||||||
* knowledge of the service description is
|
|
||||||
* assumed. Action names are hardcoded.
|
|
||||||
* Parameters:
|
|
||||||
* int serviceType - one of TV_SERVICE_CONTROL or, TV_SERVICE_PICTURE
|
|
||||||
* struct TvService *out - service containing action table to set.
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int SetActionTable(int serviceType, struct TvService * out);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceStateTableInit
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initialize the device state table for
|
|
||||||
* this TvDevice, pulling identifier info
|
|
||||||
* from the description Document. Note that
|
|
||||||
* knowledge of the service description is
|
|
||||||
* assumed. State table variables and default
|
|
||||||
* values are currently hardcoded in this file
|
|
||||||
* rather than being read from service description
|
|
||||||
* documents.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* DescDocURL -- The description document URL
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceStateTableInit(char*);
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceHandleSubscriptionRequest
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Called during a subscription request callback. If the
|
|
||||||
* subscription request is for this device and either its
|
|
||||||
* control service or picture service, then accept it.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* sr_event -- The subscription request event structure
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceHandleSubscriptionRequest(struct Upnp_Subscription_Request *);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceHandleGetVarRequest
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Called during a get variable request callback. If the
|
|
||||||
* request is for this device and either its control service
|
|
||||||
* or picture service, then respond with the variable value.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* cgv_event -- The control get variable request event structure
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceHandleGetVarRequest(struct Upnp_State_Var_Request *);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceHandleActionRequest
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Called during an action request callback. If the
|
|
||||||
* request is for this device and either its control service
|
|
||||||
* or picture service, then perform the action and respond.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* ca_event -- The control action request event structure
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceHandleActionRequest(struct Upnp_Action_Request *);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceCallbackEventHandler
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* The callback handler registered with the SDK while registering
|
|
||||||
* root device. Dispatches the request to the appropriate procedure
|
|
||||||
* based on the value of EventType. The four requests handled by the
|
|
||||||
* device are:
|
|
||||||
* 1) Event Subscription requests.
|
|
||||||
* 2) Get Variable requests.
|
|
||||||
* 3) Action requests.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* EventType -- The type of callback event
|
|
||||||
* Event -- Data structure containing event data
|
|
||||||
* Cookie -- Optional data specified during callback registration
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceCallbackEventHandler(Upnp_EventType, void*, void*);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetServiceTableVar
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Update the TvDevice service state table, and notify all subscribed
|
|
||||||
* control points of the updated state. Note that since this function
|
|
||||||
* blocks on the mutex TVDevMutex, to avoid a hang this function should
|
|
||||||
* not be called within any other function that currently has this mutex
|
|
||||||
* locked.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* service -- The service number (TV_SERVICE_CONTROL or TV_SERVICE_PICTURE)
|
|
||||||
* variable -- The variable number (TV_CONTROL_POWER, TV_CONTROL_CHANNEL,
|
|
||||||
* TV_CONTROL_VOLUME, TV_PICTURE_COLOR, TV_PICTURE_TINT,
|
|
||||||
* TV_PICTURE_CONTRAST, or TV_PICTURE_BRIGHTNESS)
|
|
||||||
* value -- The string representation of the new value
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetServiceTableVar(unsigned int, unsigned int, char*);
|
|
||||||
|
|
||||||
//Control Service Actions
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDevicePowerOn
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Turn the power on.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - document of action request
|
|
||||||
* IXML_Document **out - action result
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDevicePowerOff
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Turn the power off.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - document of action request
|
|
||||||
* IXML_Document **out - action result
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetChannel
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the channel, update the TvDevice control service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseChannel
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase the channel.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseChannel
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the channel.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetVolume
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the volume, update the TvDevice control service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseVolume
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase the volume.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseVolume
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the volume.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
|
|
||||||
//Picture Service Actions
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetColor
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the color, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseColor
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase the color.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseColor
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the color.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetTint
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the tint, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseTint
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase tint.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseTint
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease tint.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* TvDeviceSetContrast
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the contrast, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseContrast
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
*
|
|
||||||
* Increase the contrast.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseContrast
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the contrast.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetBrightness
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the brightness, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* brightness -- The brightness value to change to.
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseBrightness
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase brightness.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseBrightness
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease brightnesss.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
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,
|
|
||||||
char *web_dir_path, print_string pfun);
|
|
||||||
int TvDeviceStop();
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,467 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 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 <stdio.h>
|
|
||||||
#include "sample_util.h"
|
|
||||||
#include "upnp_tv_ctrlpt.h"
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
Tags for valid commands issued at the command prompt
|
|
||||||
*/
|
|
||||||
enum cmdloop_tvcmds {
|
|
||||||
PRTHELP = 0, PRTFULLHELP, POWON, POWOFF,
|
|
||||||
SETCHAN, SETVOL, SETCOL, SETTINT, SETCONT, SETBRT,
|
|
||||||
CTRLACTION, PICTACTION, CTRLGETVAR, PICTGETVAR,
|
|
||||||
PRTDEV, LSTDEV, REFRESH, EXITCMD
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
Data structure for parsing commands from the command line
|
|
||||||
*/
|
|
||||||
struct cmdloop_commands {
|
|
||||||
char *str; // the string
|
|
||||||
int cmdnum; // the command
|
|
||||||
int numargs; // the number of arguments
|
|
||||||
char *args; // the args
|
|
||||||
} cmdloop_commands;
|
|
||||||
|
|
||||||
/*
|
|
||||||
Mappings between command text names, command tag,
|
|
||||||
and required command arguments for command line
|
|
||||||
commands
|
|
||||||
*/
|
|
||||||
static struct cmdloop_commands cmdloop_cmdlist[] = {
|
|
||||||
{"Help", PRTHELP, 1, ""},
|
|
||||||
{"HelpFull", PRTFULLHELP, 1, ""},
|
|
||||||
{"ListDev", LSTDEV, 1, ""},
|
|
||||||
{"Refresh", REFRESH, 1, ""},
|
|
||||||
{"PrintDev", PRTDEV, 2, "<devnum>"},
|
|
||||||
{"PowerOn", POWON, 2, "<devnum>"},
|
|
||||||
{"PowerOff", POWOFF, 2, "<devnum>"},
|
|
||||||
{"SetChannel", SETCHAN, 3, "<devnum> <channel (int)>"},
|
|
||||||
{"SetVolume", SETVOL, 3, "<devnum> <volume (int)>"},
|
|
||||||
{"SetColor", SETCOL, 3, "<devnum> <color (int)>"},
|
|
||||||
{"SetTint", SETTINT, 3, "<devnum> <tint (int)>"},
|
|
||||||
{"SetContrast", SETCONT, 3, "<devnum> <contrast (int)>"},
|
|
||||||
{"SetBrightness", SETBRT, 3, "<devnum> <brightness (int)>"},
|
|
||||||
{"CtrlAction", CTRLACTION, 2, "<devnum> <action (string)>"},
|
|
||||||
{"PictAction", PICTACTION, 2, "<devnum> <action (string)>"},
|
|
||||||
{"CtrlGetVar", CTRLGETVAR, 2, "<devnum> <varname (string)>"},
|
|
||||||
{"PictGetVar", PICTGETVAR, 2, "<devnum> <varname (string)>"},
|
|
||||||
{"Exit", EXITCMD, 1, ""}
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
linux_print( const char *string )
|
|
||||||
{
|
|
||||||
puts( string );
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* TvCtrlPointPrintHelp
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Print help info for this application.
|
|
||||||
********************************************************************************/
|
|
||||||
void
|
|
||||||
TvCtrlPointPrintShortHelp( void )
|
|
||||||
{
|
|
||||||
SampleUtil_Print( "Commands:" );
|
|
||||||
SampleUtil_Print( " Help" );
|
|
||||||
SampleUtil_Print( " HelpFull" );
|
|
||||||
SampleUtil_Print( " ListDev" );
|
|
||||||
SampleUtil_Print( " Refresh" );
|
|
||||||
SampleUtil_Print( " PrintDev <devnum>" );
|
|
||||||
SampleUtil_Print( " PowerOn <devnum>" );
|
|
||||||
SampleUtil_Print( " PowerOff <devnum>" );
|
|
||||||
SampleUtil_Print( " SetChannel <devnum> <channel>" );
|
|
||||||
SampleUtil_Print( " SetVolume <devnum> <volume>" );
|
|
||||||
SampleUtil_Print( " SetColor <devnum> <color>" );
|
|
||||||
SampleUtil_Print( " SetTint <devnum> <tint>" );
|
|
||||||
SampleUtil_Print( " SetContrast <devnum> <contrast>" );
|
|
||||||
SampleUtil_Print( " SetBrightness <devnum> <brightness>" );
|
|
||||||
SampleUtil_Print( " CtrlAction <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " PictAction <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " CtrlGetVar <devnum> <varname>" );
|
|
||||||
SampleUtil_Print( " PictGetVar <devnum> <action>" );
|
|
||||||
SampleUtil_Print( " Exit" );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TvCtrlPointPrintLongHelp( void )
|
|
||||||
{
|
|
||||||
SampleUtil_Print( "" );
|
|
||||||
SampleUtil_Print( "******************************" );
|
|
||||||
SampleUtil_Print( "* TV Control Point Help Info *" );
|
|
||||||
SampleUtil_Print( "******************************" );
|
|
||||||
SampleUtil_Print( "" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( "This sample control point application automatically searches" );
|
|
||||||
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( "Commands:" );
|
|
||||||
SampleUtil_Print( " Help" );
|
|
||||||
SampleUtil_Print( " Print this help info." );
|
|
||||||
SampleUtil_Print( " ListDev" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " Print the current list of TV Device Emulators that this" );
|
|
||||||
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( " Refresh" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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
|
|
||||||
( " 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( " PowerOn <devnum>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " Sends the PowerOn action to the Control Service of" );
|
|
||||||
SampleUtil_Print( " device <devnum>." );
|
|
||||||
SampleUtil_Print( " PowerOff <devnum>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " Sends the PowerOff action to the Control Service of" );
|
|
||||||
SampleUtil_Print( " device <devnum>." );
|
|
||||||
SampleUtil_Print( " SetChannel <devnum> <channel>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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( " SetVolume <devnum> <volume>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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( " SetColor <devnum> <color>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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( " SetTint <devnum> <tint>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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( " SetContrast <devnum> <contrast>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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( " SetBrightness <devnum> <brightness>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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( " CtrlAction <devnum> <action>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " Sends an action request specified by the string <action>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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
|
|
||||||
( " Sends an action request specified by the string <action>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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
|
|
||||||
( " 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( " PictGetVar <devnum> <action>" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( " 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( " Exit" );
|
|
||||||
SampleUtil_Print( " Exits the control point application." );
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* TvCtrlPointPrintCommands
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Print the list of valid command line commands to the user
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
void
|
|
||||||
TvCtrlPointPrintCommands( )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands );
|
|
||||||
|
|
||||||
SampleUtil_Print( "Valid Commands:" );
|
|
||||||
for( i = 0; i < numofcmds; i++ ) {
|
|
||||||
SampleUtil_Print( " %-14s %s", cmdloop_cmdlist[i].str,
|
|
||||||
cmdloop_cmdlist[i].args );
|
|
||||||
}
|
|
||||||
SampleUtil_Print( "" );
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
* TvCtrlPointCommandLoop
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Function that receives commands from the user at the command prompt
|
|
||||||
* during the lifetime of the control point, and calls the appropriate
|
|
||||||
* functions for those commands.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
********************************************************************************/
|
|
||||||
void *
|
|
||||||
TvCtrlPointCommandLoop( void *args )
|
|
||||||
{
|
|
||||||
char cmdline[100];
|
|
||||||
|
|
||||||
while( 1 ) {
|
|
||||||
SampleUtil_Print( "\n>> " );
|
|
||||||
fgets( cmdline, 100, stdin );
|
|
||||||
TvCtrlPointProcessCommand( cmdline );
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
TvCtrlPointProcessCommand( char *cmdline )
|
|
||||||
{
|
|
||||||
char cmd[100];
|
|
||||||
char strarg[100];
|
|
||||||
int arg_val_err = -99999;
|
|
||||||
int arg1 = arg_val_err;
|
|
||||||
int arg2 = arg_val_err;
|
|
||||||
int cmdnum = -1;
|
|
||||||
int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands );
|
|
||||||
int cmdfound = 0;
|
|
||||||
int i,
|
|
||||||
rc;
|
|
||||||
int invalidargs = 0;
|
|
||||||
int validargs;
|
|
||||||
|
|
||||||
validargs = sscanf( cmdline, "%s %d %d", cmd, &arg1, &arg2 );
|
|
||||||
|
|
||||||
for( i = 0; i < numofcmds; i++ ) {
|
|
||||||
if( strcasecmp( cmd, cmdloop_cmdlist[i].str ) == 0 ) {
|
|
||||||
cmdnum = cmdloop_cmdlist[i].cmdnum;
|
|
||||||
cmdfound++;
|
|
||||||
if( validargs != cmdloop_cmdlist[i].numargs )
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !cmdfound ) {
|
|
||||||
SampleUtil_Print( "Command not found; try 'Help'" );
|
|
||||||
return TV_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( invalidargs ) {
|
|
||||||
SampleUtil_Print( "Invalid arguments; try 'Help'" );
|
|
||||||
return TV_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ( cmdnum ) {
|
|
||||||
case PRTHELP:
|
|
||||||
TvCtrlPointPrintShortHelp( );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PRTFULLHELP:
|
|
||||||
TvCtrlPointPrintLongHelp( );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POWON:
|
|
||||||
TvCtrlPointSendPowerOn( arg1 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POWOFF:
|
|
||||||
TvCtrlPointSendPowerOff( arg1 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETCHAN:
|
|
||||||
TvCtrlPointSendSetChannel( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETVOL:
|
|
||||||
TvCtrlPointSendSetVolume( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETCOL:
|
|
||||||
TvCtrlPointSendSetColor( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETTINT:
|
|
||||||
TvCtrlPointSendSetTint( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETCONT:
|
|
||||||
TvCtrlPointSendSetContrast( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETBRT:
|
|
||||||
TvCtrlPointSendSetBrightness( arg1, arg2 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CTRLACTION:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointSendAction( TV_SERVICE_CONTROL, arg1, strarg,
|
|
||||||
NULL, NULL, 0 );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PICTACTION:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointSendAction( TV_SERVICE_PICTURE, arg1, strarg,
|
|
||||||
NULL, NULL, 0 );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CTRLGETVAR:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointGetVar( TV_SERVICE_CONTROL, arg1, strarg );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PICTGETVAR:
|
|
||||||
/*
|
|
||||||
re-parse commandline since second arg is string
|
|
||||||
*/
|
|
||||||
validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg );
|
|
||||||
if( 3 == validargs )
|
|
||||||
TvCtrlPointGetVar( TV_SERVICE_PICTURE, arg1, strarg );
|
|
||||||
else
|
|
||||||
invalidargs++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PRTDEV:
|
|
||||||
TvCtrlPointPrintDevice( arg1 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LSTDEV:
|
|
||||||
TvCtrlPointPrintList( );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case REFRESH:
|
|
||||||
TvCtrlPointRefresh( );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EXITCMD:
|
|
||||||
rc = TvCtrlPointStop( );
|
|
||||||
exit( rc );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
SampleUtil_Print( "Command not implemented; see 'Help'" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( invalidargs )
|
|
||||||
SampleUtil_Print( "Invalid args in command; see 'Help'" );
|
|
||||||
|
|
||||||
return TV_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main( int argc,
|
|
||||||
char **argv )
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
ithread_t cmdloop_thread;
|
|
||||||
int sig;
|
|
||||||
sigset_t sigs_to_catch;
|
|
||||||
int code;
|
|
||||||
|
|
||||||
rc = TvCtrlPointStart( linux_print, NULL );
|
|
||||||
if( rc != TV_SUCCESS ) {
|
|
||||||
SampleUtil_Print( "Error starting UPnP TV Control Point" );
|
|
||||||
exit( rc );
|
|
||||||
}
|
|
||||||
// start a command loop thread
|
|
||||||
code =
|
|
||||||
ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop,
|
|
||||||
NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Catch Ctrl-C and properly shutdown
|
|
||||||
*/
|
|
||||||
sigemptyset( &sigs_to_catch );
|
|
||||||
sigaddset( &sigs_to_catch, SIGINT );
|
|
||||||
sigwait( &sigs_to_catch, &sig );
|
|
||||||
|
|
||||||
SampleUtil_Print( "Shutting down on signal %d...", sig );
|
|
||||||
rc = TvCtrlPointStop( );
|
|
||||||
exit( rc );
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,158 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef UPNP_TV_CTRLPT_H
|
|
||||||
#define UPNP_TV_CTRLPT_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "ithread.h"
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "upnp.h"
|
|
||||||
#include "upnptools.h"
|
|
||||||
#include "sample_util.h"
|
|
||||||
|
|
||||||
#define TV_SERVICE_SERVCOUNT 2
|
|
||||||
#define TV_SERVICE_CONTROL 0
|
|
||||||
#define TV_SERVICE_PICTURE 1
|
|
||||||
|
|
||||||
#define TV_CONTROL_VARCOUNT 3
|
|
||||||
#define TV_CONTROL_POWER 0
|
|
||||||
#define TV_CONTROL_CHANNEL 1
|
|
||||||
#define TV_CONTROL_VOLUME 2
|
|
||||||
|
|
||||||
#define TV_PICTURE_VARCOUNT 4
|
|
||||||
#define TV_PICTURE_COLOR 0
|
|
||||||
#define TV_PICTURE_TINT 1
|
|
||||||
#define TV_PICTURE_CONTRAST 2
|
|
||||||
#define TV_PICTURE_BRIGHTNESS 3
|
|
||||||
|
|
||||||
#define TV_MAX_VAL_LEN 5
|
|
||||||
|
|
||||||
#define TV_SUCCESS 0
|
|
||||||
#define TV_ERROR (-1)
|
|
||||||
#define TV_WARNING 1
|
|
||||||
|
|
||||||
/* This should be the maximum VARCOUNT from above */
|
|
||||||
#define TV_MAXVARS TV_PICTURE_VARCOUNT
|
|
||||||
|
|
||||||
extern char TvDeviceType[];
|
|
||||||
extern char *TvServiceType[];
|
|
||||||
extern char *TvServiceName[];
|
|
||||||
extern char *TvVarName[TV_SERVICE_SERVCOUNT][TV_MAXVARS];
|
|
||||||
extern char TvVarCount[];
|
|
||||||
|
|
||||||
struct tv_service {
|
|
||||||
char ServiceId[NAME_SIZE];
|
|
||||||
char ServiceType[NAME_SIZE];
|
|
||||||
char *VariableStrVal[TV_MAXVARS];
|
|
||||||
char EventURL[NAME_SIZE];
|
|
||||||
char ControlURL[NAME_SIZE];
|
|
||||||
char SID[NAME_SIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct TvDeviceNode *GlobalDeviceList;
|
|
||||||
|
|
||||||
struct TvDevice {
|
|
||||||
char UDN[250];
|
|
||||||
char DescDocURL[250];
|
|
||||||
char FriendlyName[250];
|
|
||||||
char PresURL[250];
|
|
||||||
int AdvrTimeOut;
|
|
||||||
struct tv_service TvService[TV_SERVICE_SERVCOUNT];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TvDeviceNode {
|
|
||||||
struct TvDevice device;
|
|
||||||
struct TvDeviceNode *next;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern ithread_mutex_t DeviceListMutex;
|
|
||||||
|
|
||||||
extern UpnpClient_Handle ctrlpt_handle;
|
|
||||||
|
|
||||||
void TvCtrlPointPrintHelp( void );
|
|
||||||
int TvCtrlPointDeleteNode(struct TvDeviceNode*);
|
|
||||||
int TvCtrlPointRemoveDevice(char*);
|
|
||||||
int TvCtrlPointRemoveAll( void );
|
|
||||||
int TvCtrlPointRefresh( void );
|
|
||||||
|
|
||||||
|
|
||||||
int TvCtrlPointSendAction(int, int, char *, char **, char **, int);
|
|
||||||
int TvCtrlPointSendActionNumericArg(int devnum, int service, char *actionName, char *paramName, int paramValue);
|
|
||||||
int TvCtrlPointSendPowerOn(int devnum);
|
|
||||||
int TvCtrlPointSendPowerOff(int devnum);
|
|
||||||
int TvCtrlPointSendSetChannel(int, int);
|
|
||||||
int TvCtrlPointSendSetVolume(int, int);
|
|
||||||
int TvCtrlPointSendSetColor(int, int);
|
|
||||||
int TvCtrlPointSendSetTint(int, int);
|
|
||||||
int TvCtrlPointSendSetContrast(int, int);
|
|
||||||
int TvCtrlPointSendSetBrightness(int, int);
|
|
||||||
|
|
||||||
int TvCtrlPointGetVar(int, int, char*);
|
|
||||||
int TvCtrlPointGetPower(int devnum);
|
|
||||||
int TvCtrlPointGetChannel(int);
|
|
||||||
int TvCtrlPointGetVolume(int);
|
|
||||||
int TvCtrlPointGetColor(int);
|
|
||||||
int TvCtrlPointGetTint(int);
|
|
||||||
int TvCtrlPointGetContrast(int);
|
|
||||||
int TvCtrlPointGetBrightness(int);
|
|
||||||
|
|
||||||
int TvCtrlPointGetDevice(int, struct TvDeviceNode **);
|
|
||||||
int TvCtrlPointPrintList( void );
|
|
||||||
int TvCtrlPointPrintDevice(int);
|
|
||||||
void TvCtrlPointAddDevice (IXML_Document *, char *, int);
|
|
||||||
void TvCtrlPointHandleGetVar(char *,char *,DOMString);
|
|
||||||
void TvStateUpdate(char*,int, IXML_Document * , char **);
|
|
||||||
void TvCtrlPointHandleEvent(Upnp_SID, int, IXML_Document *);
|
|
||||||
void TvCtrlPointHandleSubscribeUpdate(char *, Upnp_SID, int);
|
|
||||||
int TvCtrlPointCallbackEventHandler(Upnp_EventType, void *, void *);
|
|
||||||
void TvCtrlPointVerifyTimeouts(int);
|
|
||||||
void TvCtrlPointPrintCommands( void );
|
|
||||||
void* TvCtrlPointCommandLoop( void* );
|
|
||||||
int TvCtrlPointStart( print_string printFunctionPtr, state_update updateFunctionPtr );
|
|
||||||
int TvCtrlPointStop( void );
|
|
||||||
int TvCtrlPointProcessCommand( char *cmdline );
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif //UPNP_TV_CTRLPT_H
|
|
||||||
@@ -1,191 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 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 <stdio.h>
|
|
||||||
#include "sample_util.h"
|
|
||||||
#include "upnp_tv_device.h"
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* linux_print
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Prints a string to standard out.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
void
|
|
||||||
linux_print( const char *string )
|
|
||||||
{
|
|
||||||
printf( "%s", string );
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceCommandLoop
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Function that receives commands from the user at the command prompt
|
|
||||||
* during the lifetime of the device, and calls the appropriate
|
|
||||||
* functions for those commands. Only one command, exit, is currently
|
|
||||||
* defined.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
void *
|
|
||||||
TvDeviceCommandLoop( void *args )
|
|
||||||
{
|
|
||||||
int stoploop = 0;
|
|
||||||
char cmdline[100];
|
|
||||||
char cmd[100];
|
|
||||||
|
|
||||||
while( !stoploop ) {
|
|
||||||
sprintf( cmdline, " " );
|
|
||||||
sprintf( cmd, " " );
|
|
||||||
|
|
||||||
SampleUtil_Print( "\n>> " );
|
|
||||||
|
|
||||||
// Get a command line
|
|
||||||
fgets( cmdline, 100, stdin );
|
|
||||||
|
|
||||||
sscanf( cmdline, "%s", cmd );
|
|
||||||
|
|
||||||
if( strcasecmp( cmd, "exit" ) == 0 ) {
|
|
||||||
SampleUtil_Print( "Shutting down...\n" );
|
|
||||||
TvDeviceStop( );
|
|
||||||
exit( 0 );
|
|
||||||
} else {
|
|
||||||
SampleUtil_Print( "\n Unknown command: %s\n\n", cmd );
|
|
||||||
SampleUtil_Print( " Valid Commands:\n" );
|
|
||||||
SampleUtil_Print( " Exit\n\n" );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* main
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Main entry point for tv device application.
|
|
||||||
* Initializes and registers with the sdk.
|
|
||||||
* Initializes the state stables of the service.
|
|
||||||
* Starts the command loop.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* int argc - count of arguments
|
|
||||||
* char ** argv -arguments. The application
|
|
||||||
* accepts the following optional arguments:
|
|
||||||
*
|
|
||||||
* -ip ipaddress
|
|
||||||
* -port port
|
|
||||||
* -desc desc_doc_name
|
|
||||||
* -webdir web_dir_path"
|
|
||||||
* -help
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int
|
|
||||||
main( IN int argc,
|
|
||||||
IN char **argv )
|
|
||||||
{
|
|
||||||
|
|
||||||
unsigned int portTemp = 0;
|
|
||||||
char *ip_address = NULL,
|
|
||||||
*desc_doc_name = NULL,
|
|
||||||
*web_dir_path = NULL;
|
|
||||||
ithread_t cmdloop_thread;
|
|
||||||
int code;
|
|
||||||
unsigned int port = 0;
|
|
||||||
int sig;
|
|
||||||
sigset_t sigs_to_catch;
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
SampleUtil_Initialize( linux_print );
|
|
||||||
|
|
||||||
//Parse options
|
|
||||||
for( i = 1; i < argc; i++ ) {
|
|
||||||
if( strcmp( argv[i], "-ip" ) == 0 ) {
|
|
||||||
ip_address = argv[++i];
|
|
||||||
} else if( strcmp( argv[i], "-port" ) == 0 ) {
|
|
||||||
sscanf( argv[++i], "%u", &portTemp );
|
|
||||||
} else if( strcmp( argv[i], "-desc" ) == 0 ) {
|
|
||||||
desc_doc_name = argv[++i];
|
|
||||||
} else if( strcmp( argv[i], "-webdir" ) == 0 ) {
|
|
||||||
web_dir_path = argv[++i];
|
|
||||||
} else if( strcmp( argv[i], "-help" ) == 0 ) {
|
|
||||||
SampleUtil_Print( "Usage: %s -ip ipaddress -port port"
|
|
||||||
" -desc desc_doc_name -webdir web_dir_path"
|
|
||||||
" -help (this message)\n", argv[0] );
|
|
||||||
SampleUtil_Print( "\tipaddress: IP address of the device"
|
|
||||||
" (must match desc. doc)\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: 192.168.0.4\n" );
|
|
||||||
SampleUtil_Print( "\tport: Port number to use for "
|
|
||||||
"receiving UPnP messages (must match desc. doc)\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: 5431\n" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( "\tdesc_doc_name: name of device description document\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: tvdevicedesc.xml\n" );
|
|
||||||
SampleUtil_Print
|
|
||||||
( "\tweb_dir_path: Filesystem path where web files "
|
|
||||||
"related to the device are stored\n" );
|
|
||||||
SampleUtil_Print( "\t\te.g.: /upnp/sample/tvdevice/web\n" );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
port = ( unsigned short )portTemp;
|
|
||||||
|
|
||||||
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 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Catch Ctrl-C and properly shutdown
|
|
||||||
*/
|
|
||||||
sigemptyset( &sigs_to_catch );
|
|
||||||
sigaddset( &sigs_to_catch, SIGINT );
|
|
||||||
sigwait( &sigs_to_catch, &sig );
|
|
||||||
|
|
||||||
SampleUtil_Print( "Shutting down on signal %d...\n", sig );
|
|
||||||
TvDeviceStop( );
|
|
||||||
exit( 0 );
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,638 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef UPNP_TV_DEVICE_H
|
|
||||||
#define UPNP_TV_DEVICE_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "ithread.h"
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "upnp.h"
|
|
||||||
#include "sample_util.h"
|
|
||||||
|
|
||||||
//Color constants
|
|
||||||
#define MAX_COLOR 10
|
|
||||||
#define MIN_COLOR 1
|
|
||||||
|
|
||||||
//Brightness constants
|
|
||||||
#define MAX_BRIGHTNESS 10
|
|
||||||
#define MIN_BRIGHTNESS 1
|
|
||||||
|
|
||||||
//Power constants
|
|
||||||
#define POWER_ON 1
|
|
||||||
#define POWER_OFF 0
|
|
||||||
|
|
||||||
//Tint constants
|
|
||||||
#define MAX_TINT 10
|
|
||||||
#define MIN_TINT 1
|
|
||||||
|
|
||||||
//Volume constants
|
|
||||||
#define MAX_VOLUME 10
|
|
||||||
#define MIN_VOLUME 1
|
|
||||||
|
|
||||||
//Contrast constants
|
|
||||||
#define MAX_CONTRAST 10
|
|
||||||
#define MIN_CONTRAST 1
|
|
||||||
|
|
||||||
//Channel constants
|
|
||||||
#define MAX_CHANNEL 100
|
|
||||||
#define MIN_CHANNEL 1
|
|
||||||
|
|
||||||
//Number of services.
|
|
||||||
#define TV_SERVICE_SERVCOUNT 2
|
|
||||||
|
|
||||||
//Index of control service
|
|
||||||
#define TV_SERVICE_CONTROL 0
|
|
||||||
|
|
||||||
//Index of picture service
|
|
||||||
#define TV_SERVICE_PICTURE 1
|
|
||||||
|
|
||||||
//Number of control variables
|
|
||||||
#define TV_CONTROL_VARCOUNT 3
|
|
||||||
|
|
||||||
//Index of power variable
|
|
||||||
#define TV_CONTROL_POWER 0
|
|
||||||
|
|
||||||
//Index of channel variable
|
|
||||||
#define TV_CONTROL_CHANNEL 1
|
|
||||||
|
|
||||||
//Index of volume variable
|
|
||||||
#define TV_CONTROL_VOLUME 2
|
|
||||||
|
|
||||||
//Number of picture variables
|
|
||||||
#define TV_PICTURE_VARCOUNT 4
|
|
||||||
|
|
||||||
//Index of color variable
|
|
||||||
#define TV_PICTURE_COLOR 0
|
|
||||||
|
|
||||||
//Index of tint variable
|
|
||||||
#define TV_PICTURE_TINT 1
|
|
||||||
|
|
||||||
//Index of contrast variable
|
|
||||||
#define TV_PICTURE_CONTRAST 2
|
|
||||||
|
|
||||||
//Index of brightness variable
|
|
||||||
#define TV_PICTURE_BRIGHTNESS 3
|
|
||||||
|
|
||||||
//Max value length
|
|
||||||
#define TV_MAX_VAL_LEN 5
|
|
||||||
|
|
||||||
//Max actions
|
|
||||||
#define TV_MAXACTIONS 12
|
|
||||||
|
|
||||||
/* This should be the maximum VARCOUNT from above */
|
|
||||||
#define TV_MAXVARS TV_PICTURE_VARCOUNT
|
|
||||||
|
|
||||||
|
|
||||||
extern char TvDeviceType[];
|
|
||||||
|
|
||||||
extern char *TvServiceType[];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* upnp_action
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Prototype for all actions. For each action that a service
|
|
||||||
* implements, there is a corresponding function with this prototype.
|
|
||||||
* Pointers to these functions, along with action names, are stored
|
|
||||||
* in the service table. When an action request comes in the action
|
|
||||||
* name is matched, and the appropriate function is called.
|
|
||||||
* Each function returns UPNP_E_SUCCESS, on success, and a nonzero
|
|
||||||
* error code on failure.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * request - document of action request
|
|
||||||
* IXML_Document **out - action result
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
typedef int (*upnp_action) (IXML_Document *request, IXML_Document **out,
|
|
||||||
char **errorString);
|
|
||||||
|
|
||||||
/* Structure for storing Tv Service
|
|
||||||
identifiers and state table */
|
|
||||||
struct TvService {
|
|
||||||
|
|
||||||
char UDN[NAME_SIZE]; /* Universally Unique Device Name */
|
|
||||||
char ServiceId[NAME_SIZE];
|
|
||||||
char ServiceType[NAME_SIZE];
|
|
||||||
char *VariableName[TV_MAXVARS];
|
|
||||||
char *VariableStrVal[TV_MAXVARS];
|
|
||||||
char *ActionNames[TV_MAXACTIONS];
|
|
||||||
upnp_action actions[TV_MAXACTIONS];
|
|
||||||
unsigned int VariableCount;
|
|
||||||
};
|
|
||||||
|
|
||||||
//Array of service structures
|
|
||||||
extern struct TvService tv_service_table[];
|
|
||||||
|
|
||||||
//Device handle returned from sdk
|
|
||||||
extern UpnpDevice_Handle device_handle;
|
|
||||||
|
|
||||||
|
|
||||||
/* Mutex for protecting the global state table data
|
|
||||||
in a multi-threaded, asynchronous environment.
|
|
||||||
All functions should lock this mutex before reading
|
|
||||||
or writing the state table data. */
|
|
||||||
extern ithread_mutex_t TVDevMutex;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* SetActionTable
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initializes the action table for the specified service.
|
|
||||||
* Note that
|
|
||||||
* knowledge of the service description is
|
|
||||||
* assumed. Action names are hardcoded.
|
|
||||||
* Parameters:
|
|
||||||
* int serviceType - one of TV_SERVICE_CONTROL or, TV_SERVICE_PICTURE
|
|
||||||
* struct TvService *out - service containing action table to set.
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int SetActionTable(int serviceType, struct TvService * out);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceStateTableInit
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Initialize the device state table for
|
|
||||||
* this TvDevice, pulling identifier info
|
|
||||||
* from the description Document. Note that
|
|
||||||
* knowledge of the service description is
|
|
||||||
* assumed. State table variables and default
|
|
||||||
* values are currently hardcoded in this file
|
|
||||||
* rather than being read from service description
|
|
||||||
* documents.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* DescDocURL -- The description document URL
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceStateTableInit(char*);
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceHandleSubscriptionRequest
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Called during a subscription request callback. If the
|
|
||||||
* subscription request is for this device and either its
|
|
||||||
* control service or picture service, then accept it.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* sr_event -- The subscription request event structure
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceHandleSubscriptionRequest(struct Upnp_Subscription_Request *);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceHandleGetVarRequest
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Called during a get variable request callback. If the
|
|
||||||
* request is for this device and either its control service
|
|
||||||
* or picture service, then respond with the variable value.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* cgv_event -- The control get variable request event structure
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceHandleGetVarRequest(struct Upnp_State_Var_Request *);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceHandleActionRequest
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Called during an action request callback. If the
|
|
||||||
* request is for this device and either its control service
|
|
||||||
* or picture service, then perform the action and respond.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* ca_event -- The control action request event structure
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceHandleActionRequest(struct Upnp_Action_Request *);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceCallbackEventHandler
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* The callback handler registered with the SDK while registering
|
|
||||||
* root device. Dispatches the request to the appropriate procedure
|
|
||||||
* based on the value of EventType. The four requests handled by the
|
|
||||||
* device are:
|
|
||||||
* 1) Event Subscription requests.
|
|
||||||
* 2) Get Variable requests.
|
|
||||||
* 3) Action requests.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* EventType -- The type of callback event
|
|
||||||
* Event -- Data structure containing event data
|
|
||||||
* Cookie -- Optional data specified during callback registration
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceCallbackEventHandler(Upnp_EventType, void*, void*);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetServiceTableVar
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Update the TvDevice service state table, and notify all subscribed
|
|
||||||
* control points of the updated state. Note that since this function
|
|
||||||
* blocks on the mutex TVDevMutex, to avoid a hang this function should
|
|
||||||
* not be called within any other function that currently has this mutex
|
|
||||||
* locked.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* service -- The service number (TV_SERVICE_CONTROL or TV_SERVICE_PICTURE)
|
|
||||||
* variable -- The variable number (TV_CONTROL_POWER, TV_CONTROL_CHANNEL,
|
|
||||||
* TV_CONTROL_VOLUME, TV_PICTURE_COLOR, TV_PICTURE_TINT,
|
|
||||||
* TV_PICTURE_CONTRAST, or TV_PICTURE_BRIGHTNESS)
|
|
||||||
* value -- The string representation of the new value
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetServiceTableVar(unsigned int, unsigned int, char*);
|
|
||||||
|
|
||||||
//Control Service Actions
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDevicePowerOn
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Turn the power on.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - document of action request
|
|
||||||
* IXML_Document **out - action result
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDevicePowerOn(IN IXML_Document * in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDevicePowerOff
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Turn the power off.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - document of action request
|
|
||||||
* IXML_Document **out - action result
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDevicePowerOff(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetChannel
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the channel, update the TvDevice control service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetChannel(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseChannel
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase the channel.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseChannel
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the channel.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseChannel(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetVolume
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the volume, update the TvDevice control service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetVolume(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseVolume
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase the volume.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseVolume
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the volume.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseVolume(IN IXML_Document *in, OUT IXML_Document**out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
|
|
||||||
//Picture Service Actions
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetColor
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the color, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetColor(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseColor
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase the color.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseColor
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the color.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseColor(IN IXML_Document * in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetTint
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the tint, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetTint(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseTint
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase tint.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseTint
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease tint.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseTint(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* TvDeviceSetContrast
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the contrast, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
int TvDeviceSetContrast(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseContrast
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
*
|
|
||||||
* Increase the contrast.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseContrast
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease the contrast.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceDecreaseContrast(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceSetBrightness
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Change the brightness, update the TvDevice picture service
|
|
||||||
* state table, and notify all subscribed control points of the
|
|
||||||
* updated state.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* brightness -- The brightness value to change to.
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceSetBrightness(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceIncreaseBrightness
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Increase brightness.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
int TvDeviceIncreaseBrightness(IN IXML_Document *in, OUT IXML_Document **out,
|
|
||||||
OUT char **errorString);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TvDeviceDecreaseBrightness
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Decrease brightnesss.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* IXML_Document * in - action request document
|
|
||||||
* IXML_Document **out - action result document
|
|
||||||
* char **errorString - errorString (in case action was unsuccessful)
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
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,
|
|
||||||
char *web_dir_path, print_string pfun);
|
|
||||||
int TvDeviceStop();
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
213
upnp/src/api/UpnpString.c
Normal file
213
upnp/src/api/UpnpString.c
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \addtogroup UpnpString
|
||||||
|
*
|
||||||
|
* Due to its heavy use, this class is coded for efficiency, not for beauty.
|
||||||
|
* Do not use this as example to other classes. Please take a look at any
|
||||||
|
* other one.
|
||||||
|
*
|
||||||
|
* \todo Always alloc a minimum size like 64 bytes or so and when shrinking
|
||||||
|
* do not perform a new memory allocation.
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* \brief UpnpString object implementation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "UpnpString.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h> /* for calloc(), free() */
|
||||||
|
#include <string.h> /* for strlen(), strdup() */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#define strcasecmp stricmp
|
||||||
|
#else
|
||||||
|
/* Other systems have strncasecmp */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* strndup() is a GNU extension. Other systems must fix it with elif's. */
|
||||||
|
#ifdef __GNUC__
|
||||||
|
extern char *strndup(__const char *__string, size_t __n);
|
||||||
|
#elif defined(WIN32)
|
||||||
|
static char *strndup(const char *__string, size_t __n)
|
||||||
|
{
|
||||||
|
size_t strsize = strnlen(__string,__n);
|
||||||
|
char *newstr = (char *) malloc(strsize + 1);
|
||||||
|
strncpy(newstr,__string,__n);
|
||||||
|
return(newstr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Internal implementation of the class UpnpString.
|
||||||
|
*
|
||||||
|
* \internal
|
||||||
|
*/
|
||||||
|
struct SUpnpString
|
||||||
|
{
|
||||||
|
/*! \brief Length of the string. */
|
||||||
|
size_t m_length;
|
||||||
|
/*! \brief Pointer to a dynamically allocated area that holds the NULL
|
||||||
|
* terminated string. */
|
||||||
|
char *m_string;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
UpnpString *UpnpString_new()
|
||||||
|
{
|
||||||
|
/* All bytes are zero, and so is the length of the string. */
|
||||||
|
struct SUpnpString *p = calloc(1, sizeof (struct SUpnpString));
|
||||||
|
if (p == NULL) {
|
||||||
|
goto error_handler1;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
p->m_length = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This byte is zero, calloc does initialize it. */
|
||||||
|
p->m_string = calloc(1, 1);
|
||||||
|
if (p->m_string == NULL) {
|
||||||
|
goto error_handler2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (UpnpString *)p;
|
||||||
|
|
||||||
|
/*free(p->m_string); */
|
||||||
|
error_handler2:
|
||||||
|
free(p);
|
||||||
|
error_handler1:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpString_delete(UpnpString *p)
|
||||||
|
{
|
||||||
|
struct SUpnpString *q = (struct SUpnpString *)p;
|
||||||
|
|
||||||
|
if (!q) return;
|
||||||
|
|
||||||
|
q->m_length = 0;
|
||||||
|
|
||||||
|
free(q->m_string);
|
||||||
|
q->m_string = NULL;
|
||||||
|
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UpnpString *UpnpString_dup(const UpnpString *p)
|
||||||
|
{
|
||||||
|
struct SUpnpString *q = calloc(1, sizeof (struct SUpnpString));
|
||||||
|
if (q == NULL) {
|
||||||
|
goto error_handler1;
|
||||||
|
}
|
||||||
|
q->m_length = ((struct SUpnpString *)p)->m_length;
|
||||||
|
q->m_string = strdup(((struct SUpnpString *)p)->m_string);
|
||||||
|
if (q->m_string == NULL) {
|
||||||
|
goto error_handler2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (UpnpString *)q;
|
||||||
|
|
||||||
|
/*free(q->m_string); */
|
||||||
|
error_handler2:
|
||||||
|
free(q);
|
||||||
|
error_handler1:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpString_assign(UpnpString *p, const UpnpString *q)
|
||||||
|
{
|
||||||
|
if (p != q) {
|
||||||
|
UpnpString_set_String(p, UpnpString_get_String(q));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t UpnpString_get_Length(const UpnpString *p)
|
||||||
|
{
|
||||||
|
return ((struct SUpnpString *)p)->m_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpString_set_Length(UpnpString *p, size_t n)
|
||||||
|
{
|
||||||
|
if (((struct SUpnpString *)p)->m_length > n) {
|
||||||
|
((struct SUpnpString *)p)->m_length = n;
|
||||||
|
/* No need to realloc now, will do later when needed. */
|
||||||
|
((struct SUpnpString *)p)->m_string[n] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *UpnpString_get_String(const UpnpString *p)
|
||||||
|
{
|
||||||
|
return ((struct SUpnpString *)p)->m_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UpnpString_set_String(UpnpString *p, const char *s)
|
||||||
|
{
|
||||||
|
char *q = strdup(s);
|
||||||
|
if (!q) goto error_handler1;
|
||||||
|
free(((struct SUpnpString *)p)->m_string);
|
||||||
|
((struct SUpnpString *)p)->m_length = strlen(q);
|
||||||
|
((struct SUpnpString *)p)->m_string = q;
|
||||||
|
|
||||||
|
error_handler1:
|
||||||
|
return q != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UpnpString_set_StringN(UpnpString *p, const char *s, size_t n)
|
||||||
|
{
|
||||||
|
char *q = strndup(s, n);
|
||||||
|
if (!q) goto error_handler1;
|
||||||
|
free(((struct SUpnpString *)p)->m_string);
|
||||||
|
((struct SUpnpString *)p)->m_length = strlen(q);
|
||||||
|
((struct SUpnpString *)p)->m_string = q;
|
||||||
|
|
||||||
|
error_handler1:
|
||||||
|
return q != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpString_clear(UpnpString *p)
|
||||||
|
{
|
||||||
|
((struct SUpnpString *)p)->m_length = 0;
|
||||||
|
/* No need to realloc now, will do later when needed. */
|
||||||
|
((struct SUpnpString *)p)->m_string[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UpnpString_cmp(UpnpString *p, UpnpString *q)
|
||||||
|
{
|
||||||
|
const char *cp = UpnpString_get_String(p);
|
||||||
|
const char *cq = UpnpString_get_String(q);
|
||||||
|
|
||||||
|
return strcmp(cp, cq);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UpnpString_casecmp(UpnpString *p, UpnpString *q)
|
||||||
|
{
|
||||||
|
const char *cp = UpnpString_get_String(p);
|
||||||
|
const char *cq = UpnpString_get_String(q);
|
||||||
|
|
||||||
|
return strcasecmp(cp, cq);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @} UpnpString */
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,177 +1,121 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/*******************************************************************************
|
||||||
//
|
*
|
||||||
// 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
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Function : UpnpSetLogFileNames
|
int UpnpInitLog(void)
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* IN const char* ErrFileName: name of the error file
|
|
||||||
* IN const char *InfoFileName: name of the information file
|
|
||||||
* IN int size: Size of the buffer
|
|
||||||
* IN int starLength: This parameter provides the width of the banner
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This functions takes the buffer and writes the buffer in the file as
|
|
||||||
* per the requested banner
|
|
||||||
* Returns: void
|
|
||||||
***************************************************************************/
|
|
||||||
void
|
|
||||||
UpnpSetLogFileNames ( IN const char *ErrFileName,
|
|
||||||
IN const char *InfoFileName )
|
|
||||||
{
|
{
|
||||||
if( ErrFileName ) {
|
ithread_mutex_init(&GlobalDebugMutex, NULL);
|
||||||
errFileName = ErrFileName;
|
if(DEBUG_TARGET == 1) {
|
||||||
}
|
if((ErrFileHnd = fopen( errFileName, "a")) == NULL) {
|
||||||
if( InfoFileName ) {
|
return -1;
|
||||||
infoFileName = InfoFileName;
|
}
|
||||||
}
|
if((InfoFileHnd = fopen( infoFileName, "a")) == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return UPNP_E_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
void UpnpSetLogLevel(Upnp_LogLevel log_level)
|
||||||
* 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;
|
g_log_level = log_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
void UpnpCloseLog(void)
|
||||||
* Function : UpnpCloseLog
|
|
||||||
*
|
|
||||||
* Parameters: void
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This functions closes the log files
|
|
||||||
* Returns: void
|
|
||||||
***************************************************************************/
|
|
||||||
void
|
|
||||||
UpnpCloseLog()
|
|
||||||
{
|
{
|
||||||
if( DEBUG_TARGET == 1 ) {
|
if (DEBUG_TARGET == 1) {
|
||||||
fflush( ErrFileHnd );
|
fflush(ErrFileHnd);
|
||||||
fflush( InfoFileHnd );
|
fflush(InfoFileHnd);
|
||||||
fclose( ErrFileHnd );
|
fclose(ErrFileHnd);
|
||||||
fclose( InfoFileHnd );
|
fclose(InfoFileHnd);
|
||||||
}
|
}
|
||||||
ithread_mutex_destroy( &GlobalDebugMutex );
|
ithread_mutex_destroy(&GlobalDebugMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpSetLogFileNames(
|
||||||
|
const char *ErrFileName,
|
||||||
|
const char *InfoFileName)
|
||||||
|
{
|
||||||
|
if (ErrFileName) {
|
||||||
|
errFileName = ErrFileName;
|
||||||
|
}
|
||||||
|
if (InfoFileName) {
|
||||||
|
infoFileName = InfoFileName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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(
|
||||||
IN Upnp_LogLevel DLevel,
|
Upnp_LogLevel DLevel,
|
||||||
IN Dbg_Module Module)
|
Dbg_Module Module)
|
||||||
{
|
{
|
||||||
int ret = DLevel <= g_log_level;
|
int ret = DLevel <= g_log_level;
|
||||||
ret &=
|
ret &=
|
||||||
@@ -186,38 +130,15 @@ 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(
|
||||||
IN Upnp_LogLevel DLevel,
|
Upnp_LogLevel DLevel,
|
||||||
IN Dbg_Module Module,
|
Dbg_Module Module,
|
||||||
IN const char *DbgFileName,
|
const char *DbgFileName,
|
||||||
IN int DbgLineNo,
|
int DbgLineNo,
|
||||||
IN const char *FmtStr,
|
const char *FmtStr,
|
||||||
... )
|
...)
|
||||||
{
|
{
|
||||||
va_list ArgList;
|
va_list ArgList;
|
||||||
|
|
||||||
@@ -228,7 +149,7 @@ void UpnpPrintf(
|
|||||||
ithread_mutex_lock(&GlobalDebugMutex);
|
ithread_mutex_lock(&GlobalDebugMutex);
|
||||||
va_start(ArgList, FmtStr);
|
va_start(ArgList, FmtStr);
|
||||||
if (!DEBUG_TARGET) {
|
if (!DEBUG_TARGET) {
|
||||||
if( DbgFileName ) {
|
if (DbgFileName) {
|
||||||
UpnpDisplayFileAndLine(stdout, DbgFileName, DbgLineNo);
|
UpnpDisplayFileAndLine(stdout, DbgFileName, DbgLineNo);
|
||||||
}
|
}
|
||||||
vfprintf(stdout, FmtStr, ArgList);
|
vfprintf(stdout, FmtStr, ArgList);
|
||||||
@@ -249,27 +170,9 @@ void UpnpPrintf(
|
|||||||
va_end(ArgList);
|
va_end(ArgList);
|
||||||
ithread_mutex_unlock(&GlobalDebugMutex);
|
ithread_mutex_unlock(&GlobalDebugMutex);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
FILE *GetDebugFile(Upnp_LogLevel DLevel, Dbg_Module Module)
|
||||||
* Function : UpnpGetDebugFile
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* IN Upnp_LogLevel DLevel: The level of the debug logging. It will decide
|
|
||||||
* whether debug statement will go to standard output,
|
|
||||||
* or any of the log files.
|
|
||||||
* IN Dbg_Module Module: debug will go in the name of this module
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This function checks if the module is turned on for debug
|
|
||||||
* and returns the file descriptor corresponding to the debug level
|
|
||||||
* Returns: FILE *
|
|
||||||
* NULL : if the module is turn off for debug
|
|
||||||
* else returns the right file descriptor
|
|
||||||
***************************************************************************/
|
|
||||||
#ifdef DEBUG
|
|
||||||
FILE *GetDebugFile( Upnp_LogLevel DLevel, Dbg_Module Module )
|
|
||||||
{
|
{
|
||||||
FILE *ret;
|
FILE *ret;
|
||||||
|
|
||||||
@@ -287,111 +190,137 @@ FILE *GetDebugFile( Upnp_LogLevel DLevel, Dbg_Module Module )
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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(
|
void UpnpDisplayFileAndLine(
|
||||||
IN FILE * fd,
|
FILE *fd,
|
||||||
IN const char *DbgFileName,
|
const char *DbgFileName,
|
||||||
IN int DbgLineNo)
|
int DbgLineNo)
|
||||||
{
|
{
|
||||||
int starlength = 66;
|
#define NLINES 2
|
||||||
const char *lines[2];
|
#define MAX_LINE_SIZE 512
|
||||||
char FileAndLine[500];
|
#define NUMBER_OF_STARS 80
|
||||||
lines[0] = "DEBUG";
|
const char *lines[NLINES];
|
||||||
if (DbgFileName) {
|
char buf[NLINES][MAX_LINE_SIZE];
|
||||||
sprintf(FileAndLine,
|
int i;
|
||||||
"FILE: %s, LINE: %d",
|
|
||||||
DbgFileName, DbgLineNo);
|
/* Initialize the pointer array */
|
||||||
lines[1] = FileAndLine;
|
for (i = 0; i < NLINES; i++) {
|
||||||
|
lines[i] = buf[i];
|
||||||
}
|
}
|
||||||
UpnpDisplayBanner(fd, lines, 2, starlength);
|
|
||||||
|
/* 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
|
||||||
|
);
|
||||||
|
if (DbgFileName) {
|
||||||
|
sprintf(buf[1],
|
||||||
|
"FILE: %s, LINE: %d",
|
||||||
|
DbgFileName,
|
||||||
|
DbgLineNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show the lines centered */
|
||||||
|
UpnpDisplayBanner(fd, lines, NLINES, NUMBER_OF_STARS);
|
||||||
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(
|
||||||
IN FILE * fd,
|
FILE * fd,
|
||||||
IN const char **lines,
|
const char **lines,
|
||||||
IN size_t size,
|
size_t size,
|
||||||
IN int starLength)
|
size_t starLength)
|
||||||
{
|
{
|
||||||
int leftMarginLength = starLength / 2 + 1;
|
size_t leftMarginLength = starLength / 2 + 1;
|
||||||
int rightMarginLength = starLength / 2 + 1;
|
size_t rightMarginLength = starLength / 2 + 1;
|
||||||
int i = 0;
|
size_t i = 0;
|
||||||
int LineSize = 0;
|
size_t LineSize = 0;
|
||||||
int starLengthMinus2 = starLength - 2;
|
size_t starLengthMinus2 = starLength - 2;
|
||||||
|
|
||||||
char *leftMargin = ( char * )malloc( leftMarginLength );
|
char *leftMargin = malloc(leftMarginLength);
|
||||||
char *rightMargin = ( char * )malloc( rightMarginLength );
|
char *rightMargin = malloc(rightMarginLength);
|
||||||
char *stars = ( char * )malloc( starLength + 1 );
|
char *stars = malloc(starLength + 1);
|
||||||
char *currentLine = ( char * )malloc( starLength + 1 );
|
char *currentLine = malloc(starLength + 1);
|
||||||
const char *line = NULL;
|
const char *line = NULL;
|
||||||
|
|
||||||
memset( stars, '*', starLength );
|
memset(stars, '*', starLength);
|
||||||
stars[starLength] = 0;
|
stars[starLength] = 0;
|
||||||
memset( leftMargin, 0, leftMarginLength );
|
memset(leftMargin, 0, leftMarginLength);
|
||||||
memset( rightMargin, 0, rightMarginLength );
|
memset(rightMargin, 0, rightMarginLength);
|
||||||
fprintf( fd, "\n%s\n", stars );
|
fprintf(fd, "\n%s\n", stars);
|
||||||
for( i = 0; i < size; i++ ) {
|
for (i = 0; i < size; i++) {
|
||||||
LineSize = strlen( lines[i] );
|
LineSize = strlen(lines[i]);
|
||||||
line = lines[i];
|
line = lines[i];
|
||||||
while( LineSize > starLengthMinus2 ) {
|
while (LineSize > starLengthMinus2) {
|
||||||
memcpy( currentLine, line, starLengthMinus2 );
|
memcpy(currentLine, line, starLengthMinus2);
|
||||||
currentLine[starLengthMinus2] = 0;
|
currentLine[starLengthMinus2] = 0;
|
||||||
fprintf( fd, "*%s*\n", currentLine );
|
fprintf(fd, "*%s*\n", currentLine);
|
||||||
LineSize -= starLengthMinus2;
|
LineSize -= starLengthMinus2;
|
||||||
line += starLengthMinus2;
|
line += starLengthMinus2;
|
||||||
}
|
}
|
||||||
leftMarginLength = (starLengthMinus2 - LineSize)/2;
|
leftMarginLength = (starLengthMinus2 - LineSize) / 2;
|
||||||
if( LineSize % 2 == 0 ) {
|
if (LineSize % 2 == 0) {
|
||||||
rightMarginLength = leftMarginLength;
|
rightMarginLength = leftMarginLength;
|
||||||
} else {
|
} else {
|
||||||
rightMarginLength = leftMarginLength + 1;
|
rightMarginLength = leftMarginLength + 1;
|
||||||
}
|
}
|
||||||
memset( leftMargin, ' ', leftMarginLength );
|
memset(leftMargin, ' ', leftMarginLength);
|
||||||
memset( rightMargin, ' ', rightMarginLength );
|
memset(rightMargin, ' ', rightMarginLength);
|
||||||
leftMargin[leftMarginLength] = 0;
|
leftMargin[leftMarginLength] = 0;
|
||||||
rightMargin[rightMarginLength] = 0;
|
rightMargin[rightMarginLength] = 0;
|
||||||
fprintf( fd, "*%s%s%s*\n", leftMargin, line, rightMargin );
|
fprintf(fd, "*%s%s%s*\n", leftMargin, line, rightMargin);
|
||||||
}
|
}
|
||||||
fprintf( fd, "%s\n\n", stars );
|
fprintf(fd, "%s\n\n", stars);
|
||||||
|
|
||||||
free( currentLine );
|
free(currentLine);
|
||||||
free( stars );
|
free(stars);
|
||||||
free( rightMargin );
|
free(rightMargin);
|
||||||
free( leftMargin );
|
free(leftMargin);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
void PrintThreadPoolStats(
|
||||||
|
ThreadPool *tp,
|
||||||
|
const char *DbgFileName,
|
||||||
|
int DbgLineNo,
|
||||||
|
const char *msg)
|
||||||
|
{
|
||||||
|
ThreadPoolStats stats;
|
||||||
|
ThreadPoolGetStats(tp, &stats);
|
||||||
|
UpnpPrintf(UPNP_INFO, API, DbgFileName, DbgLineNo,
|
||||||
|
"%s\n"
|
||||||
|
"High Jobs pending: %d\n"
|
||||||
|
"Med Jobs Pending: %d\n"
|
||||||
|
"Low Jobs Pending: %d\n"
|
||||||
|
"Average wait in High Q in milliseconds: %lf\n"
|
||||||
|
"Average wait in Med Q in milliseconds: %lf\n"
|
||||||
|
"Average wait in Low Q in milliseconds: %lf\n"
|
||||||
|
"Max Threads Used: %d\n"
|
||||||
|
"Worker Threads: %d\n"
|
||||||
|
"Persistent Threads: %d\n"
|
||||||
|
"Idle Threads: %d\n"
|
||||||
|
"Total Threads: %d\n"
|
||||||
|
"Total Work Time: %lf\n"
|
||||||
|
"Total Idle Time: %lf\n",
|
||||||
|
msg,
|
||||||
|
stats.currentJobsHQ,
|
||||||
|
stats.currentJobsMQ,
|
||||||
|
stats.currentJobsLQ,
|
||||||
|
stats.avgWaitHQ,
|
||||||
|
stats.avgWaitMQ,
|
||||||
|
stats.avgWaitLQ,
|
||||||
|
stats.maxThreads,
|
||||||
|
stats.workerThreads,
|
||||||
|
stats.persistentThreads,
|
||||||
|
stats.idleThreads,
|
||||||
|
stats.totalThreads,
|
||||||
|
stats.totalWorkTime,
|
||||||
|
stats.totalIdleTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -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 "config.h"
|
#include "config.h"
|
||||||
#if EXCLUDE_GENA == 0
|
#if EXCLUDE_GENA == 0
|
||||||
@@ -63,7 +63,7 @@ error_respond( IN SOCKINFO * info,
|
|||||||
int major,
|
int major,
|
||||||
minor;
|
minor;
|
||||||
|
|
||||||
// retrieve the minor and major version from the GENA request
|
/* retrieve the minor and major version from the GENA request */
|
||||||
http_CalcResponseVersion( hmsg->major_version,
|
http_CalcResponseVersion( hmsg->major_version,
|
||||||
hmsg->minor_version, &major, &minor );
|
hmsg->minor_version, &major, &minor );
|
||||||
|
|
||||||
@@ -90,38 +90,40 @@ genaCallback( IN http_parser_t * parser,
|
|||||||
IN http_message_t * request,
|
IN http_message_t * request,
|
||||||
INOUT SOCKINFO * info )
|
INOUT SOCKINFO * info )
|
||||||
{
|
{
|
||||||
xboolean found_function = FALSE;
|
int found_function = FALSE;
|
||||||
|
|
||||||
if( request->method == HTTPMETHOD_SUBSCRIBE ) {
|
if( request->method == HTTPMETHOD_SUBSCRIBE ) {
|
||||||
#ifdef INCLUDE_DEVICE_APIS
|
#ifdef INCLUDE_DEVICE_APIS
|
||||||
found_function = TRUE;
|
found_function = TRUE;
|
||||||
if( httpmsg_find_hdr( request, HDR_NT, NULL ) == NULL ) {
|
if( httpmsg_find_hdr( request, HDR_NT, NULL ) == NULL ) {
|
||||||
// renew subscription
|
/* renew subscription */
|
||||||
gena_process_subscription_renewal_request
|
gena_process_subscription_renewal_request
|
||||||
( info, request );
|
( info, request );
|
||||||
} else {
|
} else {
|
||||||
// subscribe
|
/* subscribe */
|
||||||
gena_process_subscription_request( info, request );
|
gena_process_subscription_request( info, request );
|
||||||
}
|
}
|
||||||
UpnpPrintf( UPNP_ALL, GENA, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_ALL, GENA, __FILE__, __LINE__,
|
||||||
"got subscription request\n" );
|
"got subscription request\n" );
|
||||||
} else if( request->method == HTTPMETHOD_UNSUBSCRIBE ) {
|
} else if( request->method == HTTPMETHOD_UNSUBSCRIBE ) {
|
||||||
found_function = TRUE;
|
found_function = TRUE;
|
||||||
// unsubscribe
|
/* unsubscribe */
|
||||||
gena_process_unsubscribe_request( info, request );
|
gena_process_unsubscribe_request( info, request );
|
||||||
#endif
|
#endif
|
||||||
} else if( request->method == HTTPMETHOD_NOTIFY ) {
|
} else if( request->method == HTTPMETHOD_NOTIFY ) {
|
||||||
#ifdef INCLUDE_CLIENT_APIS
|
#ifdef INCLUDE_CLIENT_APIS
|
||||||
found_function = TRUE;
|
found_function = TRUE;
|
||||||
// notify
|
/* notify */
|
||||||
gena_process_notification_event( info, request );
|
gena_process_notification_event( info, request );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !found_function ) {
|
if( !found_function ) {
|
||||||
// handle missing functions of device or ctrl pt
|
/* handle missing functions of device or ctrl pt */
|
||||||
error_respond( info, HTTP_NOT_IMPLEMENTED, request );
|
error_respond( info, HTTP_NOT_IMPLEMENTED, request );
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
|
parser = parser;
|
||||||
}
|
}
|
||||||
#endif // EXCLUDE_GENA
|
#endif /* EXCLUDE_GENA */
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,209 +1,329 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/*******************************************************************************
|
||||||
//
|
*
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
// All rights reserved.
|
* All rights reserved.
|
||||||
//
|
*
|
||||||
// Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
//
|
*
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
* without specific prior written permission.
|
||||||
//
|
*
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
******************************************************************************/
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Purpose: This file defines the functions for clients. It defines
|
* Purpose: This file defines the functions for clients. It defines
|
||||||
* functions for adding and removing clients to and from the client table,
|
* functions for adding and removing clients to and from the client table,
|
||||||
* adding and accessing subscription and other attributes pertaining to the
|
* adding and accessing subscription and other attributes pertaining to the
|
||||||
* client
|
* client
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
#include "client_table.h"
|
#include "client_table.h"
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : copy_client_subscription
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* client_subscription * in ; - source client subscription
|
|
||||||
* client_subscription * out ; - destination client subscription
|
|
||||||
*
|
|
||||||
* Description : Make a copy of the client subscription data
|
|
||||||
*
|
|
||||||
* Return : int ;
|
|
||||||
* UPNP_E_OUTOF_MEMORY - On Failure to allocate memory
|
|
||||||
* HTTP_SUCCESS - On Success
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
CLIENTONLY( int copy_client_subscription( client_subscription * in,
|
|
||||||
client_subscription * out ) {
|
|
||||||
int len = strlen( in->ActualSID ) + 1;
|
|
||||||
int len1 = strlen( in->EventURL ) + 1;
|
|
||||||
memcpy( out->sid, in->sid, SID_SIZE );
|
|
||||||
out->sid[SID_SIZE] = 0;
|
|
||||||
out->ActualSID = ( char * )malloc( len );
|
|
||||||
if( out->ActualSID == NULL )
|
|
||||||
return UPNP_E_OUTOF_MEMORY;
|
|
||||||
out->EventURL = ( char * )malloc( len1 );
|
|
||||||
if( out->EventURL == NULL ) {
|
|
||||||
free(out->ActualSID);
|
|
||||||
return UPNP_E_OUTOF_MEMORY;
|
|
||||||
}
|
|
||||||
memcpy( out->ActualSID, in->ActualSID, len );
|
|
||||||
memcpy( out->EventURL, in->EventURL, len1 );
|
|
||||||
//copies do not get RenewEvent Ids or next
|
|
||||||
out->RenewEventId = -1; out->next = NULL; return HTTP_SUCCESS;}
|
|
||||||
|
|
||||||
/************************************************************************
|
#ifdef INCLUDE_CLIENT_APIS
|
||||||
* Function : free_client_subscription
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* client_subscription * sub ; - Client subscription to be freed
|
|
||||||
*
|
|
||||||
* Description : Free memory allocated for client subscription data.
|
|
||||||
* Remove timer thread associated with this subscription event.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void free_client_subscription( client_subscription * sub ) {
|
|
||||||
upnp_timeout * event; ThreadPoolJob tempJob; if( sub ) {
|
|
||||||
if( sub->ActualSID )
|
|
||||||
free( sub->ActualSID ); if( sub->EventURL )
|
|
||||||
free( sub->EventURL ); if( sub->RenewEventId != -1 ) //do not remove timer event of copy
|
|
||||||
//invalid timer event id
|
|
||||||
{
|
|
||||||
if( TimerThreadRemove
|
|
||||||
( &gTimerThread, sub->RenewEventId, &tempJob ) == 0 ) {
|
|
||||||
event = ( upnp_timeout * ) tempJob.arg;
|
|
||||||
free_upnp_timeout( event );}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub->RenewEventId = -1;}
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************************************************
|
#include <stdlib.h> /* for calloc(), free() */
|
||||||
* Function : freeClientSubList
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* client_subscription * list ; Client subscription
|
|
||||||
*
|
|
||||||
* Description : Free the client subscription table.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void freeClientSubList( client_subscription * list ) {
|
|
||||||
client_subscription * next; while( list ) {
|
|
||||||
free_client_subscription( list );
|
|
||||||
next = list->next; free( list ); list = next;}
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : RemoveClientSubClientSID
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* client_subscription **head ; Head of the subscription list
|
|
||||||
* const Upnp_SID sid ; Subscription ID to be mactched
|
|
||||||
*
|
|
||||||
* Description : Remove the client subscription matching the
|
|
||||||
* subscritpion id represented by the const Upnp_SID sid parameter
|
|
||||||
* from the table and update the table.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void RemoveClientSubClientSID( client_subscription ** head,
|
|
||||||
const Upnp_SID sid ) {
|
|
||||||
client_subscription * finger = ( *head );
|
|
||||||
client_subscription * previous = NULL; while( finger ) {
|
|
||||||
if( !( strcmp( sid, finger->sid ) ) ) {
|
|
||||||
if( previous )
|
|
||||||
previous->next = finger->next;
|
|
||||||
else
|
|
||||||
( *head ) = finger->next;
|
|
||||||
finger->next = NULL;
|
|
||||||
freeClientSubList( finger ); finger = NULL;}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
previous = finger; finger = finger->next;}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************************************************
|
struct SClientSubscription {
|
||||||
* Function : GetClientSubClientSID
|
int m_renewEventId;
|
||||||
*
|
UpnpString *m_SID;
|
||||||
* Parameters :
|
UpnpString *m_actualSID;
|
||||||
* client_subscription *head ; Head of the subscription list
|
UpnpString *m_eventURL;
|
||||||
* const Upnp_SID sid ; Subscription ID to be matched
|
struct SClientSubscription *m_next;
|
||||||
*
|
};
|
||||||
* Description : Return the client subscription from the client table
|
|
||||||
* that matches const Upnp_SID sid subscrition id value.
|
|
||||||
*
|
|
||||||
* Return : client_subscription * ; The matching subscription
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
client_subscription *
|
|
||||||
GetClientSubClientSID( client_subscription * head,
|
|
||||||
const Upnp_SID sid ) {
|
|
||||||
client_subscription * next = head; while( next ) {
|
|
||||||
if( !strcmp( next->sid, sid ) )
|
|
||||||
break;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
next = next->next;}
|
|
||||||
}
|
|
||||||
return next;}
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : GetClientSubActualSID
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* client_subscription *head ; Head of the subscription list
|
|
||||||
* token * sid ; Subscription ID to be matched
|
|
||||||
*
|
|
||||||
* Description : Returns the client subscription from the client
|
|
||||||
* subscription table that has the matching token * sid buffer
|
|
||||||
* value.
|
|
||||||
*
|
|
||||||
* Return : client_subscription * ; The matching subscription
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
client_subscription *
|
|
||||||
GetClientSubActualSID( client_subscription * head,
|
|
||||||
token * sid ) {
|
|
||||||
client_subscription * next = head; while( next ) {
|
|
||||||
|
|
||||||
if( !memcmp( next->ActualSID, sid->buff, sid->size ) )
|
/** Constructor */
|
||||||
break;
|
ClientSubscription *UpnpClientSubscription_new()
|
||||||
else
|
{
|
||||||
{
|
struct SClientSubscription *p = calloc(1, sizeof (struct SClientSubscription));
|
||||||
next = next->next;}
|
#if 0
|
||||||
}
|
p->renewEventId = 0;
|
||||||
return next;}
|
#endif
|
||||||
|
p->m_SID = UpnpString_new();
|
||||||
|
p->m_actualSID = UpnpString_new();
|
||||||
|
p->m_eventURL = UpnpString_new();
|
||||||
|
p->m_next = NULL;
|
||||||
|
|
||||||
|
return (ClientSubscription *)p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Destructor */
|
||||||
|
void UpnpClientSubscription_delete(ClientSubscription *p)
|
||||||
|
{
|
||||||
|
struct SClientSubscription *q = (struct SClientSubscription *)p;
|
||||||
|
|
||||||
|
if (!q) return;
|
||||||
|
|
||||||
|
q->m_renewEventId = 0;
|
||||||
|
|
||||||
|
UpnpString_delete(q->m_SID);
|
||||||
|
q->m_SID = NULL;
|
||||||
|
|
||||||
|
UpnpString_delete(q->m_actualSID);
|
||||||
|
q->m_actualSID = NULL;
|
||||||
|
|
||||||
|
UpnpString_delete(q->m_eventURL);
|
||||||
|
q->m_eventURL = NULL;
|
||||||
|
|
||||||
|
q->m_next = NULL;
|
||||||
|
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Copy Constructor */
|
||||||
|
ClientSubscription *UpnpClientSubscription_dup(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
ClientSubscription *q = UpnpClientSubscription_new();
|
||||||
|
|
||||||
|
UpnpClientSubscription_assign(q, p);
|
||||||
|
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Assignment operator */
|
||||||
|
void UpnpClientSubscription_assign(ClientSubscription *q, const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
if (q != p) {
|
||||||
|
/* Do not copy RenewEventId */
|
||||||
|
((struct SClientSubscription *)q)->m_renewEventId = -1;
|
||||||
|
UpnpClientSubscription_set_SID(q, UpnpClientSubscription_get_SID(p));
|
||||||
|
UpnpClientSubscription_set_ActualSID(q, UpnpClientSubscription_get_ActualSID(p));
|
||||||
|
UpnpClientSubscription_set_EventURL(q, UpnpClientSubscription_get_EventURL(p));
|
||||||
|
/* Do not copy m_next */
|
||||||
|
((struct SClientSubscription *)q)->m_next = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int UpnpClientSubscription_get_RenewEventId(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return ((struct SClientSubscription *)p)->m_renewEventId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_set_RenewEventId(ClientSubscription *p, int n)
|
||||||
|
{
|
||||||
|
((struct SClientSubscription *)p)->m_renewEventId = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const UpnpString *UpnpClientSubscription_get_SID(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return ((struct SClientSubscription *)p)->m_SID;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *UpnpClientSubscription_get_SID_cstr(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return UpnpString_get_String(UpnpClientSubscription_get_SID(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_set_SID(ClientSubscription *p, const UpnpString *s)
|
||||||
|
{
|
||||||
|
UpnpString_delete(((struct SClientSubscription *)p)->m_SID);
|
||||||
|
((struct SClientSubscription *)p)->m_SID = UpnpString_dup(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_strcpy_SID(ClientSubscription *p, const char *s)
|
||||||
|
{
|
||||||
|
UpnpString_delete(((struct SClientSubscription *)p)->m_SID);
|
||||||
|
((struct SClientSubscription *)p)->m_SID = UpnpString_new();
|
||||||
|
UpnpString_set_String(((struct SClientSubscription *)p)->m_SID, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const UpnpString *UpnpClientSubscription_get_ActualSID(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return ((struct SClientSubscription *)p)->m_actualSID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *UpnpClientSubscription_get_ActualSID_cstr(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return UpnpString_get_String(UpnpClientSubscription_get_ActualSID(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_set_ActualSID(ClientSubscription *p, const UpnpString *s)
|
||||||
|
{
|
||||||
|
UpnpString_delete(((struct SClientSubscription *)p)->m_actualSID);
|
||||||
|
((struct SClientSubscription *)p)->m_actualSID = UpnpString_dup(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_strcpy_ActualSID(ClientSubscription *p, const char *s)
|
||||||
|
{
|
||||||
|
UpnpString_delete(((struct SClientSubscription *)p)->m_actualSID);
|
||||||
|
((struct SClientSubscription *)p)->m_actualSID = UpnpString_new();
|
||||||
|
UpnpString_set_String(((struct SClientSubscription *)p)->m_actualSID, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const UpnpString *UpnpClientSubscription_get_EventURL(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return ((struct SClientSubscription *)p)->m_eventURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *UpnpClientSubscription_get_EventURL_cstr(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return UpnpString_get_String(UpnpClientSubscription_get_EventURL(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_set_EventURL(ClientSubscription *p, const UpnpString *s)
|
||||||
|
{
|
||||||
|
UpnpString_delete(((struct SClientSubscription *)p)->m_eventURL);
|
||||||
|
((struct SClientSubscription *)p)->m_eventURL = UpnpString_dup(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_strcpy_EventURL(ClientSubscription *p, const char *s)
|
||||||
|
{
|
||||||
|
UpnpString_delete(((struct SClientSubscription *)p)->m_eventURL);
|
||||||
|
((struct SClientSubscription *)p)->m_eventURL = UpnpString_new();
|
||||||
|
UpnpString_set_String(((struct SClientSubscription *)p)->m_eventURL, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ClientSubscription *UpnpClientSubscription_get_Next(const ClientSubscription *p)
|
||||||
|
{
|
||||||
|
return (ClientSubscription *)(((struct SClientSubscription *)p)->m_next);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UpnpClientSubscription_set_Next(ClientSubscription *p, ClientSubscription *q)
|
||||||
|
{
|
||||||
|
((struct SClientSubscription *)p)->m_next = (struct SClientSubscription *)q;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void free_client_subscription(ClientSubscription *sub)
|
||||||
|
{
|
||||||
|
upnp_timeout *event;
|
||||||
|
ThreadPoolJob tempJob;
|
||||||
|
if (sub) {
|
||||||
|
int renewEventId = UpnpClientSubscription_get_RenewEventId(sub);
|
||||||
|
UpnpClientSubscription_strcpy_ActualSID(sub, "");
|
||||||
|
UpnpClientSubscription_strcpy_EventURL(sub, "");
|
||||||
|
if (renewEventId != -1) {
|
||||||
|
/* do not remove timer event of copy */
|
||||||
|
/* invalid timer event id */
|
||||||
|
if (TimerThreadRemove(&gTimerThread, renewEventId, &tempJob) == 0) {
|
||||||
|
event = (upnp_timeout *)tempJob.arg;
|
||||||
|
free_upnp_timeout(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UpnpClientSubscription_set_RenewEventId(sub, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void freeClientSubList(ClientSubscription *list)
|
||||||
|
{
|
||||||
|
ClientSubscription *next;
|
||||||
|
while (list) {
|
||||||
|
free_client_subscription(list);
|
||||||
|
next = UpnpClientSubscription_get_Next(list);
|
||||||
|
UpnpClientSubscription_delete(list);
|
||||||
|
list = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void RemoveClientSubClientSID(ClientSubscription **head, const UpnpString *sid)
|
||||||
|
{
|
||||||
|
ClientSubscription *finger = *head;
|
||||||
|
ClientSubscription *previous = NULL;
|
||||||
|
int found = 0;
|
||||||
|
while (finger) {
|
||||||
|
found = !strcmp(
|
||||||
|
UpnpString_get_String(sid),
|
||||||
|
UpnpClientSubscription_get_SID_cstr(finger));
|
||||||
|
if (found) {
|
||||||
|
if (previous) {
|
||||||
|
UpnpClientSubscription_set_Next(previous,
|
||||||
|
UpnpClientSubscription_get_Next(finger));
|
||||||
|
} else {
|
||||||
|
*head = UpnpClientSubscription_get_Next(finger);
|
||||||
|
}
|
||||||
|
UpnpClientSubscription_set_Next(finger, NULL);
|
||||||
|
freeClientSubList(finger);
|
||||||
|
finger = NULL;
|
||||||
|
} else {
|
||||||
|
previous = finger;
|
||||||
|
finger = UpnpClientSubscription_get_Next(finger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ClientSubscription *GetClientSubClientSID(ClientSubscription *head, const UpnpString *sid)
|
||||||
|
{
|
||||||
|
ClientSubscription *next = head;
|
||||||
|
int found = 0;
|
||||||
|
while (next) {
|
||||||
|
found = !strcmp(
|
||||||
|
UpnpClientSubscription_get_SID_cstr(next),
|
||||||
|
UpnpString_get_String(sid));
|
||||||
|
if(found) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
next = UpnpClientSubscription_get_Next(next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ClientSubscription *GetClientSubActualSID(ClientSubscription *head, token *sid)
|
||||||
|
{
|
||||||
|
ClientSubscription *next = head;
|
||||||
|
while (next) {
|
||||||
|
if (!memcmp(
|
||||||
|
UpnpClientSubscription_get_ActualSID_cstr(next),
|
||||||
|
sid->buff, sid->size)) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
next = UpnpClientSubscription_get_Next(next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* INCLUDE_CLIENT_APIS */
|
||||||
|
|
||||||
)
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user