******************************************************************************* Version 1.8.0 ******************************************************************************* 2010-03-21 Marcelo Jimenez * Forward port of svn revision 505: SF Patch Tracker [ 2836704 ] Patch for Solaris10 compilation and usage. Submitted By: zephyrus ( zephyrus00jp ) 2010-03-20 Marcelo Jimenez * SF Patch Tracker [ 2969188 ] 1.8.0: patch for FreeBSD compilation Submitted By: Nick Leverton (leveret) Fix the order of header inclusion for FreeBSD. 2010-03-20 Marcelo Jimenez * Forward port of svn revision 502: SF Patch Tracker [ 2836704 ] Search for nested serviceList (not stopping at the first lis Submitted By: zephyrus ( zephyrus00jp ) Internet Gateway Device description contains nested serviceList (rootdevice -> servicelist, subdevice and subdevice has the lower-level serviceList, etc..) Unfrotunately, the sample code sample_util.c used by tv_device sample, etc. has a code that looks for only the first top-level serviceList. This results in the failure to read all the services of an IGD xml description. Attached patch modifies this behavior and looks for the service by visiting all the serviceList in xml document in turn. With the modified patch (ad additional modification), I could simulate an IGD device and created a modified control program for that. Patch against 1.6.6 TIA. 2010-03-20 Marcelo Jimenez * SF Patch Tracker [ 2973319 ] Problem in commit 499 Submitted By: Nick Leverton (leveret) Afraid that this doesn't compile, it seems retval should be retVal in two places. 2010-03-16 Marcelo Jimenez * Fix for the ithread_mutex_unlock() logic in UpnpInit(). Thanks for Nicholas Kraft. 2010-03-15 Marcelo Jimenez * SF Patch Tracker [ 2962606 ] Autorenewal errors: invalid SID, too-short renewal interval Submitted By: Nick Leverton (leveret) Auto-renewals send an invalid SID due to a missing UpnpString_get_String call. They also send a renewal interval of 0 instead of copying it from the original subscription. 2010-03-15 Marcelo Jimenez * SF Patch Tracker [ 2964685 ] patch for avoiding inet_ntoa (1.8.0) Submitted By: Nick Leverton (leveret) Seems like SF's tracker won't let me add a patch to someone else's issue ?! This refers to https://sourceforge.net/support/tracker.php?aid=2724578 The calls to inet_ntoa are in getlocalhostname(), which is called from UpnpInit when it is returning the bound IP address. UpnpInit/getlocalhostname hasn't been updated to IPv6, I presume this is deliberate so that it doesn't start returning IPv6 addresses and overwriting the caller's IPv4-sized allocation. The attached patch just updates getlocalhostname to use inet_ntop instead of inet_ntoa, and also documents the fact that UpnpInit is IPv4 only whilst UpnpInnit2 is both IPv4 and IPv6. A fuller solution might be to change UpnpInit to use some variant on UpnpGetIfInfo. UpnpInit could still be left as IPv4 only if desired - perhaps UpnpGetIfInfo could take an option for the desired address family. getlocalhostname and its own copy of the interface scanning code would then be redundant. I don't have IPv6 capability here though so I'm reluctant to change the IPv6 code, as I have no way to test it. 2010-03-15 Marcelo Jimenez * SF Patch Tracker [ 2724578 ] patch for avoiding memory leaks when add devices each time a device been added, UpnpInit() is called, on exit, UpnpFinish() is called, but the memories allocated by ThreadPoolInit() may lost because there's no code to call ThreadPoolShutdown() to release the memories. And inet_ntoa() is not thread safe, so in my patch, I substitute inet_ntoa() with inet_ntop(). 2010-03-14 Marcelo Jimenez * SF Patch Tracker [ 2964687 ] Add new string based accessors to upnp object API As per email to pupnp-devel, this is the patch to add the _strget_ accessors for string-like objects in the interface. Will add a further patch shortly to udpate the sample programs. 2008-06-27 Marcelo Jimenez * Nicholas Kraft's patch to fix some IPv6 copy/paste issues. He reported to be getting infinite loops with the svn code. 2008-06-13 Marcelo Jimenez * SF Bug Tracker [ 1984541 ] ixmlDocumenttoString does not render the namespace tag. Submitted By: Beliveau - belivo Undoing the patch that fixed this problem. In fact, there was no problem and the patch was wrong. 2008-06-11 Marcelo Jimenez * Ingo Hofmann's patch for "Content-Type in Subscription responses". Adds charset="utf-8" attribute to the CONTENT-TYPE header line. Hi, I have found an inconsistency regarding the text/xml content-type returned by libupnp. It looks like only subscription responses send "text/xml" where all other messages contain "text/xml; charset="utf-8"". Since I'm working on an DLNA device the latter behaviour is mandatory. I changed the according lines in gena_device.c (see attached patch). I'm not sure if it would be ok for other device to have the charset field but it would help me a lot :) Best regards, Ingo 2008-06-04 Marcelo Jimenez * SF Bug Tracker [ 1984541 ] ixmlDocumenttoString does not render the namespace tag. Submitted By: Beliveau - belivo The problem occurs when converting a xml document using ixmlDocumenttoString containing a namespace tag created with ixmlDocument_createElementNS. The namespace tag doesn't get rendered. example: The following code fragment prints: instead of: Code: #include #include int main() { IXML_Document* wDoc = ixmlDocument_createDocument(); IXML_Element* wRoot = ixmlDocument_createElementNS(wDoc, "urn:schemas-upnp-org:device-1-0", "root"); ixmlNode_appendChild((IXML_Node *)wDoc,(IXML_Node *)wRoot); DOMString wString = ixmlDocumenttoString(wDoc); printf(wString); free(wString); ixmlDocument_free(wDoc); return 0; } The problem was in the printing routine, not in the library data structure. 2008-05-31 Marcelo Jimenez * Charles Nepveu's suggestion of not allocating a thread for MiniServer when it is not compiled. 2008-05-24 Marcelo Jimenez * Ported Peter Hartley's patch to compile with mingw. 2008-05-24 Marcelo Jimenez * Added some debug capability to ixml. 2008-05-02 Marcelo Jimenez * Merged Charles Nepveu's IPv6 work. libupnp now is IPv6 enabled. 2008-02-06 Marcelo Jimenez * Breaking API so that we now hide internal data structures. 2008-02-06 Marcelo Jimenez * Rewrote Peter Hartley's patch to include a new extra header field in FileInfo. ******************************************************************************* Version 1.6.7 ******************************************************************************* 2010-03-21 Marcelo Jimenez * SF Patch Tracker [ 2836704 ] Patch for Solaris10 compilation and usage. Submitted By: zephyrus ( zephyrus00jp ) Obs by Marcelo: The issue with linking with -lsocket -lnsl -lrt is not covered in this changeset beacuse I don't have solaris to test. I will need some help from zephyrus in this regard. The issue will be addressed in a future changeset. Compilation for solaris I have used gcc3.x and gcc4.x under solaris 10 for x86 / 64 bits. A couple of Source file fixes were necessary for successful compilation and runtime behavior. threadutil/src/ThreadPool.c POSIX sched_setschduler() returns non-negative value for success. Without the fix, UpnpInit() fails immediately. upnpp/src/api/upnpai.c There is a typo of a macro name "__sun" in one of the CPP conditional. Without the fix, the compilation aborts due to unknown constant in socket ioctl call. A few structs and an array is not properly initialized. Well, I think it may be safe as is, but when I checked it using purify evaluation version, it was reported that uninitizlied iszBuffer may cause read of uninitialized memory. So play it safe. Configure issue. This has to be more of a configure magic. To link a program successfully using network, we need -lsocket and -lnsl library specifications on the link line. We also need -lrt for programs that use thread scheduling features. The sample program under upnp/sample requires -lsocket -lnsl -lrt for successful linking. I added -lsocket -lnsl -lrt to Makefile.in. configure probably needs to take care of these. I don't know much about configure, automake, etc., so I am just raising a flag here. TIA 2010-03-20 Marcelo Jimenez * SF Patch Tracker [ 2836704 ] Search for nested serviceList (not stopping at the first lis Submitted By: zephyrus ( zephyrus00jp ) Internet Gateway Device description contains nested serviceList (rootdevice -> servicelist, subdevice and subdevice has the lower-level serviceList, etc..) Unfrotunately, the sample code sample_util.c used by tv_device sample, etc. has a code that looks for only the first top-level serviceList. This results in the failure to read all the services of an IGD xml description. Attached patch modifies this behavior and looks for the service by visiting all the serviceList in xml document in turn. With the modified patch (ad additional modification), I could simulate an IGD device and created a modified control program for that. Patch against 1.6.6 TIA. 2010-03-15 Marcelo Jimenez * SF Patch Tracker [ 2203721 ] timeb.h check obsolete 2010-03-15 Marcelo Jimenez * SF Patch Tracker [ 2970872 ] Update ErrorMessages for latest return code list Submitted By: Nick Leverton ( leveret ) ErrorMessage[] in upnptools.c has got a bit out of sync, the attached patch (generated from grep 'define UPNP_E_') should bring it up to date. 2010-03-15 Marcelo Jimenez * SF Patch Tracker [ 2857611 ] Declare a few functions to have proper (void) argument list. Submitted By: zephyrus ( zephyrus00jp ) In a publicly installed headers, a few functions are declared without any arguments at all, a la "()". When I used gcc's -Wimplict and -Wstrict-prototypes to check for the mismatch of function prototype declarations and their usage in my own program, some headers from libupnp-1.6.6 produced warnings. They are not strictly bugs, but pretty much annoying. This is 2009, and almost all the important compilers understand ISO-C. So the offending functions are declared as "(void") to show that they have no arguments at all. 2010-03-14 Marcelo Jimenez * SF Patch Tracker [ 2546532 ] Missing carriage return between SOAPACTION and User-Agent headers. There is something going wrong in soap_ctrlpt.c at line 931 (based on version 1.6.6 release). The http_Makemessage call looks as follows: if (http_MakeMessage( &request, 1, 1, "Q" "sbc" "N" "s" "s" "Ucc" "sss", SOAPMETHOD_POST, path.buf, path.length, "HOST: ", host.buf, host.length, content_length, ContentTypeHeader, "SOAPACTION: \"urn:schemas-upnp-org:control-1-0#QueryStateVariable\"", xml_start, var_name, xml_end ) != 0 ) { return UPNP_E_OUTOF_MEMORY; } This will result in the SOAPACTION header to be immediately followed by the User-Agent header, while a cr-lf should separate the two. I propose to fix this by changing the second "s" to "sc" to force the addition of a cr-lf after the SOAPACTION. This looks consistent to the other Makemessage calls. 2009-03-06 Oxygenic * parameter problem fixed in soap_request_and_response(), 2nd call to http_RequestAndResponse() was wrong (thanks to Kim Kyungsan) 2008-07-25 Marcelo Jimenez * Added upnp/m4/libupnp.m4 to the distribution tarball. 2008-07-25 Marcelo Jimenez * Fixed a missing HandleUnlock() in upnp/src/gena/gena_device.c. 2008-07-24 Marcelo Jimenez * SF Bug Tracker [ 2026431 ] pupnp does not build on GNU/KfreeBSD. Submitted By: Nick Leverton - leveret Gnu/KFreeBSD is one of the Debian architectures, it includes a FreeBSD kernel with GNU userspace (glibc etc). The Gnu/KfreeBSD developers provided the attached patch to test the appropriate #define and allow pupnp to build in their environment, and asked me to forward it to you. Since the test is a simple check for defined(__GLIBC__), this would presumably also help with other ports of GNU libc to non-Linux kernels. 2008-07-16 Marcelo Jimenez * Andre Sodermans (wienerschnitzel) patch for building libupnp under windows systems with VC9. This one fixes a missing include. 2008-06-30 Marcelo Jimenez * Added an m4 macro to deal with finding libupnp in the users' configure script. 2008-06-11 Marcelo Jimenez * Fixed a buffer overflow due to a bug in the calculation of the CONTENT-TYPE header line size, the length was beeing calculated with the wrong string, there was a missing colon. 2008-06-02 Marcelo Jimenez * SF Bug Tracker [ 1942285 ] UpnpCreatePropertySet can leak memory. Submitted By: Bob Ciora - bobciora In file upnp/src/api/upnptools.c, function UpnpCreatePropertySet can leak memory if no additional arguments are passed. This is because of the 'return' statement at (or near) line 554. The prior call to ixmlParseBufferEx may succeed. This causes a basic ixml tree to be created. The return statement at line 554 leaves this tree in memory without cleaning it up. There are two options: either add code prior to the return at 554 to clean up the tree, or simply allow a NumArg parameter of 0 to be passed. I prefer the second method -- there doesn't seem to be any need to pass *any* arguments to this function. In my local copy of upnptools.c, I have simply replaced the "return NULL" in line 554 to "return PropSet". I've attached the source file. 2008-05-26 Marcelo Jimenez * SF Bug Tracker [ 1903069 ] Subs (not services) not marked 'active' Submitted By: Bob Ciora - bobciora If the UpnpAcceptSubscription is not called, the subscription is not marked as "active", so no state variables will ever be sent. I have a "lazy" architecture where a service may not be ready to publish any state data at the time of a subscription. Subscriptions are still accepted, there's just nothing to send, so UpnpAcceptSubscription is never called. As a result, the subscription is never marked as "active" via the genaInitNotify functions. A best course of action would be to modify UpnpAcceptSubscription<...> functions so that they can accept *no* initial state information, but can still result in the subscription being marked as active. Technically, then, the "active" flag should be set here, not in the genaInitNotify<...> functions. But the UpnpAccept functions don't muck with the subscription table, and it's more work than it's worth to move that code from the gena fucntions to the upnpapi functions. So--- what I've done to correct this problem is to modify both UpnpAcceptSubscription<...> functions (in upnppapi.c) to accept an empty state list and still call the gena layer functions. The gena layer genaInitNotify<...> functions (gena_device.c) then mark the subscription as "active" *before* checking for an empty state set. In genaInitNotify, a check for "var_count <= 0" is added immediately after the "subs->active = 1;" line. If this occurs, then all cleanup is performed and the function returns GENA_SUCCESS (since now, an empty state list is not an error). The same check is made for "PropSet == 0" in genaInitNotifyExt (just after the "subs->active = 1;" line). I've modifified my proxy layer to call UpnpAcceptSubscriptionExt even when there is no state data to send. With the suggested changes to gena_device.c, later state changes are sent correctly. This has solved my problem. 2008-04-28 Marcelo Jimenez * Fix in function SetSeed() in threadutil/src/ThreadPool.c for CYGWIN compilation. Thanks to Gary Chan. ******************************************************************************* Version 1.6.6 ******************************************************************************* 2008-04-24 Marcelo Jimenez * Added thread id's to the UpnpPrintf debug messages. Thanks to Charles Nepveu for the idea. 2008-04-24 Marcelo Jimenez * SF Bug Tracker [ 1948586 ] Uppercase U in in "xmlns:U" in Invoke Action causes seg. f. Submitted By: Thomas Norheim - kjakan_no Device no longer segfaults with the following malformed xml action: 2 2008-04-23 Marcelo Jimenez * Use -O0 in debug builds so that variables do not get optimized out. 2008-04-10 Marcelo Jimenez * Apostolos Syropoulos changes for OpenSolaris x86. 2008-03-20 Marcelo Jimenez * Andre Sodermans (wienerschnitzel) patch for building libupnp under windows systems with VC9. 2008-03-20 Marcelo Jimenez * Andre Sodermans (wienerschnitzel) patch for building libupnp under windows systems with VC8. 2008-03-08 Marcelo Jimenez * Fixed a printf format problem on the upnp_tv_device.c from both upnp/sample/tvdevie and upnp/sample/tvcombo directories. The variable port was a short int instead of an unsigned short and it was beeing print as a negative value. 2008-03-08 Marcelo Jimenez * SF Bug Tracker [ 1902668 ] Cannot compile on MSVC Submitted By Luke Kim - nereusuj Version 1.6.5 cannot be compiled because of some changes in 1.6.3. MSVC does not support stdint.h, gettimeofday(), sys/param.h, const int variables in array size and Windows does not define _WINDOWS_ but define _WINDOWS. * MSVC does not understand "const int"'s as declarators of array dimensions, we must use #define'd constants. * Use WIN32 instead of _WINDOWS_ or _WINDOWS. 2008-02-22 Marcelo Jimenez * No longer ignore "upnp:rootdevice" advertisement. Thanks to Bob Ciora. 2008-02-10 Marcelo Jimenez * Changed "sys_errlist[errno]", which is deprecated, by "strerror_r()", which is thread safe. 2008-02-06 Marcelo Jimenez * Slightly improved error report by showing the sys_errlist string corresponding to errno. 2008-02-06 Marcelo Jimenez * Got rid of two useless constants: UPNP_SOCKETERROR and UPNP_INVALID_SOCKET. They both mean the same, that a network API function has failed. -1 is the value to check, not an invented constant. ******************************************************************************* Version 1.6.5 ******************************************************************************* 2008-02-02 Marcelo Jimenez * Peter Hartley's fix for wrong sized variable beeing passed to http_MakeMessage() on 64 bit architectures. ******************************************************************************* Version 1.6.4 ******************************************************************************* 2008-01-23 Marcelo Jimenez * Workaround for a problem with the new automake AM_CONDITIONAL macro from autotools-1.10. Thanks to Ingo Hofmann for helping with debugging this one. 2008-01-22 Marcelo Jimenez * Added quoting to macros AC_CONFIG_AUX_DIR, AC_CONFIG_MACRO_DIR and AC_CONFIG_SRCDIR in configure.ac. Also changed the name of the auxiliary directory in AC_CONFIG_AUX_DIR to build-aux. 2008-01-22 Marcelo Jimenez * Fix for setsockopt() in Threadpool.c to allow more than one process to join the multicast-group on OSX. Thanks to Ingo Hofmann. 2008-01-22 Marcelo Jimenez * Using defined(__OSX__) || defined(__APPLE__) instead of just defined(__OSX__) in the code. Thanks to Ingo Hofmann and Chris Pickel. 2008-01-21 Marcelo Jimenez * Fix for isFileInVirtualDir. Thanks to Peter Hartley for the patch. 2008-01-07 Marcelo Jimenez * Putting back a "defined(__OSX__)" that has been removed in the previous *BSD patch. Thanks to Chris Pickel for pointing it out. 2008-01-07 Marcelo Jimenez * SF Patches Tracker [ 1865812 ] typo in docs comment Submitted By: Hartmut Holzgraefe - hholzgra typo in docs comment ACCAPTED instead of ACCEPTED in @name UPNP_E_UNSUBSCRIBE_UNACCAPTED [-302] Also, the documentation file name was mispelled and was corrected in the Makefile.am. ******************************************************************************* Version 1.6.3 ******************************************************************************* 2007-12-25 Marcelo Jimenez * Using pthread flags for the whole project, not just at the places individually indicated by several Makefile.am files spread all over the directories. That was too much error prone. 2007-12-24 Marcelo Jimenez * Added a configure test to check if pthread_rwlock_t is available. Define _GNU_SOURCE if needed. The fallback behaviou will only be implemented if _GNU_SOURCE prooves to be insufficient on some platforms. Thanks to Jonathan Casiot (no_dice) and Robert Gingher (robsbox). 2007-12-17 Marcelo Jimenez * Removed unused iasnprintf.{c,h} files. 2007-12-17 Marcelo Jimenez * Removed STATSONLY() macro from ThreadPool.{c,h}. * Removed time() usage from ThreadPool.c. * Fixed STATS = 0 compilation. 2007-12-16 Marcelo Jimenez * Library was not compiling on FreeBSD 7. Code now no longer uses ftime(), using gettimeofday() instead. Thanks to Josh Carroll. ******************************************************************************* Version 1.6.2 ******************************************************************************* 2007-12-10 Marcelo Jimenez * Fixed a compilation error due to a missing #ifdef in upnp/src/genlib/miniserver/miniserver.c. Thanks to Eugene Christensen. 2007-11-12 Marcelo Jimenez * "make check" was failing because ixml/test/test_document.sh did not have the executable flag set. Thanks to Steve Bresson. 2007-11-12 Marcelo Jimenez * Fixed a memory leak in upnpapi.c to delete gMiniServerThreadPool in the call to UpnpFinish(). Thanks to Fabrice Fontaine. 2007-11-09 Marcelo Jimenez * Added a isleep() call to the error handler of select() in RunMiniServer(), so that it does not take 100% cpu in case select() fails repeatedly. ******************************************************************************* Version 1.6.1 ******************************************************************************* 2007-11-07 Marcelo Jimenez * SF Bug Tracker [ 1825278 ] AdvertiseAndReply sleeps with handle lock out Applied patch from Alex (afaucher) to change some write locks to read locks. 2007-11-06 Marcelo Jimenez * Adjusting libtool library numbers to reflect the last changes. 2007-11-06 Marcelo Jimenez * SF Bug Tracker [ 1825278 ] AdvertiseAndReply sleeps with handle lock out GlobalHndMutex, which was a mutex is now GlobalHndRWLock, which is a rwlock. HandleLock() is mapped to HandleWriteLock() while all other instances have not been checked. One instance in AdvertiseAndReply() has been changed to HandleReadLock(). Thanks to Alex (afaucher) for the bug report and suggestions. 2007-11-06 Marcelo Jimenez * Added support for rwlocks. 2007-11-05 Marcelo Jimenez * SF Bug Tracker [ 1825929 ] woker thread still alive after UpnpFinish() Submitted By: Luke Kim - nereusuj Worker thread still alive after calling UpnpFinish() because ThreadPoolShutdown() is in the #ifdef DEBUG block. 421 422 #ifdef DEBUG 423 ThreadPoolShutdown( &gSendThreadPool ); 424 ThreadPoolShutdown( &gRecvThreadPool ); 2007-08-28 Marcelo Jimenez * Changed the calls to virtualDirCallback.open(filename, UPNP_WRITE) to (virtualDirCallback.open)(filename, UPNP_WRITE) (notice the parenthesis) due to a change in glibc that produces compilation errors. 2007-08-28 Marcelo Jimenez * Initialization of the "randomness" struct so that valgrind does not complain. 2007-08-06 Marcelo Jimenez * Merge of patch submitted By Keith Brindley - brindlk SF Bug Tracker [ 1762758 ] Seek not working for large files Problem: Requests from the uPnP client to seek to a position beyond 2GB in a large file are handled as a request to see from the 2GB point. Impact: Varies depending on client. The Xbox 360 kills the connection when it realises. Solution: GetNextRange function (webserver.c) is updated to handle large file sizes. Fix should also recognise when built on a 32bit platform rather than 64 and handle accordingly. 2007-08-05 Marcelo Jimenez * Merge of Mac OS X patch from Stéphane Corthésy (davelopper), SF Bug Tracker [ 1686420 ] Modifications for MacOSX. Some of the proposed changes were already done by Rene Hexel's patch. ******************************************************************************* Version 1.6.0 ******************************************************************************* 2007-06-10 Marcelo Jimenez * More fixes to Mac OS X and NetBSD from Rene Hexel: [pupnp-devel] NetBSD & Mac OS X packages and patches Okay, I found a couple more things. I have attached a patch file against the trunk (version 206) that make the repository code compile and run on both Mac OS X and NetBSD. This fixes the following issues: upnp/src/api/upnpapi.c: SIOCGIFCONF didn't work properly, use getifaddrs() instead (on BSD systems). threadutil/src/ThreadPool.c: priorities only work if _POSIX_PRIORITY_SCHEDULING is defined (and greater than 0). threadutil/src/LinkedList.c and threadutil/src/iasnprintf.c: use stdlib.h instead of malloc.h on all BSD systems (not just FreeBSD). This is important, because malloc.h does not exist on Darwin/Mac OS X. Cheers , Rene 2007-06-09 Marcelo Jimenez * [pupnp-devel] NetBSD & Mac OS X packages and patches. Rene Hexel's patch to compile in NetBSD and Mac OS X. 2007-05-26 Marcelo Jimenez * Updated the macro files acx_pthread.m4, ax_cflags_gcc_option.m4, ax_cflags_warn_all.m4, m4/ax_cflags_warn_all_ansi.m4, m4/type_socklen_t.m4. 2007-05-26 Marcelo Jimenez * Fixed an issue with the instalation of the file upnpdebug.h. Since the last modifications that removed the macro DEBUV_ONLY, this file must be installed even on a non-debug build. 2007-05-26 Marcelo Jimenez * SF Bug Tracker [ 1711325 ] Bad DestAddr in Upnp_Discovery structure Submitted By: Bob Ciora The field DestAddr of the structure Upnp_Discovery is now a full SOCKADDRIN instead of a pointer to SOCKADDRIN. Commented code sugests that in a previous moment, the function ssdp_handle_ctrlpt_msg() did not use a postponed thread to call ctrlpt_callback(). Now the code uses a thread, and most probably the original data would get lost and the pointer would point to an invalid memory region. This fix caused an interface change in the library and the minor library version was bumped. Also, the libtool library numbers were changed accordingly. ******************************************************************************* Version 1.4.7 ******************************************************************************* 2007-05-26 Marcelo Jimenez * Added support for the Basic Device (http://www.upnp.org/standardizeddcps/basic.asp) as suggested by Titus Winters. 2007-05-25 Marcelo Jimenez * Fixed the file libupnp.pc.in to generate a correct path for the include files. 2007-05-25 Marcelo Jimenez * Removing the Dbg_Level, InitLog, SetLogFileNames and CloseLog defines. These were just aliases, no reason to keep them. 2007-05-25 Marcelo Jimenez * Changed the comments of the include files that expose the UPnP API to use only C89 comments and no C99 comments. 2007-05-24 Nektarios K. Papadopoulos * Added tvcombo sample that demonstrates coexistence of a device and a control point in the same application. 2007-05-24 Nektarios K. Papadopoulos * SF Tracker FR [ 1570020 ]. * Enable both device and control point in the same application. Resolve deadlock in the SSDP processing threads. * Fix Threadpool expansion condition. Thanks to Siva Chandran P. for the original patch. 2007-05-24 Nektarios K. Papadopoulos * Modified tvdevice (control and picture) service descriptions to make compatible with WinXP/IE control point. 'in' arguments must appear before 'out' arguments in argument list. Thanks to Martin Tremblay for pointing out the solution originally provided by MORIOKA Yasuhiro. 2007-05-21 Marcelo Jimenez * More MSVC fixes, using XINLINE instead of inline, MSVC has troubles with inline. Thanks to David Maass for reporting. * Changed XINLINE to UPNP_INLINE. 2007-05-21 Marcelo Jimenez * Added the file build/inc/msvc/inttypes.h. This file is for use with MSVC only, because it does not provide C99 compatibility. 2007-05-18 Marcelo Jimenez * Removed all uses of the DEVICEONLY(x) macro. 2007-05-17 Marcelo Jimenez * Removed all uses of the DBGONLY(x) macro. A static inline empty function now is used and the compiler takes care of optimizing it out. 2007-05-17 Marcelo Jimenez * Fixed a bug in UpnpPrintf, function could call va_start() and return befor calling va_end(). 2007-05-15 Marcelo Jimenez * EXPORT_SPEC missing on some declarations in ixml/inc/ixml.h. Thanks to David Maass. 2007-05-15 Marcelo Jimenez * sizeof is unsigned, so %zu is more adequate than %zd. 2007-05-15 Marcelo Jimenez * Using an invented printf directive PRIzu that on MSVC expands to "lu", and on normal C99 compilers expands to "zu". 2007-05-15 Marcelo Jimenez * Rewrote raw_find_str. Now it no longer uses strcasestr(), but it transforms the first input buffer into lowercase. 2007-05-08 Marcelo Jimenez * Fix for debug printf format strings. size_t are not expected in a string format like "%.*s". 2007-05-08 Marcelo Jimenez * Added inttypes.h as a header requirement in configure.ac. 2007-05-11 Marcelo Jimenez * Moved upnp_tv_ctrlpt and upnp_tv_device executables from folder upnp to folder upnp/sample. Moved folder upnp/sample/tvdevice/web to folder upnp/sample/web. This way, if someone compiles the tarball and executes upnp_tv_device from its creation directory, there will be no error -108 for not finding directory web. ******************************************************************************* Version 1.4.6 ******************************************************************************* 2007-04-19 Marcelo Jimenez * Fix for freebsd host_os in configure.ac. ******************************************************************************* Version 1.4.5 ******************************************************************************* 2007-04-19 Marcelo Jimenez * Case insensitive comparison in raw_find_str() (httpparser.c) as suggested by Craig Nelson in SF Tracker [ 1689382 ] DLINK DIR-625 patch. 2007-04-07 Nektarios K. Papadopoulos * Fix for a bug in makeAction where va_arg was beeing called one extra time. 2007-04-28 Marcelo Jimenez * SF Tracker [ 1703533 ] Patch to make it compile under FreeBSD Submitted By: Timothy Redaelli - drittz I made some patches to make it compile under FreeBSD using gethostbyaddr_r when supported. 2007-04-28 Marcelo Jimenez * [pupnp-devel] Type mixup on x86_64 causes UPNP_E_OUTOF_MEMORY Submitted By: Glen Masgai after an UpnpSendActionAsync() for example, i get UPNP_E_OUTOF_MEMORY in the callback using 1.4.4 on a x86_64 system. This happens in http_MakeMessage(), which in some cases get called with wrong types (int instead of size_t) in combination with format "b" and "Q". The attached patch should fix this. ******************************************************************************* Version 1.4.4 ******************************************************************************* 2007-04-06 Marcelo Jimenez * SF Tracker [ 1695399 ] Typo in util.h Submitted By: Luke Kim - nereusuj Unix sleep is in seconds but WIN32 Sleep is in milliseconds. 2007-04-17 Marcelo Jimenez * SF Tracker [ 1652827 ] UpnpRegisterRootDevice returned -104 Submitted By: Michael Andersen - miwer Issue was found to be related to sizeof (size_t) != sizeof (int) on AMD64 systems. Emil Ljungdahl's AMD64 patch has been applied along with some other fixes. Original user report follows: When I run upnpd I get the above mentioned error (UPNP_E_OUTOF_MEMORY). I've tried with 1.4.1 and 1.4.2-RC3, it's the same. I don't understand why, because I have plenty of RAM, and I even tried closing some applications, but it didn't help. $ upnpd eth1 br0 The following is logged in the /var/log/messages: Feb 6 01:33:47 server upnpd[6933]: Error registering the root device with descDocUrl: http://192.168.0.1:49152/gatedesc.xml Feb 6 01:33:47 server upnpd[6933]: UpnpRegisterRootDevice returned -104 I tried enabling debugging and it looks like it cannot allocate memory through the membuffer_append function. It's wierd because it's only a few bytes. Please note, that I enabled some extra debugging lines that were commented, in order to get more information. See attached files. ******************************************************************************* Version 1.4.3 ******************************************************************************* 2007-03-13 Marcelo Jimenez * SF Tracker [ 1663004 ] Compile on Cygwin Submitted By: Jon Foster - jongfoster This patch gives basic support for building under Cygwin - it compiles, links, and a simple UPnP device application can initialise. I'm not sure if it actually works yet, but this is definitely a step in the right direction. Patch is against the 1.4.1 release. Changes are: * threadutil/inc/ithread.h: Fix the ithread mutex support to use documented, portable APIs (if present) rather than the Non-Portable (_NP) ones it uses now. This is required because Cygwin implements only the portable API. * threadutil/src/ThreadPool.c: Fake SetPolicyType() to do nothing on Cygwin because otherwise it fails. Should probably investigate why it fails and add a proper implementation later. * upnp/src/api/upnpapi.c: On Cygwin, zero out the GlobalHndMutex structure before initialising it. Without this, the initialisation fails. This appears to be a bug in Cygwin. * upnp/src/genlib/net/uri/uri.c: Use gethostbyname() on Cygwin. 2007-03-05 Oxy * Code adapted and typedefs added to compile cleanly under Windows with Borland C++ Builder and MS Visual C++ 2007-03-03 Marcelo Jimenez * Fixed nasty segmentation fault bug on membuffer.c. ******************************************************************************* Version 1.4.2 ******************************************************************************* 2007-02-09 Marcelo Jimenez * 32/64 bits portability issues on *printf. Use %zd for size_t, and cast to (long long) for off_t. 2007-02-02 Marcelo Jimenez * Bumped the program version to 1.4.2 in config.ac. * Now requires autoconf 2.60. * Fixed docdir use. * Does not install the documentation by default. * Use dist-bzip2 to create a .bz2 distribution file. 2007-01-23 Marcelo Jimenez * SF Tracker [ 1634922 ] Support for large files (>= 2 GiB), part 2 Submitted By: Jonathan Casiot - no_dice Summary: This patch hopefully fixes the remaining types and related code to enable files >= 2 GiB to be streamed. Jonathan claims to have tested this with a patched version of ushare-0.9.8 and a D-Link DSM-520. 2007-01-09 Marcelo Jimenez * SF Tracker [ 1628629 ] Multicast interface patch Submitted By: Fredrik Svensson - svefredrik This patch fixes two problems: 1) Specify the IP address for the interface when we do setsockopt IP_ADD_MEMBERSHIP. This makes it possible to run when no default router has been configured. 2) Explicitly set the multicast interface through setsockopt IP_MULTICAST_IF. Avoids socket error -207 in some cases. * SF Tracker [ 1628590 ] XML parsing segfault patch Submitted By: Fredrik Svensson - svefredrik This patch fixes a segmentation fault problem that occurrs when parsing XML code than some routers produce. 2007-01-06 Marcelo Jimenez * SF Tracker [ 1628552 ] XML white space patch Submitted By: Fredrik Svensson - svefredrik * SF Tracker [ 1628562 ] Maximum total jobs patch Submitted By: Fredrik Svensson - svefredrik Also, I incremented the libray versions and included some comments in the file configure.ac so that we do not bump the library version excessively, only the necessary numbers on the next release. * SF Tracker [ 1628575 ] Linksys WRT54G patch Submitted By: Fredrik Svensson - svefredrik * SF Tracker [ 1628636 ] SSDP packet copy patch Submitted By: Fredrik Svensson - svefredrik Changed NUM_COPY to 1 since, according to section 9.2 of the HTTPU/MU spec, we should never send more than one copy of a reply to an SSDP request. Ref. section 9.2 of http://www.upnp.org/download/draft-goland-http-udp-04.txt 2006-12-23 Marcelo Jimenez * Thorough revision of every call of http_MakeMessage() due to a bug introduced in rev.79 "largefile patch added". http_MakeMessage() has a worst than brain damaged "printf" like interface. In rev.79, the "N" format parameter must be an off_t. Every call of this function with an "N" format parameter and an int passed on the stack would fail terribly. * SF Bug tracker [ 1590469 ] Typo in ixmlparser.c Submitted By: Erik Johansson - erijo * SF Bug Tracker [ 1590466 ] Invalid xml output Submitted By: Erik Johansson - erijo * SF Patch tracker [ 1581161 ] VStudio2005 patch Submitted By: David Maass - darkservant * SF Patch tracker [ 1587272 ] const-ified ixml Submitted By: Erik Johansson * Finished const-ifications as suggested by Erik Johansson in SF Patch tracker [ 1587272 ]. 2006-07-05 Nektarios K. Papadopoulos * [bug-id] 1580440 [submitted-by] Erik Johansson - erijo [patched-by] Erik Johansson - erijo The SOAP HTTP message that's generated on upnp errors is missing a \r\n\ between header and body. 2006-07-07 Oxy * support for large files (>2 GBytes) added ******************************************************************************* Version 1.4.1 ******************************************************************************* 2006-07-07 Oxy * full support for Windows added, static library and DLL are fully working, code compiles with Borland Builder C++ and MS Visual C/C++ 2006-07-05 Nektarios K. Papadopoulos * Include prebuilt documentation (html,pdf), dropping doc++ dependancy. 2006-07-03 Marcelo Jimenez * Patch for FreeBSD, thanks to Markus Strobl. 2006-06-26 Marcelo Jimenez * Fix for missing "else" in httpreadwrite.c. Thanks to npapadop for the patch. 2006-06-26 Marcelo Jimenez * Fix for va_list initialization in x86_64 architectures. 2006-06-08 Oxy * Patch to fix memory leaks and reasons for crashes added (thanks to loigu) ******************************************************************************* Version 1.4.0 ******************************************************************************* 2006-05-26 Oxy * defines in iasnprintf.h changed to work with GCC-version < 3 2006-05-22 Oxy * BSD-patch added (not tested yet on an BSD system) 2006-05-19 Oxy * Patch added for bug: ixml parser colapsed on empty args (arg="") 2006-05-18 Oxy * DSM-320 patch added (fetched from project MediaTomb) * httpGet additons atch added, Added proxy support by introducing UpnpOpenHttpGetProxy. UpnpOpenHttpGet now just calls UpnpOpenHttpGetProxy with the proxy url set to NULL. * Bugfix for typo ("\0" / "0") in ixmlparser.c * Bugfix for M-Search packet ******************************************************************************* FORK FROM DEAD libupnp ******************************************************************************* 2006-04-29 Rémi Turboult * THANKS: new file with list of contributors * upnp/src/gena/gena_device.c (respond_ok): add 'Content-Length: 0' in subscription response. Patch by Chaos (Bug # 1455367). 2006-04-08 Rémi Turboult * upnp/doc/UPnP_Programming_Guide.pdf: replace this document with the one in libupnp-doc-1.2.1 because current CVS version was corrupted. 2006-04-06 * changes applied to several files to work under Sparc Solaris, temporarily requiring a define SPARC_SOLARIS 2006-04-03 Rémi Turboult * upnp/Makefile.am: install upnp samples in $(docdir)/examples 2006-03-28 Rémi Turboult * configure.ac: add --with-docdir option to choose where documentation is installed (or -without-docdir to not install the documentation) 2006-03-27 Rémi Turboult * ixml/test: add simple test suite for xml parser 2006-03-26 Rémi Turboult * ixml/src/ixmlparser.c (Parser_processCDSect): fix bug which prevents CDATA sections which contain a 0 (zero) to be parsed (instead the parsing of the whole document is aborted). Patch by Arno Willig (Patch # 1432124). * configure.ac, upnp/Makefile.am: add "--disable-samples" configure option, and move samples compilation from check_PROGRAMS to noinst_PROGRAMS 2006-03-25 Rémi Turboult * upnp/src/genlib/miniserver/miniserver.c (get_miniserver_sockets): fix bug if new socket created has fd 0 (can only occur when stdin has been closed). Patch by Oskar Liljeblad 2004-07-02 : http://sourceforge.net/mailarchive/message.php?msg_id=8870528 2006-03-21 Rémi Turboult * upnp/test/test_init.c: add some version checks and exit if failure 2006-03-05 Rémi Turboult * libupnp version 1.3.1 * upnp/inc/upnpconfig.h.in: add new define UPNP_VERSION_PATCH * upnp/test/test_init.c: add simple test to run during checks * upnp/inc/upnp.h: include "upnpdebug.h" only if debug enabled in the library (else header file is not installed) * upnp/Makefile.am (libupnp_la_LDFLAGS): add inter-library libtool dependencies between upnp and ixml / threadutil, so that programs linking against upnp only still work. 2006-03-04 Rémi Turboult * libupnp version 1.3.0 2006-03-03 Rémi Turboult * upnp/src/genlib/net/http/httpreadwrite.c (get_sdk_info): use package version string from configure to set sdk info * upnp/Makefile.am: add sample/tvdevice/web/ files in EXTRA_DIST + do not distribute generated upnpconfig.h file. 2006-02-28 Rémi Turboult * upnp/src/inc/config.h, configure.ac: use only new defines UPNP_HAVE_xx instead of INCLUDE_yyy_APIS and INTERNAL_WEB_SERVER * upnp/Makefile.am, ixml/Makefile.am: add -export-symbols-regex to the librarie LDFLAGS in order to export only the symbols defined in the API 2006-02-27 Rémi Turboult * configure.ac: add libtool versions for the 3 libraries * ixml/src/ixml.c (copy_with_escape): add missing 'static' to function * threadutil/src/ThreadPool.c (SetSeed): add missing 'static' 2006-02-26 Rémi Turboult * threadutil/inc/iasnprintf.h: add gcc __printf__ format attribute to "iasnprintf" * upnp/src/api/upnpapi.c: fix invalid UpnpPrintf formats * upnp/src/gena/gena_device.c: fix invalid UpnpPrintf formats * upnp/src/inc/config.h: move upnp/inc/config.h to internal sources (this file is no longer installed with the libraries) * upnp/inc/upnpdebug.h: new file created from debug definitions previously in upnp/inc/config.h * upnp/src/api/config.c: rename to upnp/src/api/upnpdebug.c * upnp/inc/upnpconfig.h.in: new file to contain information on the configuration of the installed libraries (generates installed file ) 2006-02-22 Rémi Turboult * upnp/ : add missing include of config.h in some .c files 2006-02-21 Rémi Turboult * upnp/inc/upnp.h: move some definitions which should not be exported into "upnp/src/inc/util.h" * import all modifications below from libupnp in djmount 0.51 into official libupnp 2006-01-17 Rémi Turboult * threadutil/Makefile.am (libthreadutil_la_SOURCES): remove extraneous file 2006-01-15 Rémi Turboult * configure.ac: add checks for large-file support * upnp/inc/config.h: rename to "upnpconfig.h". The new "config.h" file is the one generated by autoconf. * m4/type_socklen_t.m4: added new check for socklen_t (fallback to int if not defined) * upnp/src/genlib/miniserver/miniserver.c, upnp/src/ssdp/ssdp_server.c: use socklen_t where appropriate (instead of int) * upnp/src/genlib/net/http/httpreadwrite.c (get_sdk_info): remove XINLINE declaration (unused and too late) * ixml/src/node.c (ixmlNode_getNodeType): fix compilation warning on const return type 2006-01-12 Rémi Turboult * upnp/src/inc/readwrite.h : suppress unused C++ header file 2006-01-11 Rémi Turboult * upnp/inc/config.h, upnp/src/inc/upnpapi.h, upnp/src/inc/httpreadwrite.h: remove internal configuration variable MINIMUM_DELAY (no clear purpose) 2005-12-05 Rémi Turboult * upnp/inc/upnp.h: re-declare obsolete method UpnpSetContentLength, for binary compatibility with previous libupnp version. * upnp/src/api/upnpapi.c: correct type of g_maxContentLength to size_t 2005-11-01 Rémi Turboult * autoconfiscate library : replace all makefiles by Makefile.am for automake support, + preliminary autoconf support (generated config.h not yet used in source files) 2005-10-18 Rémi Turboult * upnp/src/makefile: fix location of DEBUG STATIC libupnp library * upnp/sample/tvctrlpt/linux/Makefile, upnp/sample/tvdevice/linux/Makefile: fix STATIC library support 2005-10-16 Rémi Turboult * threadutil/src/Makefile (clean): remove built library 2005-08-28 Rémi Turboult * ixml/src/ixml.h, ixml/src/ixml.c (ixmlRelaxParser) : new function * ixml/src/ixmlparser.h, ixml/src/ixmlparser.c (Parser_setErrorChar) : new function 2005-08-02 Rémi Turboult * ixml/src/Makefile: correct bug for static library being incorrectly stripped when building non-debug 2005-06-09 Rémi Turboult * ixml/src/element.c (ixmlElement_removeAttributeNode): remove some compilation warning * ixml/inc/ixml.h, ixml/src/document.c : add some missing const's in public API * upnp/inc/upnptools.h, upnp/src/api/upnptools.c : add missing const's in public API 2005-05-28 Rémi Turboult * upnp/inc/config.h: suppress HTTP_READ_BYTES (unused) and replace by DEFAULT_SOAP_CONTENT_LENGTH (previously in upnpapi.h) * upnp/inc/upnp.h, upnp/src/api/upnpapi.c : replace UpnpSetContentLength (which was not using its Handle argument) by global function UpnpSetMaxContentLength. Remove "hard" limitation to 32K (not suitable for using in UPnP AV). * upnp/src/inc/upnpapi.h : removed DEFAULT_SOAP_CONTENT_LENGTH (moved to config.h) and MAX_SOAP_CONTENT_LENGTH (now unused) * upnp/src/api/upnptools.c : add more error message strings * upnp/src/genlib/net/http/httpreadwrite.c : return OUTOF_BOUNDS instead of BAD_HTTPMSG when allowed Content Length is exceeded. * upnp/src/genlib/net/http/httpreadwrite.c : corrected an incorrect sprintf format 2005-05-27 Rémi Turboult * upnp/makefile, upnp/src/makefile, ixml/Makefile, ixml/src/Makefile, threadutil/Makefile, threadutil/src/Makefile : implement STATIC library support (from patch at http://sourceforge.net/tracker/?group_id=7189&atid=307189 ) 2005-05-26 Rémi Turboult * upnp/src/api/upnpapi.c, upnp/src/soap/soap_device.c, upnp/src/soap/makefile : corrections for compilation with CLIENT=1 only * importing "libupnp-1.2.1a" as baseline