Skip to content

Commit 59c6667

Browse files
committed
Fixed bug when making multiple consecutive queries
1 parent 1569b3b commit 59c6667

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

libraries/ESP8266mDNS/ESP8266mDNS.cpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -314,14 +314,7 @@ int MDNSResponder::queryService(char *service, char *proto) {
314314

315315
_waitingForAnswers = false;
316316

317-
int numAnswers = 0;
318-
MDNSAnswer *answer = _answers;
319-
while (answer != 0) {
320-
numAnswers++;
321-
answer = answer->next;
322-
}
323-
324-
return numAnswers;
317+
return _getNumAnswers();
325318
}
326319

327320
String MDNSResponder::hostname(int idx) {
@@ -359,6 +352,16 @@ MDNSAnswer* MDNSResponder::_getAnswerFromIdx(int idx) {
359352
return answer;
360353
}
361354

355+
int MDNSResponder::_getNumAnswers() {
356+
int numAnswers = 0;
357+
MDNSAnswer *answer = _answers;
358+
while (answer != 0) {
359+
numAnswers++;
360+
answer = answer->next;
361+
}
362+
return numAnswers;
363+
}
364+
362365
MDNSTxt * MDNSResponder::_getServiceTxt(char *name, char *proto){
363366
MDNSService* servicePtr;
364367
for (servicePtr = _services; servicePtr; servicePtr = servicePtr->_next) {
@@ -468,18 +471,14 @@ void MDNSResponder::_parsePacket(){
468471

469472
// Clear answer list
470473
if (_newQuery) {
471-
answer = _answers;
472-
while (answer != 0) {
473-
while (answer->next != 0) {
474-
answer = answer->next;
475-
}
476-
if (answer == _answers) {
477-
_answers = 0;
478-
}
474+
int numAnswers = _getNumAnswers();
475+
for (int n = numAnswers - 1; n >= 0; n--) {
476+
answer = _getAnswerFromIdx(n);
479477
os_free(answer->hostname);
480478
os_free(answer);
481-
answer = _answers;
479+
answer = 0;
482480
}
481+
_answers = 0;
483482
_newQuery = false;
484483
}
485484

libraries/ESP8266mDNS/ESP8266mDNS.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ class MDNSResponder {
124124
void _reply(uint8_t replyMask, char * service, char *proto, uint16_t port);
125125
size_t advertiseServices(); // advertise all hosted services
126126
MDNSAnswer* _getAnswerFromIdx(int idx);
127+
int _getNumAnswers();
127128
};
128129

129130
extern MDNSResponder MDNS;

0 commit comments

Comments
 (0)