# HUPnP Changelog

HUPnP 0.7.0 [Oct 6, 2010]
--------------------------------------------------------------------------------
- Added classes for setting up each component of the device model. 
See the reference documentation about the device model creation for more details.

- Modified the structure and contents of the "include" directory and 
added the possibility to "deploy" the built binaries and public headers to a 
folder for easier deployment (using "make install").

- Introduced "information" classes for each core component of the device model. 
These classes contain static information read from description documents.

- Added the possibility to define whether HDeviceHost runs user code in a 
single or multiple threads.

- Added support for HTTP authentication during client-side action invocation.

- Added the possibility to execute action invocation in a "fire and forget" manner.

- Improved the extensibility of HControlPoint's and HDeviceHost's configuration 
classes.

- Modified the HActionArgument and HActionArguments to use value-semantics in full.

- Modified the access modifiers of several methods in the components of the 
device model to improve extensibility.

- Modified the HAction's generic error codes to use an enumeration rather 
than static member functions.

- Unified some of the names of similar methods amongst device model components.

- Removed the use of Qt's event dispatcher from HControlPoint and HDeviceHost.

- Prefixed the include directives to Qt headers in public HUPnP header files to 
include the Qt module name.

- Fixed a bug, which exposed a few private exception classes to public interface. 
HUPnP should not expose exceptions into the public interface anymore.

- Fixed several bugs in event handling, action invocation and component 
initialization that could  have caused dead-lock situations.

- Fixed a possible crash bug in generation of a SOAP error message.

- Fixed a bug in service description parse code in relation to allowed value ranges.

- Fixed a possible crash bug in client-side action invocation.

- Fixed a possible crash bug in the shutdown of a control point and device host.

- Fixed a bug in generic HTTP messaging related to handling packets that lack 
the "content-length" header.

- Modified build settings to enable the Qt Creator's "shadow build" feature.

- Did internal refactoring in various places.

- Many small optimizations, code cleansing and general improvements not worth 
mentioning individually. 

- Updated documentation.

Special thanks to Sebastian Marek <s.marek@avm.de>, Nikhil Marathe <nsm.nikhil@gmail.com> 
and Paulo Romulo <p.romuloo@gmail.com> for testing and using the library and 
reporting their findings and ideas to me. Much appreciated.

HUPnP 0.6.0 [June 25, 2010]
--------------------------------------------------------------------------------
- License changed from GPLv3 to LGPLv3.

- Significant modifications to the HUPnP device model. See the reference documentation for more information.

- Added support for specifying the network interfaces to be used with the HUPnP hosting API.

- Added support for a unicast device discovery into the HControlPoint.

- Added various helper methods to some of the members of the device model and the hosting API.

- Added support for retrieving runtime status information of a HDeviceHost.

- Modified asynchronous action invocation to use a class named HAsyncOp to abstract 
the use of various input and output arguments controlling the execution and waiting of an asynchronous operation.

- Modified the usage semantics and the interface of HSsdp. See the reference documentation for more information.

- Modified the SSDP layer to send messages with the destination UDP port set to 0 to the port 1900.

- Renamed several classes and enumerations to improve clarity.

- Fixed a bug in HMulticastSocket relating to operations targeted at a multicast group using a specific network interface.

- Fixed a bug in the initialization of HControlPoint.

- Fixed a bug relating to client-side action invocation, which in certain error scenarios resulted in a null pointer dereference.

- Did internal refactoring in various places.

- Many small optimizations, code cleansing and general improvements not worth mentioning individually. 

- Updated documentation.

Special thanks to Nikhil Marathe <nsm.nikhil@gmail.com> for testing and using the library and reporting his findings to me. Much appreciated.
--------------------------------------------------------------------------------

HUPnP 0.5.0 [May 1, 2010]

The changes done between 0.4 and 0.5 were significant and the list below is far from complete. For much more information of what has been you can check the version control history.

- Major redesign of the hosting API. Both HControlPoint and HDeviceHost were changed notably in an attempt to add more power, configurability and extensibility to the classes.
  
- HDeviceHost and HControlPoint no longer expose the device trees (HUPnP device model) using QSharedPointer. Raw pointers are used instead.

- Modified the HControlPoint and HDeviceHost API regarding return values of various methods. Now methods signal failure with a boolean return value and the last error occurred can be checked with a separate call.

- Modified the design of action arguments. Input and output arguments are no longer separated at type-level.

- Did numerous modifications to improve interoperability with other UPnP software. Generally this meant lessening the strictness of HUPnP or making the level of strictness "configurable".

- Did significant changes to the SSDP layer. Mainly the changes were about cleaning the API and making it more powerful. However, the implementation was improved as well. The changes include several bug fixes and improve interoperability with other UPnP software.

- Event subscription at the control point now uses Qt event loop only (used threads before). This change is part of the plan of reducing worker thread usage to absolute minimum and attempting to utilize the Qt event loop as much as possible instead.

- Added proper support for MX wait time during discovery.

- Removed the 'T' postfix of certain type definitions, as it isn't part of the Qt's design conventions. Along with this change some type definitions were also renamed, such as HServicePtrList was changed to HServiceList and HDevicePtrList was changed to HDeviceList.

