Platinum UPnP SDK Changelog

What's new in Platinum UPnP SDK 1.0.4.11

Jul 20, 2013
  • fixed: crash when stopping UPnP while scheduling for scpd retrieval
  • fixed: rare crash when stopping UPnP while connections are opened.

New in Platinum UPnP SDK 1.0.4.10 (Jul 20, 2013)

  • fixed: simplified connection management fixing a potential crash on shutdown
  • fixed: Platinum.framework now contains fat library instead of Mach-o objects.
  • added: HTML help is now part of SDK (instead of zip)
  • fixed: android build was looking for axTls instead axTLS library.

New in Platinum UPnP SDK 1.0.4.9 (Jul 12, 2013)

  • fixed: crash due to uninitialized variables

New in Platinum UPnP SDK 1.0.4.8 (Jul 12, 2013)

  • fixed: leaks during exit by reworking the sequence of singletons automatic destruction.
  • added: now extracts presentationURL from device description.
  • added: can now opt in to use media cache in FileMediaServerTest.
  • fixed: 2008 VS project
  • added: 'down' command to MicroMediaController to download a media locally
  • fixed: interruption during download could happen if non blocking socket was full and returned NPT_ERROR_WOULD_BLOCK. Now retries.

New in Platinum UPnP SDK 1.0.4.3 (Jul 12, 2013)

  • fixed: leaks during event processing.

New in Platinum UPnP SDK 1.0.4.2 (Jul 12, 2013)

  • fixed: Potential leaks and crash when tasks failed to start due to UPnP entire stack shutting down.

New in Platinum UPnP SDK 1.0.4.1 (Jul 12, 2013)

  • fixed: Slow shutting down.

New in Platinum UPnP SDK 0.6.9.1 (May 2, 2012)

  • added: support to bridge Neptune Logging to other loggers such as Cocoa Lumberjack
  • fixed: better support for embedded devices detection
  • added: GetVolumeState to PltMediaController
  • fixed: crash in NPT_Socket::Cancel when stopping HTTP clients

New in Platinum UPnP SDK 0.6.8 (Jan 31, 2012)

  • changed: try to bind source port to 1900 for ssdp notify and search responses added: capability to change user agent on the fly
  • added: didl parsing and formatting of dc:description & upnp:icon
  • added: user agent header to SSDP packets
  • fixed: Windows build
  • added: UPnP AV Renderer functions
  • changed: verify we can seek the body of the response before returning Accept-Range: bytes
  • fixed: don't use localhost address for SSDP announcements
  • changed: short connection time out for subscribers since they may not exist and this would block when exiting
  • fixed: bug when parsing W3C date time
  • fixed: compiling issues when removing TLS support
  • fixed: recursion that prevented some logs to be written
  • fixed: potential issue with thread safe references
  • added: support for removing HTTP header in a request or response before sending it
  • changed: support bytes:0- range request for non seekable streams and avoid returning 416.
  • changed: return 416 instead of 500 in case we can't stream the body and a range request was made (this makes XBox and PS3 happier)
  • changed: make all references thread safe by default

New in Platinum UPnP SDK 0.6.7 (Nov 18, 2011)

  • fixed: request would fail when retrying on a new connection after the previous one failed because server closed it without using a Connection:close header. Only happens with requests containing a body.
  • fixed: always adding Connection:close in HTTP 1.1 responses due to checking content-length prior to setting it.
  • changed: allow DLNA interactive request.
  • changed: Don't override accept-range header if already set.
  • changed: more DLNA compliance for DMC
  • changed: better handling of path extraction. Now url encodes url root as well changed: better support for persistent connections with http 1.0
  • changed: eturn HTTP 416 if Accept-Range header is not bytes in the request and the server makes a range request

New in Platinum UPnP SDK 0.6.6 (Nov 18, 2011)

  • fixed: mime type detection was not properly handled fixed: bad parsing of file path from url when MediaServer url root was just '/' fixed: now builds universal framework for iOS and OSX properly added: missing files

