Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Commit 5eb93c3

Browse files
beegee-tokyome-no-dev
authored andcommitted
Make ESPmDNS compatible to ESP8266mDNS (#1085)
The ESP8266 version of the mDNS library expected service name and protocol without leading '_' (underscore). The ESP32 version expected service name and protocol with leading '_' (underscore). This small change makes the ESP32 version compatible with the ESP8266 version and keeps backward compatible with existing code by accepting service name and protocol either with or without leading '_' (underscore).
1 parent 1562a0a commit 5eb93c3

File tree

1 file changed

+39
-4
lines changed

1 file changed

+39
-4
lines changed

src/ESPmDNS.cpp

+39-4
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ bool MDNSResponder::begin(const char* hostName){
5959
}
6060
WiFi.onEvent(_on_sys_event);
6161
_hostname = hostName;
62+
_hostname.toLowerCase();
6263
if(mdns_hostname_set(hostName)) {
6364
log_e("Failed setting MDNS hostname");
6465
return false;
@@ -122,13 +123,39 @@ void MDNSResponder::disableWorkstation(){
122123
}
123124

124125
void MDNSResponder::addService(char *name, char *proto, uint16_t port){
125-
if(mdns_service_add(NULL, name, proto, port, NULL, 0)) {
126+
char _name[strlen(name)+2];
127+
char _proto[strlen(proto)+2];
128+
if (name[0] == '_') {
129+
sprintf(_name, "%s", name);
130+
} else {
131+
sprintf(_name, "_%s", name);
132+
}
133+
if (proto[0] == '_') {
134+
sprintf(_proto, "%s", proto);
135+
} else {
136+
sprintf(_proto, "_%s", proto);
137+
}
138+
139+
if(mdns_service_add(NULL, _name, _proto, port, NULL, 0)) {
126140
log_e("Failed adding service %s.%s.\n", name, proto);
127141
}
128142
}
129143

130144
bool MDNSResponder::addServiceTxt(char *name, char *proto, char *key, char *value){
131-
if(mdns_service_txt_item_set(name, proto, key, value)) {
145+
char _name[strlen(name)+2];
146+
char _proto[strlen(proto)+2];
147+
if (name[0] == '_') {
148+
sprintf(_name, "%s", name);
149+
} else {
150+
sprintf(_name, "_%s", name);
151+
}
152+
if (proto[0] == '_') {
153+
sprintf(_proto, "%s", proto);
154+
} else {
155+
sprintf(_proto, "_%s", proto);
156+
}
157+
158+
if(mdns_service_txt_item_set(_name, _proto, key, value)) {
132159
log_e("Failed setting service TXT");
133160
return false;
134161
}
@@ -165,8 +192,16 @@ int MDNSResponder::queryService(char *service, char *proto) {
165192

166193
char srv[strlen(service)+2];
167194
char prt[strlen(proto)+2];
168-
sprintf(srv, "_%s", service);
169-
sprintf(prt, "_%s", proto);
195+
if (service[0] == '_') {
196+
sprintf(srv, "%s", service);
197+
} else {
198+
sprintf(srv, "_%s", service);
199+
}
200+
if (proto[0] == '_') {
201+
sprintf(prt, "%s", proto);
202+
} else {
203+
sprintf(prt, "_%s", proto);
204+
}
170205

171206
esp_err_t err = mdns_query_ptr(srv, prt, 3000, 20, &results);
172207
if(err){

0 commit comments

Comments
 (0)