read multicast
Started by Graham on 3-Feb-2017/5:52:24-8:00
Graham — 3-Feb-2017/5:52:24-8:00
Hi Nick
I see you've contributed a new UDP scripts. Do you have an example for rebol2 on how to read messages from the multicast address of 235.255.255.250:1900?
I want to able to respond to SEARCH requests from Amazon's echo so I can pretend to be a Phillips Hue Bridge.
IF we can get it working, we can look at getting UDP multicasting working as well.
Graham — 3-Feb-2017/5:53:42-8:00
That wasn't very literate. I'd like to see if we have a working example on Rebol2 so we can then implement this on Rebol3. Ta.
Nick — 3-Feb-2017/11:22:08-8:00
Hi Graham,
If you are able to connect to the segment 235.255.255.250:1900 on your network, and the device there is sending UDP multicast messages:
net-in: open udp://:1900 ; This is UDP, so IP address isn't required
gui: view/new layout [a1: area wrap]
forever [
received: wait [net-in]
if not viewed? gui [quit]
insert (at a1/text 1) copy received show a1
]
Nick — 3-Feb-2017/11:34:01-8:00
to broadcast (as 'server'):
net-out: open/lines udp://235.255.255.250:1900
set-modes net-out [broadcast: on]
gui: view/new layout [
f1: field
k1: at 0x0 key #"^M" [
if f1/text = "" [return]
insert net-out rejoin [name ": " f1/text]
]
]
forever [focus f1 wait .1]
Graham — 3-Feb-2017/14:07:30-8:00
Hi Nick
That doesn't work for me. I hear nothing being broadcast unless I send a SEARCH command. I then ask another device on the network to send SEARCH commands but I am not seeing them.
I note you don't the set-modes on multicast-groups ...
R E B O L [
-
]
local-ip: read join dns:// read dns://
probe local-ip
attempt [close odata]
attempt [close idata]
odata: open/binary udp://239.255.255.250:1900 ; udp broadcast port
set-modes odata [multicast-ttl: 10]
set-modes odata [broadcast: on]
; set-modes odata compose/deep [multicast-interface: (local-ip)]
set-modes odata compose/deep [multicast-groups: [[239.255.255.250 (local-ip)]]]
idata: none ; open udp://:1900
ST: "ssdp:all"
MX: 3
insert odata rejoin [
{M-SEARCH * HTTP/1.1} crlf
{HOST: 239.255.255.250:1900} crlf
{MAN: "ssdp:discover"} crlf
{MX: } MX crlf
{ST: } ST crlf
crlf
]
forever [
port: wait [odata]
probe data: copy port
]
Graham — 3-Feb-2017/16:38:40-8:00
Nick, I've just realised your code is for UDP broadcast and not multicast. For multicast one needs to join the multicast group.
Nick — 4-Feb-2017/9:46:47-8:00
Sorry, different meanings of the word 'multicast'. I have no experience with IP multicast.
Graham — 4-Feb-2017/17:18:57-8:00
Ok, got it going. I had a couple of errors in the code I posted. This sends a search message to all devices in the SSDP multicast group and looks at their replies. If there's a search command, it looks at which device is sending it so it can reply if it wants to do so.
R E B O L [
Notes: {to listen for SSDP messages}
Author: "Graham"
Date: 5-Feb-2017
]
local-ip: read join dns:// read dns://
probe local-ip
attempt [close odata]
attempt [close idata]
odata: open/binary udp://239.255.255.250:1900 ; udp broadcast port
set-modes odata [multicast-ttl: 10]
; set-modes odata [broadcast: on]
set-modes odata compose/deep [multicast-interface: (local-ip)]
idata: open/binary udp://:1900
set-modes idata compose/deep [multicast-groups: [[239.255.255.250 (local-ip)]]]
ST: "ssdp:all"
MX: 3
insert odata rejoin [
{M-SEARCH * HTTP/1.1} crlf
{HOST: 239.255.255.250:1900} crlf
{MAN: "ssdp:discover"} crlf
{MX: } MX crlf
{ST: } ST crlf
crlf
]
forever [
port: wait [odata idata]
data: copy port
if find/part data {M-SEARCH} 8 [
print "Multicast search issued from:"
print [ "Address: " port/remote-ip]
print [ "On port: " port/remote-port]
]
probe data
]
Nick — 4-Feb-2017/21:29:38-8:00
I'd love to know when this gets up and running in R3.
Graham — 5-Feb-2017/23:43:57-8:00
At present there's no support for multicast or broadcast. I've asked for this to be implemented but I don't think it's high on anyone's agenda yet.
The reason I'm interested is so I can control things in my house using Amazon echo.
Nick — 6-Feb-2017/6:58:45-8:00
If anyone knows how to get a hold of Cyphre, I'd like to see if he's interest in completing the R3 ports and improvements we discussed last year.
Nick — 6-Feb-2017/7:06:21-8:00
If anyone knows how to reach Robert, he may know how to contact Cyphre.
Reply