Files
racket-upnp/scribblings/intro.scrbl
T
2026-10-30 10:41:56 +01:00

42 lines
1.9 KiB
Racket

#lang scribble/manual
@(require (for-label racket/base
(file "../main.rkt")
(file "../media-renderer.rkt")
(file "../media-server.rkt")
(file "../services/av-transport.rkt")
(file "../services/rendering-control.rkt")
(file "../services/connection-manager.rkt")
(file "../services/content-directory.rkt")))
@title{Introduction}
The @racketmodname[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:
@itemlist[
@item{The @racketmodname[racket-upnp] module provides discovery, device
information, generic service inspection, and generic SOAP calls.}
@item{Modules in the @tt{racket-upnp/services} subcollection provide
typed interfaces for standard UPnP services.}
@item{The @racketmodname[racket-upnp/media-renderer] and
@racketmodname[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 @tt{call-with-http-timeout} procedure
runs the exchange in a worker, propagates its values or exception and closes
its HTTP resources. Its @tt{progress!} callback can restart the inactivity
wait for streaming callers; SOAP calls use a single bounded exchange.