1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-06 05:21:22 +03:00

Fixed bug when making multiple consecutive queries

This commit is contained in:
Lars Englund 2016-03-09 15:43:03 +01:00
parent 1569b3ba5d
commit 59c6667050
2 changed files with 17 additions and 17 deletions

View File

@ -314,14 +314,7 @@ int MDNSResponder::queryService(char *service, char *proto) {
_waitingForAnswers = false; _waitingForAnswers = false;
int numAnswers = 0; return _getNumAnswers();
MDNSAnswer *answer = _answers;
while (answer != 0) {
numAnswers++;
answer = answer->next;
}
return numAnswers;
} }
String MDNSResponder::hostname(int idx) { String MDNSResponder::hostname(int idx) {
@ -359,6 +352,16 @@ MDNSAnswer* MDNSResponder::_getAnswerFromIdx(int idx) {
return answer; return answer;
} }
int MDNSResponder::_getNumAnswers() {
int numAnswers = 0;
MDNSAnswer *answer = _answers;
while (answer != 0) {
numAnswers++;
answer = answer->next;
}
return numAnswers;
}
MDNSTxt * MDNSResponder::_getServiceTxt(char *name, char *proto){ MDNSTxt * MDNSResponder::_getServiceTxt(char *name, char *proto){
MDNSService* servicePtr; MDNSService* servicePtr;
for (servicePtr = _services; servicePtr; servicePtr = servicePtr->_next) { for (servicePtr = _services; servicePtr; servicePtr = servicePtr->_next) {
@ -468,18 +471,14 @@ void MDNSResponder::_parsePacket(){
// Clear answer list // Clear answer list
if (_newQuery) { if (_newQuery) {
answer = _answers; int numAnswers = _getNumAnswers();
while (answer != 0) { for (int n = numAnswers - 1; n >= 0; n--) {
while (answer->next != 0) { answer = _getAnswerFromIdx(n);
answer = answer->next;
}
if (answer == _answers) {
_answers = 0;
}
os_free(answer->hostname); os_free(answer->hostname);
os_free(answer); os_free(answer);
answer = _answers; answer = 0;
} }
_answers = 0;
_newQuery = false; _newQuery = false;
} }

View File

@ -124,6 +124,7 @@ private:
void _reply(uint8_t replyMask, char * service, char *proto, uint16_t port); void _reply(uint8_t replyMask, char * service, char *proto, uint16_t port);
size_t advertiseServices(); // advertise all hosted services size_t advertiseServices(); // advertise all hosted services
MDNSAnswer* _getAnswerFromIdx(int idx); MDNSAnswer* _getAnswerFromIdx(int idx);
int _getNumAnswers();
}; };
extern MDNSResponder MDNS; extern MDNSResponder MDNS;