mDNS
This is a mDNS server.
Diff: mDNSResponder.cpp
- Revision:
- 4:47d30d199ce0
- Parent:
- 3:25a82eb200c7
- Child:
- 5:4b6323e78f58
--- 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(); }