1
0
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:
Radu Pascal
2016-08-01 06:49:47 +03:00
committed by Ivan Grokhotkov
parent c4c207a85e
commit b682d597c5
2 changed files with 31 additions and 15 deletions

View File

@ -142,19 +142,31 @@ MDNSResponder::~MDNSResponder() {
_answers = 0;
}
bool MDNSResponder::begin(const char* hostname){
size_t n = strlen(hostname);
bool MDNSResponder::begin(const char* 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.
return false;
}
_ip = ip;
// Copy in hostname characters as lowercase
_hostName = hostname;
_hostName = hostName;
_hostName.toLowerCase();
// If instance name is not already set copy hostname to instance name
if (_instanceName.equals("") ) _instanceName=hostname;
if (_instanceName.equals("") ) _instanceName=hostName;
//only if the IP hasn't been set manually, use the events
if (ip == 0) {
_gotIPHandler = WiFi.onStationModeGotIP([this](const WiFiEventStationModeGotIP& event){
_restart();
});
@ -162,6 +174,7 @@ bool MDNSResponder::begin(const char* hostname){
_disconnectedHandler = WiFi.onStationModeDisconnected([this](const WiFiEventStationModeDisconnected& event) {
_restart();
});
}
return _listen();
}
@ -442,7 +455,11 @@ uint16_t MDNSResponder::_getServicePort(char *name, char *proto){
uint32_t MDNSResponder::_getOurIp(){
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;
wifi_get_ip_info(STATION_IF, &staIpInfo);
return staIpInfo.ip.addr;

View File

@ -63,9 +63,7 @@ public:
~MDNSResponder();
bool begin(const char* hostName);
//for compatibility
bool begin(const char* hostName, IPAddress ip, uint32_t ttl=120){
return begin(hostName);
}
bool begin(const char* hostName, IPAddress ip, uint32_t ttl=120);
void update();
void addService(char *service, char *proto, uint16_t port);
@ -116,8 +114,9 @@ private:
bool _waitingForAnswers;
WiFiEventHandler _disconnectedHandler;
WiFiEventHandler _gotIPHandler;
uint32_t _ip;
bool _begin(const char* hostName, uint32_t ip, uint32_t ttl);
uint32_t _getOurIp();
uint16_t _getServicePort(char *service, char *proto);
MDNSTxt * _getServiceTxt(char *name, char *proto);