Skip to content

Commit 2f2df26

Browse files
committed
ESP8266mDNS: send empty responses for AAAA requests
Also fix typos and use named constants for reply mask
1 parent 7d56ea4 commit 2f2df26

File tree

1 file changed

+38
-36
lines changed

1 file changed

+38
-36
lines changed

libraries/ESP8266mDNS/ESP8266mDNS.cpp

+38-36
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ extern "C" {
7474
#define MDNS_CLASS_IN 0x0001
7575
#define MDNS_CLASS_IN_FLUSH_CACHE 0x8001
7676

77-
#define MDNS_ANSWERS_ALL 0x0F
78-
#define MDNS_ANSWER_PTR 0x08
79-
#define MDNS_ANSWER_TXT 0x04
80-
#define MDNS_ANSWER_SRV 0x02
8177
#define MDNS_ANSWER_A 0x01
78+
#define MDNS_ANSWER_SRV 0x02
79+
#define MDNS_ANSWER_TXT 0x04
80+
#define MDNS_ANSWER_PTR 0x08
81+
#define MDNS_ANSWER_AAAA 0x10
8282

8383
#define _conn_read32() (((uint32_t)_conn->read() << 24) | ((uint32_t)_conn->read() << 16) | ((uint32_t)_conn->read() << 8) | _conn->read())
8484
#define _conn_read16() (((uint16_t)_conn->read() << 8) | _conn->read())
@@ -332,11 +332,11 @@ int MDNSResponder::queryService(char *service, char *proto) {
332332

333333
// Only supports sending one PTR query
334334
// Send the Name field (eg. "_http._tcp.local")
335-
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // lenght of "_" + service
335+
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // length of "_" + service
336336
_conn->append(reinterpret_cast<const char*>(serviceName), serviceNameLen); // "_" + service
337-
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // lenght of "_" + proto
337+
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // length of "_" + proto
338338
_conn->append(reinterpret_cast<const char*>(protoName), protoNameLen); // "_" + proto
339-
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // lenght of "local"
339+
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // length of "local"
340340
_conn->append(reinterpret_cast<const char*>(localName), localNameLen); // "local"
341341
_conn->append(reinterpret_cast<const char*>(&terminator), 1); // terminator
342342

@@ -824,10 +824,11 @@ void MDNSResponder::_parsePacket(){
824824
}
825825
uint8_t responseMask = 0;
826826
for(i=0;i<question;i++){
827-
if(questions[i] == MDNS_TYPE_A) responseMask |= 0x1;
828-
else if(questions[i] == MDNS_TYPE_SRV) responseMask |= 0x3;
829-
else if(questions[i] == MDNS_TYPE_TXT) responseMask |= 0x4;
830-
else if(questions[i] == MDNS_TYPE_PTR) responseMask |= 0xF;
827+
if(questions[i] == MDNS_TYPE_A) responseMask |= MDNS_ANSWER_A;
828+
else if(questions[i] == MDNS_TYPE_SRV) responseMask |= MDNS_ANSWER_A | MDNS_ANSWER_SRV;
829+
else if(questions[i] == MDNS_TYPE_TXT) responseMask |= MDNS_ANSWER_TXT;
830+
else if(questions[i] == MDNS_TYPE_PTR) responseMask |= MDNS_ANSWER_A | MDNS_ANSWER_SRV | MDNS_ANSWER_TXT;
831+
else if(questions[i] == MDNS_TYPE_AAAA) responseMask |= MDNS_ANSWER_AAAA;
831832
}
832833

833834
return _reply(responseMask, serviceName, protoName, servicePort);
@@ -891,7 +892,8 @@ void MDNSResponder::_reply(uint8_t replyMask, char * service, char *proto, uint1
891892
char terminator[] = "\0";
892893

893894
uint8_t answerCount = 0;
894-
for(i=0;i<4;i++){
895+
for(i=0; i<4; i++){
896+
// we don't add AAAA to answers count because we never answer those
895897
if(replyMask & (1 << i)) answerCount++;
896898
}
897899

@@ -909,13 +911,13 @@ void MDNSResponder::_reply(uint8_t replyMask, char * service, char *proto, uint1
909911
_conn->append(reinterpret_cast<const char*>(head), 12);
910912

911913
// PTR Response
912-
if(replyMask & 0x8){
914+
if(replyMask & MDNS_ANSWER_PTR){
913915
// Send the Name field (ie. "_http._tcp.local")
914-
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // lenght of "_http"
916+
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // length of "_http"
915917
_conn->append(reinterpret_cast<const char*>(serviceName), serviceNameLen); // "_http"
916-
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // lenght of "_tcp"
918+
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // length of "_tcp"
917919
_conn->append(reinterpret_cast<const char*>(protoName), protoNameLen); // "_tcp"
918-
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // lenght "local"
920+
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // length "local"
919921
_conn->append(reinterpret_cast<const char*>(localName), localNameLen); // "local"
920922
_conn->append(reinterpret_cast<const char*>(&terminator), 1); // terminator
921923

@@ -930,27 +932,27 @@ void MDNSResponder::_reply(uint8_t replyMask, char * service, char *proto, uint1
930932
_conn->append(reinterpret_cast<const char*>(ptrAttrs), 10);
931933

932934
//Send the RData (ie. "My IOT device._http._tcp.local")
933-
_conn->append(reinterpret_cast<const char*>(&instanceNameLen), 1); // lenght of "My IOT device"
935+
_conn->append(reinterpret_cast<const char*>(&instanceNameLen), 1); // length of "My IOT device"
934936
_conn->append(reinterpret_cast<const char*>(instanceName.c_str()), instanceNameLen);// "My IOT device"
935-
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // lenght of "_http"
937+
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // length of "_http"
936938
_conn->append(reinterpret_cast<const char*>(serviceName), serviceNameLen); // "_http"
937-
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // lenght of "_tcp"
939+
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // length of "_tcp"
938940
_conn->append(reinterpret_cast<const char*>(protoName), protoNameLen); // "_tcp"
939-
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // lenght "local"
941+
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // length "local"
940942
_conn->append(reinterpret_cast<const char*>(localName), localNameLen); // "local"
941943
_conn->append(reinterpret_cast<const char*>(&terminator), 1); // terminator
942944
}
943945

944946
//TXT Responce
945-
if(replyMask & 0x4){
947+
if(replyMask & MDNS_ANSWER_TXT){
946948
//Send the name field (ie. "My IOT device._http._tcp.local")
947-
_conn->append(reinterpret_cast<const char*>(&instanceNameLen), 1); // lenght of "My IOT device"
949+
_conn->append(reinterpret_cast<const char*>(&instanceNameLen), 1); // length of "My IOT device"
948950
_conn->append(reinterpret_cast<const char*>(instanceName.c_str()), instanceNameLen);// "My IOT device"
949-
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // lenght of "_http"
951+
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // length of "_http"
950952
_conn->append(reinterpret_cast<const char*>(serviceName), serviceNameLen); // "_http"
951-
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // lenght of "_tcp"
953+
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // length of "_tcp"
952954
_conn->append(reinterpret_cast<const char*>(protoName), protoNameLen); // "_tcp"
953-
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // lenght "local"
955+
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // length "local"
954956
_conn->append(reinterpret_cast<const char*>(localName), localNameLen); // "local"
955957
_conn->append(reinterpret_cast<const char*>(&terminator), 1); // terminator
956958

@@ -968,23 +970,23 @@ void MDNSResponder::_reply(uint8_t replyMask, char * service, char *proto, uint1
968970
MDNSTxt * txtPtr = _getServiceTxt(service,proto);
969971
while(txtPtr !=0){
970972
uint8_t txtLen = txtPtr->_txt.length();
971-
_conn->append(reinterpret_cast<const char*>(&txtLen), 1); // lenght of txt
973+
_conn->append(reinterpret_cast<const char*>(&txtLen), 1); // length of txt
972974
_conn->append(reinterpret_cast<const char*>(txtPtr->_txt.c_str()), txtLen);// the txt
973975
txtPtr = txtPtr->_next;
974976
}
975977
}
976978

977979

978980
//SRV Responce
979-
if(replyMask & 0x2){
981+
if(replyMask & MDNS_ANSWER_SRV){
980982
//Send the name field (ie. "My IOT device._http._tcp.local")
981-
_conn->append(reinterpret_cast<const char*>(&instanceNameLen), 1); // lenght of "My IOT device"
983+
_conn->append(reinterpret_cast<const char*>(&instanceNameLen), 1); // length of "My IOT device"
982984
_conn->append(reinterpret_cast<const char*>(instanceName.c_str()), instanceNameLen);// "My IOT device"
983-
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // lenght of "_http"
985+
_conn->append(reinterpret_cast<const char*>(&serviceNameLen), 1); // length of "_http"
984986
_conn->append(reinterpret_cast<const char*>(serviceName), serviceNameLen); // "_http"
985-
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // lenght of "_tcp"
987+
_conn->append(reinterpret_cast<const char*>(&protoNameLen), 1); // length of "_tcp"
986988
_conn->append(reinterpret_cast<const char*>(protoName), protoNameLen); // "_tcp"
987-
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // lenght "local"
989+
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // length "local"
988990
_conn->append(reinterpret_cast<const char*>(localName), localNameLen); // "local"
989991
_conn->append(reinterpret_cast<const char*>(&terminator), 1); // terminator
990992

@@ -1007,20 +1009,20 @@ void MDNSResponder::_reply(uint8_t replyMask, char * service, char *proto, uint1
10071009
};
10081010
_conn->append(reinterpret_cast<const char*>(srvRData), 6);
10091011
//Send the RData (ie. "esp8266.local")
1010-
_conn->append(reinterpret_cast<const char*>(&hostNameLen), 1); // lenght of "esp8266"
1012+
_conn->append(reinterpret_cast<const char*>(&hostNameLen), 1); // length of "esp8266"
10111013
_conn->append(reinterpret_cast<const char*>(hostName.c_str()), hostNameLen);// "esp8266"
1012-
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // lenght "local"
1014+
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // length "local"
10131015
_conn->append(reinterpret_cast<const char*>(localName), localNameLen); // "local"
10141016
_conn->append(reinterpret_cast<const char*>(&terminator), 1); // terminator
10151017

10161018
}
10171019

10181020
// A Response
1019-
if(replyMask & 0x1){
1021+
if(replyMask & MDNS_ANSWER_A){
10201022
//Send the RData (ie. "esp8266.local")
1021-
_conn->append(reinterpret_cast<const char*>(&hostNameLen), 1); // lenght of "esp8266"
1023+
_conn->append(reinterpret_cast<const char*>(&hostNameLen), 1); // length of "esp8266"
10221024
_conn->append(reinterpret_cast<const char*>(hostName.c_str()), hostNameLen);// "esp8266"
1023-
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // lenght "local"
1025+
_conn->append(reinterpret_cast<const char*>(&localNameLen), 1); // length "local"
10241026
_conn->append(reinterpret_cast<const char*>(localName), localNameLen); // "local"
10251027
_conn->append(reinterpret_cast<const char*>(&terminator), 1); // terminator
10261028

0 commit comments

Comments
 (0)