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,23 +525,38 @@ static int lwip_err_remap(err_t err) {
} }
/* LWIP network stack implementation */ /* 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; ip_addr_t lwip_addr;
#if LWIP_IPV4 && LWIP_IPV6 #if LWIP_IPV4 && LWIP_IPV6
u8_t addr_type; u8_t addr_type;
const ip_addr_t *ip_addr; if (version == NSAPI_UNSPEC) {
ip_addr = lwip_get_ip_addr(true, &lwip_netif); const ip_addr_t *ip_addr;
if (IP_IS_V6(ip_addr)) { ip_addr = lwip_get_ip_addr(true, &lwip_netif);
addr_type = NETCONN_DNS_IPV6; if (IP_IS_V6(ip_addr)) {
} else { addr_type = NETCONN_DNS_IPV6;
} else {
addr_type = NETCONN_DNS_IPV4;
}
} else if (version == NSAPI_IPv4) {
addr_type = NETCONN_DNS_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); 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); err_t err = netconn_gethostbyname(host, &lwip_addr);
#endif #endif
if (err != ERR_OK) { if (err != ERR_OK) {
return NSAPI_ERROR_DNS_FAILURE; return NSAPI_ERROR_DNS_FAILURE;
} }

View File

@ -107,7 +107,19 @@ public:
} }
nsapi_addr_t addr = {NSAPI_IPv4, 0}; 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); address->set_addr(addr);
return err; return err;
} }

View File

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