Added version to nsapi get host by name

pull/2767/head
Mika Leppänen 2016-09-27 11:54:54 +03:00
parent 1f98cc3d54
commit e5c291d347
3 changed files with 41 additions and 12 deletions

View File

@ -525,12 +525,13 @@ static int lwip_err_remap(err_t err) {
}
/* LWIP network stack implementation */
static int lwip_gethostbyname(nsapi_stack_t *stack, const char *host, nsapi_addr_t *addr)
static int lwip_gethostbyname(nsapi_stack_t *stack, const char *host, nsapi_addr_t *addr, nsapi_version_t version)
{
ip_addr_t lwip_addr;
#if LWIP_IPV4 && LWIP_IPV6
u8_t addr_type;
if (version == NSAPI_UNSPEC) {
const ip_addr_t *ip_addr;
ip_addr = lwip_get_ip_addr(true, &lwip_netif);
if (IP_IS_V6(ip_addr)) {
@ -538,10 +539,24 @@ static int lwip_gethostbyname(nsapi_stack_t *stack, const char *host, nsapi_addr
} else {
addr_type = NETCONN_DNS_IPV4;
}
} else if (version == NSAPI_IPv4) {
addr_type = NETCONN_DNS_IPV4;
} else if (version == NSAPI_IPv6) {
addr_type = NETCONN_DNS_IPV6;
}
err_t err = netconn_gethostbyname_addrtype(host, &lwip_addr, addr_type);
#else
#elif LWIP_IPV4
if (version != NSAPI_IPv4 && version != NSAPI_UNSPEC) {
return NSAPI_ERROR_DNS_FAILURE;
}
err_t err = netconn_gethostbyname(host, &lwip_addr);
#elif LWIP_IPV6
if (version != NSAPI_IPv6 && version != NSAPI_UNSPEC) {
return NSAPI_ERROR_DNS_FAILURE;
}
err_t err = netconn_gethostbyname(host, &lwip_addr);
#endif
if (err != ERR_OK) {
return NSAPI_ERROR_DNS_FAILURE;
}

View File

@ -107,7 +107,19 @@ public:
}
nsapi_addr_t addr = {NSAPI_IPv4, 0};
int err = _stack_api()->gethostbyname(_stack(), name, &addr);
int err = _stack_api()->gethostbyname(_stack(), name, &addr, NSAPI_UNSPEC);
address->set_addr(addr);
return err;
}
virtual int gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version)
{
if (!_stack_api()->gethostbyname) {
return NetworkStack::gethostbyname(name, address, version);
}
nsapi_addr_t addr = {NSAPI_IPv4, 0};
int err = _stack_api()->gethostbyname(_stack(), name, &addr, version);
address->set_addr(addr);
return err;
}

View File

@ -87,13 +87,14 @@ typedef enum nsapi_error {
typedef enum nsapi_version {
NSAPI_IPv4, /*!< Address is IPv4 */
NSAPI_IPv6, /*!< Address is IPv6 */
NSAPI_UNSPEC /*!< Address is unspecified */
} nsapi_version_t;
/** IP address structure for passing IP addresses by value
*/
typedef struct nsapi_addr {
/** IP version
* NSAPI_IPv4 or NSAPI_IPv6
* NSAPI_IPv4 or NSAPI_IPv6 (NSAPI_UNSPEC not currently supported)
*/
nsapi_version_t version;
@ -197,9 +198,10 @@ typedef struct nsapi_stack_api
* @param stack Stack handle
* @param addr Destination for the host IP address
* @param host Hostname to resolve
* @param version Address family
* @return 0 on success, negative error code on failure
*/
int (*gethostbyname)(nsapi_stack_t *stack, const char *host, nsapi_addr_t *addr);
int (*gethostbyname)(nsapi_stack_t *stack, const char *host, nsapi_addr_t *addr, nsapi_version_t version);
/** Add a domain name server to list of servers to query
*