mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-07 16:23:38 +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){
|
bool MDNSResponder::begin(const char* hostname){
|
||||||
// Open the MDNS socket if it isn't already open.
|
|
||||||
|
|
||||||
size_t n = strlen(hostname);
|
size_t n = strlen(hostname);
|
||||||
if (n > 63) { // max size for a single label.
|
if (n > 63) { // max size for a single label.
|
||||||
return false;
|
return false;
|
||||||
@ -155,15 +153,41 @@ bool MDNSResponder::begin(const char* hostname){
|
|||||||
_hostName.toLowerCase();
|
_hostName.toLowerCase();
|
||||||
|
|
||||||
// If instance name is not already set copy hostname to instance name
|
// If instance name is not already set copy hostname to instance name
|
||||||
if (_instanceName.equals("") ) _instanceName=hostname;
|
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.
|
// Open the MDNS socket if it isn't already open.
|
||||||
if (!_conn) {
|
if (!_conn) {
|
||||||
uint32_t ourIp = _getOurIp();
|
uint32_t ourIp = _getOurIp();
|
||||||
if(ourIp == 0){
|
if(ourIp == 0){
|
||||||
|
#ifdef MDNS_DEBUG_RX
|
||||||
|
Serial.println("MDNS: no IP address to listen on");
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#ifdef MDNS_DEBUG_RX
|
||||||
|
Serial.print("MDNS listening on IP: ");
|
||||||
|
Serial.println(IPAddress(ourIp));
|
||||||
|
#endif
|
||||||
ip_addr_t ifaddr;
|
ip_addr_t ifaddr;
|
||||||
ifaddr.addr = ourIp;
|
ifaddr.addr = ourIp;
|
||||||
ip_addr_t multicast_addr;
|
ip_addr_t multicast_addr;
|
||||||
|
@ -114,6 +114,8 @@ private:
|
|||||||
struct MDNSQuery * _query;
|
struct MDNSQuery * _query;
|
||||||
bool _newQuery;
|
bool _newQuery;
|
||||||
bool _waitingForAnswers;
|
bool _waitingForAnswers;
|
||||||
|
WiFiEventHandler _disconnectedHandler;
|
||||||
|
WiFiEventHandler _gotIPHandler;
|
||||||
|
|
||||||
|
|
||||||
uint32_t _getOurIp();
|
uint32_t _getOurIp();
|
||||||
@ -125,6 +127,8 @@ private:
|
|||||||
size_t advertiseServices(); // advertise all hosted services
|
size_t advertiseServices(); // advertise all hosted services
|
||||||
MDNSAnswer* _getAnswerFromIdx(int idx);
|
MDNSAnswer* _getAnswerFromIdx(int idx);
|
||||||
int _getNumAnswers();
|
int _getNumAnswers();
|
||||||
|
bool _listen();
|
||||||
|
void _restart();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern MDNSResponder MDNS;
|
extern MDNSResponder MDNS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user