Changelog (http://teleal.org/projects/cling/)
==============================================================================

1.0.5 (2011-09-22)

- Bug: Temporary fix MediaRenderer binding, can't map Java short to UPnP i2

------------------------------------------------------------------------------

1.0.4 (2011-09-21)

- Bug: Fixed case-sensitive name check for invalid and skipped VMWare/Parallels
       network interfaces

- Bug: Skip VMWare interfaces on Windows

- Bug: Skip network interface if no usable addresses have been discovered

- Bug: Fixed NPE in PersonWithRole, but role attribute is not optional

- Log a warning when an invalid URI is used for HTTP requests

------------------------------------------------------------------------------

1.0.3 (2011-07-08)

- Feature: Default configuration uses Executors.newCachedThreadPool instead
           of manual thread management

- Feature: During service binding, detect state variables with the same name
           as an action input/output argument automatically

- Feature: Introduced compatibility checking in statevar/argument type validation

- Bug: Fixed "from string" parsing but bug in ServiceReference

- Bug: Use write lock not read lock when switchable network router is
       shutting down

- Bug: Accept valid XML boolean datatype literals 0/1 in DIDL parser

- Bug: Start network router immediately when Android service is created, don't
       wait for WiFi enabled event

- Bug: Short primitive Java type shouldn't map to boolean or integer

- Bug: Fixed StateVariable A_ARG_TYPE_Result type in MSFT registrar service

- Bug: Fixed "int" UPnP datatype max-delta GENA moderation,

- Bug: When receiving SEARCH messages, check for negative MX values

- Bug: When receiving SEARCH messages, don't throw NPE if missing NTS header

- Bug: Fix potential NPE with Roku Soundbridge discovery

- Bug: Temporary fix for network router startup race condition/NPE in
       receiving search messages before router is ready

- Bug: Make UDN.uniqueSystemIdentifier() work on Android without
       relying on unimplemented NetworkInterface.isLoopback()

- Ignore Parallels network interfaces by default (like VMWare, they are not
  properly cleaned up when emulator is not running, blocking Cling)

- Relaxed validation of icon metadata during device discovery, accept
  missing/invalid width, height, depth

- Don't throw a RuntimeException when an invalid multicast datagram has been
  received, log an INFO message only

- Don't send search message on Android service startup, let the developer
  decide when to send the (first) search message

------------------------------------------------------------------------------

1.0.2 (2011-04-28)

- Feature: Support for DLNA attributes in DIDL content (Mario Franco)

- Bug: Fixed spelling of *MetaData in LastChange schema and model, relaxed
       LastChange and DIDL parsing rules

- Bug: Ignore network interfaces without IP addresses

- Bug: Log a warning in Workbench instead of NPE when a MediaRenderer has
       no ConnectionManager

- Bug: Don't throw NPE if Workbench is started with external logging config

- More configuration options for Aapache HTTP Client, tweaked Android
  HTTP Client defaults

- Added simple main() getting started chapter to documentation

------------------------------------------------------------------------------

1.0.1 (2011-03-04)

- Feature: Improved concurrency in Switchable/Android network router with
           shared locking

- Bug: Fixed NPE when network router can't be restarted after Android Wifi
       returns

- Bug: Fixed race condition between outbound GENA subscription procedure
       and inbound initial event message (Michael Pujos)

- Bug: Updated teleal-common to 1.0.12, fixed absolute URL handling bug

- Relax validation of invalid state variable value range metadata

- Trim trailing garbage from all invalid XML documents

- Unified HTTP (client) operation timeouts and added recognizable exception
  when router switching fails

------------------------------------------------------------------------------

1.0 (2011-31-01)

- Feature: Ability to pause and resume registry maintenance on
           multitasking-challenged machines

- Feature: Registry maintenance interval now configurable, defaults to 1
           second and 5 seconds on Android

- Feature: Restart remote device expiration check cycle on registry
           resume (Michael Pujos)

- Feature: Switchable and configurable discovery

- Feature: Action input argument aliasing for incompatible SOAP
           messages (Mario Franco) and minor ActionArgument API cleanup

- Feature: ContentDirectory browse action input argument alias for
           XBox compatibility (Mario Franco)

- Feature: Basic implementation of MediaRegistrarService for
           XBox (Mario Franco)

- Feature: Added DeviceDetailsProvider as a first step towards
           device profiles (Mario Franco)

- Feature: Added generic HTTP header regex matching provider for
           device details (Mario Franco)

- Feature: Added search support to AbstractContentDirectory (Ben Dodson)

- Feature: Added DLNA flags constants for ProtocolInfo (Ben Dodson)

- Feature: Added AbstractMap for Android < 2.3 compatibility of
           LastChange parser (Ben Dodson)

- Feature: Improved navigation of action argument table in workbench

- Bug: Fixed potential NPE when service descriptor retrieval/parsing
       of embedded device failed

- Bug: Fixed potential NPE in RemoteDeviceIdentity#toString()

- Bug: Generate event callback URLs just-in-time, don't use potentially
      outdated (after network restart) URL stored in RemoteDeviceIdentity

- Bug: Don't expire local event subscriptions on local service

- Bug: Fixed incorrect handling of XML entities in all SAX-based parsers

- Bug: Fixed discovery bug of mixed-case datatype names, e.g. dateTime

- Bug: Fixed NPE when query state variable action was called but
       not supported by local service

- Bug: Fixed DIDL object class of MusicArtist

- Bug: Fixed NPE in Workbench when checking supported protocols of
       MediaRenderer

- Bug: Unified timezone datatypes, switched from Date to Calendar default
       mapping, fixed timezone-dependent tests

- Bug: Fixed NPE when unknown HTTP method is received

- Bug: Fixed valueOf(s) in DoubleDatatype and FloatDatatype

- Bug: Fixed NPE in incoming GENA subscription processing when
       preconditions failed

- In datatypes, convert illegal negative signed strings to unsigned integer
  value 0, don't throw exception

- Refactored switchable network router, now in core transport package

- Unified local URL (descriptor, callback) generation, now survives
  network router restarts

- Ignore childcount attribute of mediaserver content, it's usually wrong

- Upgraded teleal-commons dependency

- Optimizations for Android (Michael Pujos)

- Improved compatibility, don't error when default value is not an allowed
  value, log a warning and add it as an allowed value

- Improved logging and exception handling when processing HTTP request
  fails with Apache HTTPCore transport

- ContentDirectory DIDL XML childCount attribute is optional, don't
  include it if there is no value (Ben Dodson)

- More robust URI parsing in device/service descriptors (don't crash on
  garbage values sent by LaCie NAS)

- Don't add prolog by default when generating DIDL XML content

- Added CUSTOM enum value for handling invalid TransportState and
  TransportStatus

- More documentation for creating and binding services

------------------------------------------------------------------------------

1.0-beta8 (2010-12-06)

- API change: Cleaned up all support module action callbacks, failure
              message generation is up to the developer

- API change: Unified model package for all AV services, added model
              types for DIDL descriptor

- Feature: Replaced JAXB-based parser with clean Android compatible
           code for LastChange handling in support module AV services

- Feature: Replaced JAXB-based parser with clean Android compatible
           parser for DIDL content in support module AV services

- Feature: Configuration option for discovery inclusion/exclusion with
           UpnpServiceConfiguration#getExclusiveServiceTypes()

- Bug: Don't start descriptor retrieval again after waiting for a
       free thread for execution if meanwhile the descriptor was
       already retrieved

- Bug: Fixed ConcurrentModificationException on shutdown with active
       GENA subscriptions

- Bug: Handle invalid X_DLNADOC descriptor element value gracefully

- Bug: Fail immediately on Android with wrong configuration, exit clean
       on startup errors

- Bug: Detect environment in which HTTPURLConnection is not usable
       (e.g. Tomcat) and fail fast on startup

- Bug: Fixed various NPEs, out-of-order discovery start listener notification

- Bug: Detect network interfaces on Android emulator correctly

- Bug: Clean exit on shutdown, close thread pools when UpnpService is stopped

- Bug: Don't drop device BYEBYE if a device was removed immediately before
       shutdown

- Improvements to the XML printer, close XML elements inline if they have
  only attributes, support printing of XML fragments

- Documentation and tests for MediaServer and MediaRenderer

- Added bridge module design documentation

- Discovery performance optimization on Android, skipping expensive
  string operations during validation

------------------------------------------------------------------------------

1.0-beta7 (2010-11-03)

- API change: Additional shutdown methods on RegistryListener, other
              minor changes

- Feature: Preserve raw HTTP headers and make request message available
           through ReceivingAction thread-local

- Feature: Initial import of WAN bridge/HTTP gateway module with Workbench UI

- Feature: Unified InternetGatewayDevice support

- Feature: Bundled AndroidUpnpService component, handles WiFi on/off
           gracefully, new documentation

- Feature: ContentDirectory service skeleton and tests (Alessio Gaeta)

- Feature: New peering ConnectionManager (Alessio Gaeta)

- Feature: Added X_DLNADOC and DLNA caps in device descriptor

- Bug: Accept non-compliant decimal service/device type versions

- Bug: Exception handling didn't produce failure when local GENA
       subscription can't be established

- Bug: Fixed GENA incoming subscription removal on failed response delivery

- Bug: Fixed action null input argument value handling for local invocation

- Don't log errors on IOException in transport layer

- Annotation binding, allowed-values declaration without enums

- Rewrite of HTTP header handling and parsing

- Updated dependency to teleal-common

- Allow execution of local service action without UpnpService, easier testing

- Enable 'mvn jetty:run' on the bridge module

- Complete Javadoc for core module

------------------------------------------------------------------------------

1.0-beta6 (2010-09-26)

- Exposed MX search response time in ControlPoint API

- Switched default MX to 3 seconds

- API change: Removed ActionInvocationValues and addValue() operations,
              action arguments are always named and not ordered

- Bug: Fixed NPE when service descriptor (but only device descriptor)
       couldn't be retrieved

- Bug: Fixed UDA name validation, improved compatibility with broken
       devices (less errors, more warnings)

- Better error message when service descriptor is empty

- API change: Optional performance optimization in RegistryListener,
              notifying users about half-baked device graphs early

- Fixed build on Linux, plugin repository also required

- Workbench: New plugin for WANIPConnection service, editing port mappings

- Documented RegistryListener

------------------------------------------------------------------------------

1.0-beta5 (2010-09-07)

- Workbench: Fixed NPE when ContentDirectory container has no children
  and doesn't announce it

- MediaRenderer: Switchable fullscreen video, no video display while
  playing audio only

- Compatibility: Workarounds for various bugs in Intel UPnP Tools

- Compatibility: Shortened callback path in Namespace for broken
  Roku Soundbridge (which cuts off after 100 chars) and simplified extension

- Bug: Don't expose the virtual QueryStateVariableAction in
  service descriptor

- Bug: Fixed NPE when stream protocol can not be found

- Removed unused Device.getFirstIcon() method

- Simplified Resource representation/model

- Improved overall extensibility, device graph metamodel immutability

- Removed StreamUtil, migrated to teleal-commons IO

- Added Server header to all GET responses

------------------------------------------------------------------------------

1.0-beta4 (2010-08-04)

- Fixed XML output encoding issue (Pete Gould)

- Fixed namespacing in XMLUtil printer

- Made Apache httpstuff optional dependency

- Accept messages without or with broken content-type header

- Added support for automatic expiration/refresh of any resource in registry

- Moved MockUpnpService into core main package

- API change, namespace handling generalized and extensible

- Fixed OOME and other Http header parsing bugs

- Added missing server header to event subscription response

- API change, ProtocolFactory throws exception when request can't be processed

- Fixed unclear exception when a primitive action argument value was null

- Improved base URL handling for local callback addresses

- Cleaned up dependencies

- API change, removed DeviceService class

- More documentation and tests

- Switched to LGPLv3

------------------------------------------------------------------------------

1.0-beta3 (2010-07-12)

- Fixed Byte[] return type of action methods, now defaults and converts
  correctly to bin.base64

- Validation of valid XML strings

- Finished Apache HTTP based transport implementation

- XML subsystem compatibility with Android 2.1, Cling now runs on 2.1

- Allow logging override by user on command-line for workbench

- Fixed NPE in action execution with string-convertible types

- Support for ephemeral ports on TCP stream servers

- New registry access convenience methods

- Documented logging configuration procedure

------------------------------------------------------------------------------

1.0-beta2 (2010-07-01)

- Cleaned up device graph finders

- Improved network SPI and header handling

- First transport implementation based on Apache HttpComponents (for Android)

- Performance optimization, avoid concurrent descriptor retrieval

- Faster (on Android) unwrapped DOM parsing in binders for hydrating from XML

- New SAX based parser, which is actually slower on Android than the DOM
  parser

- Easier extensible default configuration

- Added Android configuration classes

- Added Android manual chapter

------------------------------------------------------------------------------
