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

ESP8266mDNS: restart listening when WiFi STA is connected/disconnected (#1828)

This commit is contained in:
Ivan Grokhotkov 2016-06-12 14:17:27 +08:00
parent de166c9dd7
commit 17c02ff252
2 changed files with 32 additions and 4 deletions

View File

@ -143,8 +143,6 @@ MDNSResponder::~MDNSResponder() {
}
bool MDNSResponder::begin(const char* hostname){
// Open the MDNS socket if it isn't already open.
size_t n = strlen(hostname);
if (n > 63) { // max size for a single label.
return false;
@ -157,13 +155,39 @@ bool MDNSResponder::begin(const char* hostname){
// If instance name is not already set copy hostname to instance name
if (_instanceName.equals("") ) _instanceName=hostname;
_gotIPHandler = WiFi.onStationModeGotIP([this](const WiFiEventStationModeGotIP& event){
_restart();
});
_disconnectedHandler = WiFi.onStationModeDisconnected([this](const WiFiEventStationModeDisconnected& event) {
_restart();
});
return _listen();
}
void MDNSResponder::_restart() {
if (_conn) {
_conn->unref();
_conn = nullptr;
}
_listen();
}
bool MDNSResponder::_listen() {
// Open the MDNS socket if it isn't already open.
if (!_conn) {
uint32_t ourIp = _getOurIp();
if(ourIp == 0){
#ifdef MDNS_DEBUG_RX
Serial.println("MDNS: no IP address to listen on");
#endif
return false;
}
#ifdef MDNS_DEBUG_RX
Serial.print("MDNS listening on IP: ");
Serial.println(IPAddress(ourIp));
#endif
ip_addr_t ifaddr;
ifaddr.addr = ourIp;
ip_addr_t multicast_addr;

View File

@ -114,6 +114,8 @@ private:
struct MDNSQuery * _query;
bool _newQuery;
bool _waitingForAnswers;
WiFiEventHandler _disconnectedHandler;
WiFiEventHandler _gotIPHandler;
uint32_t _getOurIp();
@ -125,6 +127,8 @@ private:
size_t advertiseServices(); // advertise all hosted services
MDNSAnswer* _getAnswerFromIdx(int idx);
int _getNumAnswers();
bool _listen();
void _restart();
};
extern MDNSResponder MDNS;