42 lines
1.9 KiB
Racket
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.
|