New in Platinum UPnP SDK 0.6.5 (Oct 7, 2011)

  • added: Platinum.xcodeproj now builds Platinum.Framework for both iOS and OSX to make it easier to integrate as a 3rd party.
  • changed: Better chunked-encoding support (don't write Content-Length)
  • changed: Add Accept-Range header when returning HTTP 416 as per spec
  • updated: based on Neptune 1.1.2 now
  • fixed: potential crash due to using non thread safe references
  • fixed: FindDevice could return invalid root device, now keep a reference of root device when fetching all SCPDs of root device and embedded devices just in case root device goes away
  • fixed: crashes in MediaCrawler sample code
  • changed: simplified getting default mime type
  • changed: only allow keep-alive in response if it contains a ContentLength header or a Chunked transfer encoding
  • changed: handlers can now be owned by NPT_HttpServer
  • changed: simplified HttpClientTask by using new NPT_HttpClient pipelining feature
  • fixed: now detects devices with SCPD urls containing query param or hash tags
  • fixed: C++/CLR Managed Binding enumeration of embedded devices not using reference
  • changed: removed VS2005 support
  • changed: removing broadcast support (only needed for obsolete XBox v1)
  • fixed: potential case where a task can be added as we're stopping
  • changed: don't add Accept-Range bytes header if chunked encoding is used
  • changed: when enumerating interfaces for SSDP, only returned MULTICAST enabled Interfaces and removed Point-To-Point ones
  • changed: Forces port 1900 for SSDP now and don't depend on default Multicast interface and instead join on all valid interfaces
  • changed: don't advertise resources on all interfaces unless ALLIP is found in filter (DLNA)
  • fixed: localinterface not being set for embedded devices resulting in event subscription failing because the subscription IP was 0.0.0.0 rather than the IP of the control point.
  • added: Sonos support back using Rhapsody (only visible in Desktop Controller though)
  • fixed: @refID mask detection and use cases insensitive compare for tags now
  • added: support to serve byte range requests for a stream, not just a file
  • added: More DLNA compliance with certain DLNA HTTP headers
  • changed: simplified XBox & WMP support to fix "Not Authorized" seen for Denon DLNA devices.
  • fixed: mask overlapping with another, added more masks support for DLNA compliance
  • fixed: more dlna compliance, let serveFile add Accept-Range header
  • fixed: DLNA test failing due to sending refId when not requested
  • fixed: DLNA protocol info parsing error due to trailing semi-colon
  • fixed: ring buffer stream to only return prematurely on abort and not on eos
  • added: .wavm for mono wave extension
  • changed: stopped sending byebye first to stop confusing slow devices
  • fixed: Windows Media Player 12 not being happy with wav protocol info
  • fixed: deadlock when receiving a description response for an invalid device while doing house keeping on subscribers. Now uses only one lock.
  • fixed: better handling of stopping UPnP immediately after starting it
  • changed: don't bind hard for SSDP multicast listen
  • changed: updated Server and UA HTTP header (does not include OS anymore)
  • added: basic support for WMP11
  • changed: lowered SSDP response time to 5 secs
  • changed: no more accept-ranges on any file requests, only on serveFile
  • fixed: DLNA profile didl attribute was not being written for albumArtURI
  • added: lpcm working for both XBox 360 and PS3
  • changed: asks for searchable and childCount didl attributes by default
  • removed: extra logging when not finding didl attribute
  • fixed: mimetype parsing
  • added: support for audio/L16;44100...
  • fixed: fails if can't get file length only if a range request is passed
  • changed: returns 404 instead of 500 when file is missing
  • added: didl support for multiple album arts
  • improved: string serialization, reduces too many string copies during didl creation
  • added: audio/L16 support to XBox
  • fixed: dlna serialization, added audio/L16

New in Platinum UPnP SDK 0.6.4 (Oct 7, 2011)

  • fixed: android compilation
  • fixed: crash when running FileMediaServerTest on a directory with Chinese characters
  • fixed: now use real Computer Name or User Name next to Server name

New in Platinum UPnP SDK 0.6.3 (Oct 7, 2011)

  • fixed: 2005 and 2010 solutions
  • added: 2010 Platinum.Managed strong-name signed assembly

New in Platinum UPnP SDK 0.6.2 (Oct 7, 2011)

  • improved: DLNA flags masks
  • fixed: Managed wrapper now keeping the pointer to the native member when passed so we can modify members in place. But we have to be careful to not pass local stack objects that will be deallocated which will cause crashes
  • added: Managed now can pass uuid to MediaServer
  • fixed: Managed not running on x64 machines
  • fixed: new XBox Dashboard support
  • fixed: UTF-8 was not properly handled through Managed Interface
  • changed: put back default byebye first otherwise xbox doesn't detect when same device arrives after a crash
  • added: device signature detection (PS3, XBOX, WMP)
  • changed: addIcon is now public
  • changed: forced to bind on every interface on port 1900 otherwise we don't receive SSDP search requests sometimes
  • changed: MediaConnect only advertise ContentDirectory with Search action to WMP and XBox now
  • fixed: returning all resource metadata when receiving only "res" filter
  • added: support for @duration metadata filter
  • changed: don't prevent serializing resource in didl if it's invalid
  • changed: allow ProtocolInfo without PN
  • added: DeviceIcon .Net mapping
  • added: now can pass byte[] through .Net interface when responding to HTTP request (thumbnails)
  • changed: Managed don't throw exception when stopping UPnP if it hasn't been started
  • added: signature to Platinum.Managed
  • fixed: crash when stopping an already disposed Managed instance (?)
  • changed: now exports to Targets root subfolder
  • fixed: missing log4net bundle

New in Platinum UPnP SDK 0.6.1 (Oct 7, 2011)

  • fixed: potential vulnerability when receiving SSDP messages or SOAP requests
  • added: now compiles for Android NDK
  • added: PLT_UPnP::IsRunning method
  • changed: moved LastChange variable parsing into controlpoint
  • changed: pass sort criteria entire string to delegate instead of parsed split list
  • added: Cocoa layer for Mac
  • added: Managed C++ layer for .Net
  • added: new Managed MediaServer Test
  • changed: improved MimeType and ProtocolInfo support
  • changed: being more strict on MX to pass UPnP certification
  • fixed: dc:title is required
  • added: serialization and parsing of upnp:searchClass and upnp:objectClass name attribute
  • changed: searchable attribute is false by default
  • changed: Can now pass uuid to Managed MediaServer
  • changed: Can change lease time from Managed MediaServer
  • changed: Don't adverstise bye-bye SSDP messages by default on startup anymore to pass DLNA compliance

New in Platinum UPnP SDK 0.6.0 (Oct 7, 2011)

  • added: Documentation Platinum-HTML.zip in Platinum/Docs/Doxygen subfolder
  • added: fix for detecting requests with url decoded paths (for example from Windows Media Player)
  • changed: PLT_SsdpListenTask timeout to 1 sec only for iPhone
  • changed: Removed some PLT_HttpHelper functions that were problematic
  • changed: No need to force contentlength to 0, task should set it automatically if no entity
  • fixed: Socket leak in PLT_UPnP
  • changed: completely reworked HTTP response handling
  • changed: osx default target is leopard now
  • fixed: osx i386 build issue
  • changed: revamped & simplified media server delegate
  • changed: updated latest Neptune and now use new time/date support
  • changed: PLT_HttpRequestHandler not a template anymore
  • updated: normalized use of timeout
  • added: basic HTTP caching headers support to HTTP file server
  • added: made PLT_MediaCache generic, MediaServer now sorts by date and caches directory listing
  • added: axTls to build system for ssl connections (HTTPS)
  • added: MicroMediaController can be specified a folder directly using the "cd" command
  • fixed: Renderer Channel environment variable attribute name (must be "channel")
  • fixed: crashes when enumerating net interfaces on iPhone
  • added: more log to MicroMediaController
  • added: XmlHelper Serialize function

New in Platinum UPnP SDK 0.5.4 (Oct 7, 2011)

  • updated: msdev 2008 output
  • fixed: incorrect local filepath extraction from url
  • fixed: xcode project
  • fixed: gcc warnings
  • added: CocoaTouchBrowser sample iphone app started (not finished)
  • added: Platinum xcode proj for iphone into arm-apple-darwin
  • changed: handling of http requests when device host server is being used for serving content from derived device (like FileMediaServer Device)
  • added: more log to MicroMediaController
  • added: XmlHelper Serialize function
  • fixed: WMP wouldn't return resource url if the browse filter didn't contain 'res'
  • changed: be more relaxed about invalid or missing resource uri and invalid protocolinfo, maybe the filter didn't request it afterall

New in Platinum UPnP SDK 0.5.3 (Oct 7, 2011)

  • fixed: MediaCrawler app updated
  • fixed: crash on exit while Browse action is requested
  • fixed: bug in ChunkDecoder
  • changed: better support for HTTP 100 continue
  • changed: DLNA compliance (handle 1xx responses, shutdown sockets better)
  • added: code to check if ip or interface is within same network
  • changed: increased stream copy buffer to 16k for better streaming performance
  • fixed: crash on exit due to logging in PosixThread wait function
  • changed: FileMediaServer now serves files at the root url and not "/content" anymore so that it can serve "/crossdomain.xml" url for Flash if needed.
  • changed: putting back GetVolumeDBRange & GetVolumeDB since it seems to be required by DLNA
  • fixed: GetTransportAction not returning current protocol info
  • changed: remove argument from argument list if value was not allowed
  • changed: now returns NPT_ERROR_INVALID_PARAMETERS when validating state variable value if failed
  • changed: dont' fail if action contains unknown argument names, simply return NPT_ERROR_NO_SUCH_NAME
  • changed: now uses individual scpd cpp files for each scpd
  • updated: now uses a batch file and header tool to convert scpd xml file to cpp for inclusion
  • added: PlayTo functionality by supporting advertising and responding on localhost
  • changed: more DLNA compliance
  • added: time class

New in Platinum UPnP SDK 0.5.2 (Oct 7, 2011)

  • fixed: recursive posix deadlock when notifying new devices are ready and delegates try to subscribe to services
  • added: seek command to MicroMediaController
  • changed: lowered log levels
  • changed: removed SsdpProxy from Build.scons
  • updated: scpd for MediaRenderer now has GetVolumeDB, SetVolumeDB, GetVolumeDBRange
  • changed: now attach root device to action instead of device (in case of embedded) since embedded devices are not referenced, they're children of main root device
  • changed: better embedded devices support in ctrl point, now keeps only root devices in list
  • fixed: crashes when device goes away while an action is performed on service or waiting for responses
  • fixed: scpd retrieval for embedded devices with same service (Sonos with onnectionManager service for example in both DMS and DMR)
  • fixed: action arguments are serialized in same order as defined as scpd (to make WMP12 happy)
  • changed: Search sockets are bound on port > 1024 and different than 1900 according to DLNA
  • added: When looking for device, can return root if device is known to be embedded
  • fixed: root device reference is attached to task that need to access service or action in response to prevent release if device goes away while waiting
  • fixed: don't check if subscriber sid start with 'uuid:' even though it's the spec
  • added: more WMP12 support parsing xml responses (uses UPnPError instead of upnp_error and any namespace)
  • fixed: random crashes
  • fixed: PS3 DLNA errors
  • changed: Advertise on localhost now and respond properly if search was receiving on localhost
  • changed: Now can ignore all local UUIDs when multiple devices are attached
  • fixed: MediaController made AVTransport optional and RenderingControl required service
  • added: MediaController added SetVolume, GetVolume
  • fixed: MediaController better handling of invalid timestamp or duration
  • added: MediaRenderer GetVolumeDBRange and SetVolumeDB
  • added: Didl support for bitspersample, nraudiochannels and samplefrequency
  • changed: Didl adding .000 for frame in timestamp otherwise 360 won't play tracks
  • improved: Didl parsing if invalid xml node found
  • fixed: Filter criteria was missing in Search function prototype
  • added: Can now decide if protocol info should contain DLNA info or not
  • added: MediaBrowser added search
  • fixed: When receiving didl for item, don't try to validate resource url protocol and ip as it could be rtsp:// or FQDN addresses
  • fixed: SetVariableValue can pass csvs and each value will be indepedently validated
  • added: Can now set extra attributes to a state variables (for Volume that has a Channel)
  • changed: The state variable now serializes itself into an xml node instead of the service doing it. That way we can add extra parameters if needed
  • added: helper GetIPAddresses can be passed a flag to add localhost to list if needed
  • fixed: vs2005 projects with new Neptune path
  • changed: simplified AVTransport scpd for renderer
  • added: Renderer now supports Windows 7 WMP PlayTo feature!
  • added: now can choose to add xml header or not (some implementations like WMP needs it)
  • fixed: bug where it would never keep a connection alive on the server side
  • added: more DLNA improvements
  • removed: Neptune from ThirdParty, now same level as Platinum in PlatinumKit
  • fixed: 360 can play mov files now
  • added: mimetype by extension
  • fixed: WMP can see Platinum again (needs
  • changed: change mediatype after calling ServeFile instead of before, or it may get changed

New in Platinum UPnP SDK 0.5.1 (Oct 7, 2011)

  • removed: DMS 1.5 for 360, no need for it
  • changed: more DLNA support, fixed deadlock when removing devices
  • changed: moved back apps to Platinum proj on OSX
  • fixed: ctrl point now renews subscribers in time
  • added: mute/unmute function to micromediacontroller to pass DLNA tests
  • fixed: fixed subscriber renewal, now wait 10 secs before doing first house keeping of old devices not renewed
  • fixed: scons 1.2 support
  • fixed: osx config for scons 1.2
  • added: MediaServer Device Discovery & Control DLNA compliance
  • changed: uses built-in Platinum icons instead of file based
  • fixed: iPhone build
  • fixed: xbox 360 was not playing divx anymore