[erlang-questions] upnp device discovery
Alexander Harju
alexander.harju@REDACTED
Wed Sep 22 15:14:48 CEST 2010
> Has anybody got some erlang code for upnp device disovery?
>
> /Joe
>
Hi.
I was just experimenting with last weekend.
For discovery you just have to send the discovery message to multicast
address 239.255.255.250:1900
-define(UPNP_DISCOVER,
"M-SEARCH * HTTP/1.1\r\n"
"Host: 239.255.255.250:1900\r\n"
"Man: \"ssdp:discover\"\r\n"
"ST: upnp:rootdevice\r\n"
"MX: 3\r\n\r\n").
{ok, S} = gen_udp:open(1900, [{reuseaddr,true}]),
gen_udp:send(S, {239,255,255,250}, 1900, ?UPNP_DISCOVER),
receive
{udp, S, _, _, Msg0} ->
[_|Msg] = lists:reverse(Msg0),
io:format("~s~n", [lists:reverse(Msg)])
after 5000 ->
ok
end.
The rest is "just" handling the UPnP massive SOAP protocol. xmerl and inets
or yaws, erlsom.
You can also listen to UPnP multicasts like this:
Opts = [{multicast_loop,false},
{multicast_if,{0,0,0,0}},
{multicast_ttl,4}],
{ok, S} = gen_udp**:open(1900, Opts),
inet:setopts(S, [{add_membership, {Ip, {0,0,0,0}}}]),
receive
{udp, S, ...
BR
// Alex
More information about the erlang-questions
mailing list