Skip to content

Commit a33d397

Browse files
ESP8266: Add built-in DNS resolution (disabled by default)
1 parent 40b7901 commit a33d397

File tree

5 files changed

+45
-1
lines changed

5 files changed

+45
-1
lines changed

components/wifi/esp8266-driver/ESP8266/ESP8266.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,11 @@ nsapi_error_t ESP8266::open_tcp(int id, const char *addr, int port, int keepaliv
609609
bool ESP8266::dns_lookup(const char *name, char *ip)
610610
{
611611
_smutex.lock();
612-
bool done = _parser.send("AT+CIPDOMAIN=\"%s\"", name) && _parser.recv("+CIPDOMAIN:%s%*[\r]%*[\n]", ip);
612+
set_timeout(ESP8266_DNS_TIMEOUT);
613+
bool done = _parser.send("AT+CIPDOMAIN=\"%s\"", name)
614+
&& _parser.recv("+CIPDOMAIN:%15[^\n]\n", ip)
615+
&& _parser.recv("OK\n");
616+
set_timeout();
613617
_smutex.unlock();
614618

615619
return done;

components/wifi/esp8266-driver/ESP8266/ESP8266.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@
4343
#ifndef ESP8266_MISC_TIMEOUT
4444
#define ESP8266_MISC_TIMEOUT 2000
4545
#endif
46+
#ifndef ESP8266_DNS_TIMEOUT
47+
#define ESP8266_DNS_TIMEOUT 15000
48+
#endif
4649

4750
#define ESP8266_SCAN_TIME_MIN 0 // [ms]
4851
#define ESP8266_SCAN_TIME_MAX 1500 // [ms]

components/wifi/esp8266-driver/ESP8266Interface.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,28 @@ int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count, scan_mode mode,
652652
return ret;
653653
}
654654

655+
#if MBED_CONF_ESP8266_BUILT_IN_DNS
656+
nsapi_error_t ESP8266Interface::gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version, const char *interface_name)
657+
{
658+
char ip[NSAPI_IPv4_SIZE];
659+
memset(ip, 0, NSAPI_IPv4_SIZE);
660+
if (!_esp.dns_lookup(name, ip)) {
661+
return NSAPI_ERROR_DNS_FAILURE;
662+
}
663+
if (!address->set_ip_address(ip)) {
664+
return NSAPI_ERROR_DNS_FAILURE;
665+
}
666+
667+
return NSAPI_ERROR_OK;
668+
}
669+
670+
671+
nsapi_error_t ESP8266Interface::add_dns_server(const SocketAddress &address, const char *interface_name)
672+
{
673+
return NSAPI_ERROR_OK;
674+
}
675+
#endif
676+
655677
bool ESP8266Interface::_get_firmware_ok()
656678
{
657679
ESP8266::fw_at_version at_v = _esp.at_version();

components/wifi/esp8266-driver/ESP8266Interface.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,14 +228,25 @@ class ESP8266Interface : public NetworkStack, public WiFiInterface {
228228
* version is chosen by the stack (defaults to NSAPI_UNSPEC)
229229
* @return 0 on success, negative error code on failure
230230
*/
231+
#if MBED_CONF_ESP8266_BUILT_IN_DNS
232+
nsapi_error_t gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version, const char *interface_name);
233+
#else
231234
using NetworkInterface::gethostbyname;
235+
#endif
236+
237+
using NetworkInterface::gethostbyname_async;
238+
using NetworkInterface::gethostbyname_async_cancel;
232239

233240
/** Add a domain name server to list of servers to query
234241
*
235242
* @param addr Destination for the host address
236243
* @return 0 on success, negative error code on failure
237244
*/
245+
#if MBED_CONF_ESP8266_BUILT_IN_DNS
246+
nsapi_error_t add_dns_server(const SocketAddress &address, const char *interface_name);
247+
#else
238248
using NetworkInterface::add_dns_server;
249+
#endif
239250

240251
/** @copydoc NetworkStack::setsockopt
241252
*/

components/wifi/esp8266-driver/mbed_lib.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@
6565
"channels": {
6666
"help": "channel count, 13 by default",
6767
"value": null
68+
},
69+
"built-in-dns": {
70+
"help": "use built-in CIPDOMAIN AT command to resolve address to IP",
71+
"value": false
6872
}
6973
},
7074
"target_overrides": {

0 commit comments

Comments
 (0)