9.3

1 Introduction🔗ℹ

The racket-upnp collection implements a small UPnP control point. It discovers devices with SSDP, downloads their device descriptions, and represents devices and services as ordinary Racket values. Unknown vendor-specific device and service types are retained instead of discarded.

The public interface is divided into layers:

  • The racket-upnp module provides discovery, device information, generic service inspection, and generic SOAP calls.

  • Modules in the racket-upnp/services subcollection provide typed interfaces for standard UPnP services.

  • The racket-upnp/media-renderer and racket-upnp/media-server modules provide convenient device-oriented interfaces.

A normal application can use the device-oriented modules without dealing with SSDP, SOAP, service control URLs, or DIDL-Lite XML directly. The generic layer remains available for inspection and vendor-specific extensions.

SOAP HTTP exchanges and service-description requests have a ten-second response deadline. A stalled renderer therefore raises a transport failure instead of indefinitely occupying a player’s transport lock. The private call-with-http-timeout procedure runs the exchange in a worker, propagates its values or exception and closes its HTTP resources. Its progress! callback can restart the inactivity wait for streaming callers; SOAP calls use a single bounded exchange.