mDNS

Dependents:   OS

This is a mDNS server.

Revision:
5:4b6323e78f58
Parent:
4:47d30d199ce0
Child:
6:3bf9f4943d1a
diff -r 47d30d199ce0 -r 4b6323e78f58 mDNSResponder.cpp
--- a/mDNSResponder.cpp	Tue Sep 10 13:13:45 2019 +0000
+++ b/mDNSResponder.cpp	Wed Sep 11 10:40:41 2019 +0000
@@ -41,8 +41,10 @@
 #define MDBG(x...)
 #endif
 
-mDNSResponder::mDNSResponder(EthernetInterface interface) : IP_str(NULL), mdns_sock(&interface)
-{}
+mDNSResponder::mDNSResponder(EthernetInterface interface) : IP_str(NULL)
+{
+    mdns_sock.open(&interface);
+}
 
 /* initialize static instance */
 char mDNSResponder::query_buf[1500] =
@@ -57,7 +59,7 @@
     {
         {
             .inst_len = 5,
-            .instance = {'s','P','y','O','S'},
+            .instance = {'s','p','y','o','s'},
             .serv_len = 12,
             .service = {'_','s','m','a','r','t','e','n','e','r','g','y',},
             .trl_len = 4,
@@ -154,21 +156,22 @@
 void mDNSResponder::announce(const char* ip) 
 {
     send_endpt.set_ip_address(MCAST);   
-    
+    send_endpt.set_port(MDNS_PORT);
+
     mdns_sock.bind(MDNS_PORT);
     if (mdns_sock.join_multicast_group(send_endpt) != 0) 
     {
         printf("Error joining the multicast group\n");
         while(true);
     }
-    send_endpt.set_port(MDNS_PORT);
+    
     IP_str = new char[16];
     strcpy(IP_str, ip);
     
     IPstringToByte(IP_str);
 
     char instance_number[4];
-    //printf("%.2X%.2X", 0, IP_byte[3]);
+
     register_service(instance_number);
     
     query_domain();
@@ -197,7 +200,7 @@
     
     p = p_dot + 1;
     p_dot = strstr(p, ".");
-    memcpy(ip3, p, p_dot-p);
+    memcpy(ip3, p, p_dot - p);
     IP_byte[2] = (uint8_t)atoi((const char*)ip3);
     
     p = p_dot + 1;
@@ -583,12 +586,11 @@
     struct dns_hdr* hdr;
     char *queryptr;
     uint8_t is_request;
-    int len;
         
     MDBG("MDNS Process\n");
 
-    while ((len = mdns_sock.recvfrom(&rcv_endpt, 
-                    rcv_buf, sizeof(rcv_buf))) != 0) 
+    while(mdns_sock.recvfrom(&rcv_endpt, 
+                    rcv_buf, sizeof(rcv_buf)) != 0)
     {
         hdr = (struct dns_hdr *)rcv_buf;
         queryptr = (char *)hdr + sizeof(*hdr);
@@ -697,9 +699,6 @@
                 if (type == DNS_TYPE_A || type == DNS_TYPE_A)
                 {
                     char instance_number[4];
-                    /*printf("%.2X%.2X", 
-                        (uint8_t)(rand()%256),
-                        IP_byte[3]);*/
                     register_service(instance_number);
                     query_domain();
                 }
@@ -709,4 +708,3 @@
     }
 }
 #endif
-