mDNS

Dependents:   OS

This is a mDNS server.

Revision:
4:47d30d199ce0
Parent:
3:25a82eb200c7
Child:
5:4b6323e78f58
diff -r 25a82eb200c7 -r 47d30d199ce0 mDNSResponder.cpp
--- a/mDNSResponder.cpp	Fri Aug 14 12:31:10 2015 +0000
+++ b/mDNSResponder.cpp	Tue Sep 10 13:13:45 2019 +0000
@@ -41,7 +41,7 @@
 #define MDBG(x...)
 #endif
 
-mDNSResponder::mDNSResponder() : IP_str(NULL)
+mDNSResponder::mDNSResponder(EthernetInterface interface) : IP_str(NULL), mdns_sock(&interface)
 {}
 
 /* initialize static instance */
@@ -56,8 +56,8 @@
     .elements =
     {
         {
-            .inst_len = 8,
-            .instance = {'S','E','P','-','0','0','0','0'},
+            .inst_len = 5,
+            .instance = {'s','P','y','O','S'},
             .serv_len = 12,
             .service = {'_','s','m','a','r','t','e','n','e','r','g','y',},
             .trl_len = 4,
@@ -147,28 +147,28 @@
     MDBG("send probe query(%d)\n", 
         (uint16_t)((uint32_t)query - (uint32_t)query_buf));
 
-    mdns_sock.sendTo(send_endpt, query_buf,
+    mdns_sock.sendto(send_endpt, query_buf,
         (query - (uint8_t *) query_buf));
 }
 
-void mDNSResponder::announce(char* ip) 
+void mDNSResponder::announce(const char* ip) 
 {
-    send_endpt.set_address(MCAST, MDNS_PORT);    
+    send_endpt.set_ip_address(MCAST);   
     
     mdns_sock.bind(MDNS_PORT);
-    if (mdns_sock.join_multicast_group(MCAST) != 0) 
+    if (mdns_sock.join_multicast_group(send_endpt) != 0) 
     {
         printf("Error joining the multicast group\n");
-        while (true) {}
+        while(true);
     }
-    
-    IP_str = ip;
+    send_endpt.set_port(MDNS_PORT);
+    IP_str = new char[16];
+    strcpy(IP_str, ip);
     
     IPstringToByte(IP_str);
 
     char instance_number[4];
-    sprintf(instance_number, "%.2X%.2X", 
-        0, IP_byte[3]);
+    //printf("%.2X%.2X", 0, IP_byte[3]);
     register_service(instance_number);
     
     query_domain();
@@ -187,12 +187,12 @@
     char* p_dot;
 
     p_dot = strstr(IPstr, ".");
-    memcpy(ip1, IPstr, p_dot-IPstr);
+    memcpy(ip1, IPstr, p_dot - IPstr);
     IP_byte[0] = (uint8_t)atoi((const char*)ip1);
     
     p = p_dot + 1;
     p_dot = strstr(p, ".");
-    memcpy(ip2, p, p_dot-p);
+    memcpy(ip2, p, p_dot - p);
     IP_byte[1] = (uint8_t)atoi((const char*)ip2);
     
     p = p_dot + 1;
@@ -288,6 +288,7 @@
         switch (g_queries.reqs[i])
         {
             case DNS_TYPE_PTR :
+            {
                 ans_mask = ans_mask ^ DNS_TYPE_PTR;
                 if (off_serv == 0)
                 {
@@ -352,6 +353,7 @@
                     ptr++;
                 }
                 break;
+            }
             case DNS_TYPE_SRV :
                 ans_mask = ans_mask ^ DNS_TYPE_SRV;
                 if (off_inst == 0)
@@ -570,11 +572,11 @@
 
     int send_len = ptr - (uint8_t*)hdr;
 
-    mdns_sock.sendTo(send_endpt, (char*)hdr, send_len);
+    mdns_sock.sendto(send_endpt, (char*)hdr, send_len);
 }
 
 void mDNSResponder::
-MDNS_process(void const *args)
+MDNS_process()
 {
     char rcv_buf[ 1500 ];
     uint8_t nquestions, nanswers;
@@ -585,7 +587,7 @@
         
     MDBG("MDNS Process\n");
 
-    while ((len = mdns_sock.receiveFrom(rcv_endpt, 
+    while ((len = mdns_sock.recvfrom(&rcv_endpt, 
                     rcv_buf, sizeof(rcv_buf))) != 0) 
     {
         hdr = (struct dns_hdr *)rcv_buf;
@@ -595,7 +597,7 @@
         nanswers = (uint8_t) ntohs(hdr->numanswers);
             
         MDBG("resolver: flags1=0x%02X flags2=0x%02X nquestions=%d,\
-            nanswers=%d, nauthrr=%d, nextrarr=%d\n",\
+             nanswers=%d, nauthrr=%d, nextrarr=%d\n\r",\
              hdr->flags1, hdr->flags2, (uint8_t) nquestions, (uint8_t) nanswers,\
              (uint8_t) ntohs(hdr->numauthrr),\
              (uint8_t) ntohs(hdr->numextrarr));
@@ -627,7 +629,7 @@
                                 (const char*)&SD_domains.elements[0].serv_len, 
                                 SD_domains.elements[0].serv_len + 1) == 0)
                     {
-                        MDBG("recv PTR request\n");
+                        MDBG("recv PTR request\n\r");
                         g_queries.reqs[g_queries.numbers] = DNS_TYPE_PTR;
                         g_queries.numbers++;
                     }
@@ -668,9 +670,9 @@
                     if ((strncmp((const char*)name, 
                                 (const char*)&SD_domains.elements[0].inst_len, 
                                 SD_domains.elements[0].inst_len + 1) == 0) &&
-                            (strncmp((const char*)(name + SD_domains.elements[0].inst_len+1),
+                            (strncmp((const char*)(name + SD_domains.elements[0].inst_len + 1),
                                     (const char*)&SD_domains.elements[0].domain_len, 
-                                    SD_domains.elements[0].domain_len+1) == 0))
+                                    SD_domains.elements[0].domain_len + 1) == 0))
                     {
                         MDBG("recv AAAA request\n");
                         g_queries.reqs[g_queries.numbers] = DNS_TYPE_A;
@@ -695,9 +697,9 @@
                 if (type == DNS_TYPE_A || type == DNS_TYPE_A)
                 {
                     char instance_number[4];
-                    sprintf(instance_number, "%.2X%.2X", 
+                    /*printf("%.2X%.2X", 
                         (uint8_t)(rand()%256),
-                        IP_byte[3]);
+                        IP_byte[3]);*/
                     register_service(instance_number);
                     query_domain();
                 }