Simple mDNS responder
Modified version of the IP stack with an extra 'mDNS' rendezvous or zeroconf serivce added can be found at http://mbed.org/users/dirkx/programs/Bonjour.
The main purpose of this is to make it easier to find & access your device - as it now self announces and there is no need to hardcode, or use serial, to figure out the IP address.
Typical use is something like:
EthernetNetIf eth;
HTTPServer svr; // some sample TCP or UDP service
mDNSResponder mdns;
int main() {
// get internet
EthernetErr ethErr = eth.setup();
... etc ..
// set up some server
svr.addHandler<SimpleHandler>("/"); //Default handler
svr.bind(80);
// Extract the IP address (as we need to advertise this to the world).
IpAddr ip = eth.getIp();
printf("mbed IP Address is %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);
// Announce ourselves.
mdns.announce(ip, "_http._tcp", 80, "The Little Server that Could",
"path=/demo");
while()... enter some run loop
Or as another example: (http://files.dns-sd.org/draft-cheshire-dnsext-dns- sd.txt) and the various RFCs consider something like this:
mdns.announce(ip, "_ssh._tcp", 22, SSH to Serial Gateway", NULL);
Next download and start. And then either use a command line tool or any rendesvours (web) browser and observe:
{{{
pappamoem:tmp dirkx$ dns-sd -B _http._tcp
Browsing for _http._tcp
Timestamp A/R Flags if Domain Service Type
Instance Name
19:34:31.572 Add 3 4 local. _http._tcp.
Brother HL-5170DN series (BRN_3A6100_P1_AT)
19:34:31.573 Add 3 4 local. _http._tcp.
EyeTV pappamoem
19:34:31.573 Add 2 4 local. _http._tcp.
moi
19:35:12.616 Rmv 0 4 local. _http._tcp.
moi
19:58:15.924 Add 2 4 local. _http._tcp.
May the blood run free
19:59:16.920 Rmv 0 4 local. _http._tcp.
May the blood run free
20:09:11.601 Add 2 4 local. _http._tcp.
May the blood run free
}}}
As your embed comes on-line and drops off (Rmv) again. Alternatively you'll see them appear in your webbrowser (try Safari):

Selecting it will go to the URL constructed from the 'Path' field prefixed by http: and the FQDN or IP address (depending).
CAVEAT: this code is not production ready. I stripped a lot of the buffer hacking/protection out - and did not port the memory mngt and other routines which made it (threat)safe.
Please log in to post comments.
