mirror of https://github.com/ARMmbed/mbed-os.git
Added version to nsapi get host by name
parent
1f98cc3d54
commit
e5c291d347
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue