From 0b42f53bf4eab05251db61061647a851b4b35c90 Mon Sep 17 00:00:00 2001 From: probonopd Date: Sat, 16 Jan 2016 20:37:06 +0100 Subject: [PATCH 1/3] advertise all hosted services --- libraries/ESP8266mDNS/ESP8266mDNS.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ESP8266mDNS/ESP8266mDNS.h b/libraries/ESP8266mDNS/ESP8266mDNS.h index 28ef7155c..e349e95ed 100644 --- a/libraries/ESP8266mDNS/ESP8266mDNS.h +++ b/libraries/ESP8266mDNS/ESP8266mDNS.h @@ -83,6 +83,7 @@ public: } void enableArduino(uint16_t port, bool auth=false); + size_t advertiseServices(); // advertise all hosted services void setInstanceName(String name); void setInstanceName(const char * name){ From 7a35ee4813c7b578ab99abf0112d7bca02afd1a2 Mon Sep 17 00:00:00 2001 From: probonopd Date: Sat, 16 Jan 2016 20:39:52 +0100 Subject: [PATCH 2/3] advertise all hosted services (written by me-no-dev) --- libraries/ESP8266mDNS/ESP8266mDNS.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/libraries/ESP8266mDNS/ESP8266mDNS.cpp b/libraries/ESP8266mDNS/ESP8266mDNS.cpp index a690bdf22..04b66fede 100644 --- a/libraries/ESP8266mDNS/ESP8266mDNS.cpp +++ b/libraries/ESP8266mDNS/ESP8266mDNS.cpp @@ -366,6 +366,10 @@ void MDNSResponder::_parsePacket(){ memmove(protoName, protoName+1, protoNameLen); protoNameLen--; protoParsed = true; + } else if(strcmp("services", serviceName) == 0 && strcmp("_dns-sd", protoName) == 0){ + _conn->flush(); + advertiseServices(); + return; } else { #ifdef MDNS_DEBUG_ERR Serial.printf("ERR_PROTO: %s\n", protoName); @@ -479,6 +483,18 @@ void MDNSResponder::enableArduino(uint16_t port, bool auth){ addServiceTxt("arduino", "tcp", "auth_upload", (auth) ? "yes":"no"); } +size_t MDNSResponder::advertiseServices(){ + MDNSService* servicePtr; + size_t i = 0; + for (servicePtr = _services; servicePtr; servicePtr = servicePtr->_next) { + if(servicePtr->_port > 0){ + _reply(0x0F, servicePtr->_name, servicePtr->_proto, servicePtr->_port); + i++; + } + } + return i; +} + void MDNSResponder::_reply(uint8_t replyMask, char * service, char *proto, uint16_t port){ int i; if(replyMask == 0) return; From 160f84a6f6b625062a9c5d6ab473acdf617fc32b Mon Sep 17 00:00:00 2001 From: probonopd Date: Sat, 16 Jan 2016 20:51:08 +0100 Subject: [PATCH 3/3] Make advertiseServices() private --- libraries/ESP8266mDNS/ESP8266mDNS.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ESP8266mDNS/ESP8266mDNS.h b/libraries/ESP8266mDNS/ESP8266mDNS.h index e349e95ed..8e3108e0e 100644 --- a/libraries/ESP8266mDNS/ESP8266mDNS.h +++ b/libraries/ESP8266mDNS/ESP8266mDNS.h @@ -83,7 +83,6 @@ public: } void enableArduino(uint16_t port, bool auth=false); - size_t advertiseServices(); // advertise all hosted services void setInstanceName(String name); void setInstanceName(const char * name){ @@ -105,6 +104,7 @@ private: uint16_t _getServiceTxtLen(char *name, char *proto); void _parsePacket(); void _reply(uint8_t replyMask, char * service, char *proto, uint16_t port); + size_t advertiseServices(); // advertise all hosted services }; extern MDNSResponder MDNS;