mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-21 21:22:31 +03:00
ESP8266mDNS using the provided IP in the begin method (#2349)
this fix forces the mDNS to use the provided IP in the begin method instead of the auto detected IP. this is required if the ESP8266 starts in the AP_STA mode and activates only the AP initially.
This commit is contained in:
committed by
Ivan Grokhotkov
parent
c4c207a85e
commit
b682d597c5
@ -142,26 +142,39 @@ MDNSResponder::~MDNSResponder() {
|
|||||||
_answers = 0;
|
_answers = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MDNSResponder::begin(const char* hostname){
|
bool MDNSResponder::begin(const char* hostName){
|
||||||
size_t n = strlen(hostname);
|
return _begin(hostName, 0, 120);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MDNSResponder::begin(const char* hostName, IPAddress ip, uint32_t ttl){
|
||||||
|
return _begin(hostName, ip, ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MDNSResponder::_begin(const char *hostName, uint32_t ip, uint32_t ttl){
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ip = ip;
|
||||||
|
|
||||||
// Copy in hostname characters as lowercase
|
// Copy in hostname characters as lowercase
|
||||||
_hostName = hostname;
|
_hostName = 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){
|
//only if the IP hasn't been set manually, use the events
|
||||||
_restart();
|
if (ip == 0) {
|
||||||
});
|
_gotIPHandler = WiFi.onStationModeGotIP([this](const WiFiEventStationModeGotIP& event){
|
||||||
|
_restart();
|
||||||
|
});
|
||||||
|
|
||||||
_disconnectedHandler = WiFi.onStationModeDisconnected([this](const WiFiEventStationModeDisconnected& event) {
|
_disconnectedHandler = WiFi.onStationModeDisconnected([this](const WiFiEventStationModeDisconnected& event) {
|
||||||
_restart();
|
_restart();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return _listen();
|
return _listen();
|
||||||
}
|
}
|
||||||
@ -442,7 +455,11 @@ uint16_t MDNSResponder::_getServicePort(char *name, char *proto){
|
|||||||
|
|
||||||
uint32_t MDNSResponder::_getOurIp(){
|
uint32_t MDNSResponder::_getOurIp(){
|
||||||
int mode = wifi_get_opmode();
|
int mode = wifi_get_opmode();
|
||||||
if(mode & STATION_MODE){
|
|
||||||
|
//if has a manually set IP use this
|
||||||
|
if(_ip){
|
||||||
|
return _ip;
|
||||||
|
} else if(mode & STATION_MODE){
|
||||||
struct ip_info staIpInfo;
|
struct ip_info staIpInfo;
|
||||||
wifi_get_ip_info(STATION_IF, &staIpInfo);
|
wifi_get_ip_info(STATION_IF, &staIpInfo);
|
||||||
return staIpInfo.ip.addr;
|
return staIpInfo.ip.addr;
|
||||||
|
@ -63,9 +63,7 @@ public:
|
|||||||
~MDNSResponder();
|
~MDNSResponder();
|
||||||
bool begin(const char* hostName);
|
bool begin(const char* hostName);
|
||||||
//for compatibility
|
//for compatibility
|
||||||
bool begin(const char* hostName, IPAddress ip, uint32_t ttl=120){
|
bool begin(const char* hostName, IPAddress ip, uint32_t ttl=120);
|
||||||
return begin(hostName);
|
|
||||||
}
|
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
void addService(char *service, char *proto, uint16_t port);
|
void addService(char *service, char *proto, uint16_t port);
|
||||||
@ -116,8 +114,9 @@ private:
|
|||||||
bool _waitingForAnswers;
|
bool _waitingForAnswers;
|
||||||
WiFiEventHandler _disconnectedHandler;
|
WiFiEventHandler _disconnectedHandler;
|
||||||
WiFiEventHandler _gotIPHandler;
|
WiFiEventHandler _gotIPHandler;
|
||||||
|
uint32_t _ip;
|
||||||
|
|
||||||
|
bool _begin(const char* hostName, uint32_t ip, uint32_t ttl);
|
||||||
uint32_t _getOurIp();
|
uint32_t _getOurIp();
|
||||||
uint16_t _getServicePort(char *service, char *proto);
|
uint16_t _getServicePort(char *service, char *proto);
|
||||||
MDNSTxt * _getServiceTxt(char *name, char *proto);
|
MDNSTxt * _getServiceTxt(char *name, char *proto);
|
||||||
|
Reference in New Issue
Block a user