2 UPnP Devices and Services
| (require racket-upnp) | package: racket-upnp |
The main module provides general UPnP device discovery and a generic service interface.
2.1 Discovering devices
procedure
procedure
(query-upnp-devices [ kinds #:interface interface #:dns? dns? #:mx mx #:timeout timeout #:repeat repeat]) → (listof upnp-device?) kinds : (or/c 'all symbol? (listof symbol?)) = 'all interface : (or/c #f string?) = #f dns? : boolean? = #f mx : (integer-in 1 5) = 3 timeout : (or/c #f positive-real?) = #f repeat : exact-positive-integer? = 3
'all returns all described devices. A symbol such as 'media-renderer selects one known kind, and a list selects several kinds. When interface is a local IPv4 address, SSDP multicast is sent through that interface. When it is #f, upnp-default-ipv4-address is used automatically. If automatic detection fails, discovery falls back to the interface selected by the operating system. Reverse DNS lookup is only attempted when dns? is true.
mx is the SSDP response delay advertised in the M-SEARCH request. The default receive window is mx plus one second. An explicit timeout overrides that receive window and must be at least mx. repeat controls how many M-SEARCH requests are sent; the requests are spaced 250 milliseconds apart.
procedure
(upnp-device-kinds) → (listof (cons/c symbol? string?))
2.2 Device values
procedure
(upnp-device? value) → boolean?
value : any/c
procedure
(upnp-device-kind device) → symbol?
device : upnp-device?
procedure
(upnp-device-name device) → string?
device : upnp-device?
procedure
(upnp-device-udn device) → (or/c #f string?)
device : upnp-device?
procedure
(upnp-device-address device) → string?
device : upnp-device?
procedure
(upnp-device-dns-name device) → (or/c #f string?)
device : upnp-device?
procedure
(upnp-device-manufacturer device) → (or/c #f string?)
device : upnp-device?
procedure
(upnp-device-model device) → (or/c #f string?)
device : upnp-device?
procedure
(upnp-device-type device) → (or/c #f string?)
device : upnp-device?
procedure
(upnp-device-services device) → (listof upnp-service?)
device : upnp-device?
2.3 Generic services
procedure
(upnp-service? value) → boolean?
value : any/c
procedure
(upnp-service-kind service) → symbol?
service : upnp-service?
procedure
(upnp-service-type service) → (or/c #f string?)
service : upnp-service?
procedure
(upnp-service-id service) → (or/c #f string?)
service : upnp-service?
procedure
(upnp-service-kinds) → (listof (cons/c symbol? string?))
procedure
(upnp-device-service device kind) → (or/c #f upnp-service?)
device : upnp-device? kind : symbol?
procedure
(upnp-service-actions service) → (listof string?)
service : upnp-service?
procedure
(upnp-service-supports-action? service action) → boolean? service : upnp-service? action : (or/c string? symbol?)
procedure
(upnp-service-call service action [arguments]) → hash?
service : upnp-service? action : (or/c string? symbol?) arguments : list? = '()
A failed SOAP request raises exn:fail:upnp?.
procedure
(exn:fail:upnp? value) → boolean?
value : any/c
procedure
(exn:fail:upnp-code error) → (or/c #f exact-integer?)
error : exn:fail:upnp?
procedure
(exn:fail:upnp-description error) → (or/c #f string?)
error : exn:fail:upnp?
2.4 Example
(define renderers (query-upnp-devices 'media-renderer #:interface "10.7.3.118" #:dns? #t)) (for ([device (in-list renderers)]) (printf "~a (~a)\n" (upnp-device-name device) (upnp-device-address device)))