- Renamed the toReadable() and toWritable() methods in HStateVariable to readable() and writable() to better convey the semantics that new unrelated types are not created. 

- Fixed several bugs relating to URL handling.

- Fixed a possible null pointer dereference bug in HException.

- Fixed a few bugs in creation of event subscription messages.

- Fixed a few bugs in the HDeviceHost relating to UPnP event handling.

- Fixed a crash bug in the simple test app.

- Fixed a bug relating to multicast address check in HEndpoint.

- Fixed a few bugs in general HTTP messaging / handling.

- Various logging improvements.

- Did internal refactoring in various places.

- Removed insulation from several small classes that are unlikely to change.

- Many small optimizations, code cleansing and general improvements not worth mentioning individually.

- Updated documentation.

Special thanks to Bart Cerneels <bart.cerneels@kde.org>, Thiago Macieira, James Wa <jw@jameswa.com>, Nikhil Marathe <nsm.nikhil@gmail.com>, Jukka Kinnunen <jukka.kinnunen@tieto.com>, Simon Zsolt <zsolt.simon@tieto.com> and Pekka Turunen <pekka.m.turunen@tieto.com> for testing and using the library or otherwise checking it out, and reporting their findings to me. Much appreciated.

HUPnP 0.4.0 [Mar. 4, 2010]
- Modified the design of state variables and their use. More specifically, the API is now clear 
that state variables can be changed directly only at server-side.

- Added the possibility of locking a writable state variable for exclusive access at server-side.

- Modified the design of action arguments. Input and output arguments are no longer separated at type-level.

- Removed exception usage from HTTP messaging. This was mainly because of a MinGW bug (http://sourceforge.net/tracker/index.php?func=detail&aid=2837096&group_id=2435&atid=102435), which essentially causes multi-threaded exception usage be unsafe. Please note, HUPnP still uses exceptions elsewhere, which means that with MinGW 4.4.0 HUPnP is subject to crashes. The HUPnP HTTP messaging used exceptions to signal timeouts, peer disconnects and such, which made the bug all too easy to appear in case multiple threads were simultaneously running their own HUPnP HTTP messaging "engines". This is the case with the simple HUPnP test app, which enables the launch of a HDeviceHost and multiple HControlPoints within the same process using separate threads.

- Modified the server-side action invocation mechanics when the invocations come over the network.

- Modified the example application to use the state variable locker, which fixes a race condition.

- Fixed a few errors in internal HTTP messaging code. These mainly affected action invocation and
event notification.

- Modified the internal asynch. HTTP handler code to support chunked encoding.

- Removed insulation from a few small classes that are unlikely to change.

- Some small optimizations here and there.

- Updated documentation.

- Many smaller improvements not worth mentioning individually.

HUPnP 0.3.0 [Feb. 17, 2010]
- Significant refactoring of the project, file and class structures.

- Added a simple example application to be distributed along with HUPnP. The example demonstrates basic
HUPnP usage.

- Reduced thread usage by utilizing the Qt's eventloop more.

- Removed exceptions from the public interface. This affected HDeviceInfo + several classes in the
SSDP "module".

- Removed the HCore and HUtils libraries and moved their code directly into the HUpnp library.

- Modified the action invocation semantics. This changed the HAction interface as well.

- Modified the HControlPoint interface.

- Modified the initialization of HSsdp. This also meant a change to the interface.

- Fixed several memory leaks and memory access errors.

- Improved logging by feeding more information to the messages.

- Updated documentation.

- Many smaller improvements not worth mentioning individually.

HUPnP 0.2.0 [Feb. 2, 2010]
- Significant refactoring of the project, file and class structures.

- Fixed several bugs relating to URL handling in HDeviceHost and HControlPoint.

- Changed action invocation on the control point side to use persistent sockets.

- Fixed a bug in HStateVariable, which caused "allowed value ranges" to be parsed improperly.

- Fixed a bug in HDeviceHost, which caused the HDeviceHost to announce wrong cache-control max-age timeouts.

- Fixed a bug in HDeviceHost, which in a certain scenario caused a failure in transmission of an event NOTIFY message.

- Added support for enabling/disabling warning logs that relate to non-standard behaviour discovered
in other UPnP software.

- Updated documentation.

- Several other improvements not worth mentioning individually.

Special thanks goes to Jochen Becher <jochen_becher at gmx.de> for testing the library and reporting
of his findings. Some of the above-mentioned bugs were discovered due to his efforts. In addition, he
suggested the possibility of disabling warnings that relate to non-standard behaviour discovered in
other UPnP software. Thank you!

HUPnP 0.1.1 [Jan. 26, 2010]

- Added support for chunked encoding.

- Fixed several deficiences relating to action invocation error handling.

- Fixed a bug in HControlPoint where the HTTP Host header field was not always sent in a GET request. 
  * This was found by Jochen Becher <jochen_becher at gmx.de>. Thanks!

- Fixed a bug in HDeviceHost, which forced description documents to reside in the current directory to be found.

- Removed exception usage from "simple" classes in Ssdp module.

- A few small improvements not worth mentioning individually.

- Updated documentation.

- Created this change log.
