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:
parent
de166c9dd7
commit
17c02ff252
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user