Files
racket-upnp/network.rkt
T

34 lines
1.0 KiB
Racket

#lang racket/base
;; Network helpers used by UPnP and SSDP.
(require racket/udp
simple-log)
(provide upnp-default-ipv4-address)
(sl-def-log upnp-network)
(define ssdp-multicast-address "239.255.255.250")
(define ssdp-multicast-port 1900)
;; Return the local IPv4 address selected by the operating system for traffic
;; to the SSDP multicast destination. No datagram is transmitted.
(define (upnp-default-ipv4-address)
(let ([socket (udp-open-socket ssdp-multicast-address
ssdp-multicast-port)])
(dynamic-wind
void
(lambda ()
(udp-connect! socket ssdp-multicast-address ssdp-multicast-port)
(define-values (local-address local-port remote-address remote-port)
(udp-addresses socket #t))
(dbg-upnp-network
"Selected UPnP IPv4 address ~a for SSDP destination ~a:~a"
local-address
ssdp-multicast-address
ssdp-multicast-port)
local-address)
(lambda ()
(udp-close socket)))))