ESP8266: Add built-in DNS resolution (disabled by default)

pull/12234/head
Michal Paszta 2020-01-07 12:04:06 +02:00
parent dc6320239b
commit f032274729
5 changed files with 45 additions and 1 deletions

View File

@ -609,7 +609,11 @@ nsapi_error_t ESP8266::open_tcp(int id, const char *addr, int port, int keepaliv
bool ESP8266::dns_lookup(const char *name, char *ip)
{
_smutex.lock();
bool done = _parser.send("AT+CIPDOMAIN=\"%s\"", name) && _parser.recv("+CIPDOMAIN:%s%*[\r]%*[\n]", ip);
set_timeout(ESP8266_DNS_TIMEOUT);
bool done = _parser.send("AT+CIPDOMAIN=\"%s\"", name)
&& _parser.recv("+CIPDOMAIN:%15[^\n]\n", ip)
&& _parser.recv("OK\n");
set_timeout();
_smutex.unlock();
return done;

View File

@ -43,6 +43,9 @@
#ifndef ESP8266_MISC_TIMEOUT
#define ESP8266_MISC_TIMEOUT 2000
#endif
#ifndef ESP8266_DNS_TIMEOUT
#define ESP8266_DNS_TIMEOUT 15000
#endif
#define ESP8266_SCAN_TIME_MIN 0 // [ms]
#define ESP8266_SCAN_TIME_MAX 1500 // [ms]

View File

@ -652,6 +652,28 @@ int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count, scan_mode mode,
return ret;
}
#if MBED_CONF_ESP8266_BUILT_IN_DNS
nsapi_error_t ESP8266Interface::gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version, const char *interface_name)
{
char ip[NSAPI_IPv4_SIZE];
memset(ip, 0, NSAPI_IPv4_SIZE);
if (!_esp.dns_lookup(name, ip)) {
return NSAPI_ERROR_DNS_FAILURE;
}
if (!address->set_ip_address(ip)) {
return NSAPI_ERROR_DNS_FAILURE;
}
return NSAPI_ERROR_OK;
}
nsapi_error_t ESP8266Interface::add_dns_server(const SocketAddress &address, const char *interface_name)
{
return NSAPI_ERROR_OK;
}
#endif
bool ESP8266Interface::_get_firmware_ok()
{
ESP8266::fw_at_version at_v = _esp.at_version();

View File

@ -228,14 +228,25 @@ public:
* version is chosen by the stack (defaults to NSAPI_UNSPEC)
* @return 0 on success, negative error code on failure
*/
#if MBED_CONF_ESP8266_BUILT_IN_DNS
nsapi_error_t gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version, const char *interface_name);
#else
using NetworkInterface::gethostbyname;
#endif
using NetworkInterface::gethostbyname_async;
using NetworkInterface::gethostbyname_async_cancel;
/** Add a domain name server to list of servers to query
*
* @param addr Destination for the host address
* @return 0 on success, negative error code on failure
*/
#if MBED_CONF_ESP8266_BUILT_IN_DNS
nsapi_error_t add_dns_server(const SocketAddress &address, const char *interface_name);
#else
using NetworkInterface::add_dns_server;
#endif
/** @copydoc NetworkStack::setsockopt
*/

View File

@ -65,6 +65,10 @@
"channels": {
"help": "channel count, 13 by default",
"value": null
},
"built-in-dns": {
"help": "use built-in CIPDOMAIN AT command to resolve address to IP",
"value": false
}
},
"target_overrides": {