34 lines
1.0 KiB
Racket
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)))))
|