Added sequential dns resolver function for netconn api (netconn_gethostbyname)
This commit is contained in:
@@ -50,6 +50,7 @@
|
||||
#include "lwip/memp.h"
|
||||
#include "lwip/tcpip.h"
|
||||
#include "lwip/igmp.h"
|
||||
#include "lwip/dns.h"
|
||||
|
||||
/* forward declarations */
|
||||
#if LWIP_TCP
|
||||
@@ -989,5 +990,58 @@ do_join_leave_group(struct api_msg_msg *msg)
|
||||
}
|
||||
#endif /* LWIP_IGMP */
|
||||
|
||||
#if LWIP_DNS
|
||||
/**
|
||||
* Callback function that is called when DNS name is resolved
|
||||
* (or on timeout).
|
||||
*/
|
||||
static void
|
||||
do_dns_found(const char *name, struct ip_addr *ipaddr, void *arg)
|
||||
{
|
||||
struct dns_api_msg *msg = (struct dns_api_msg*)arg;
|
||||
|
||||
LWIP_ASSERT("DNS response for wrong host name", strcmp(msg->name, name) == 0);
|
||||
|
||||
if (ipaddr == NULL) {
|
||||
/* timeout or memory error */
|
||||
*msg->err = ERR_VAL;
|
||||
} else {
|
||||
/* address was resolved */
|
||||
*msg->err = ERR_OK;
|
||||
*msg->addr = *ipaddr;
|
||||
}
|
||||
/* wake up the application task waiting in netconn_gethostbyname */
|
||||
sys_sem_signal(msg->sem);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute a DNS query
|
||||
* Called from netconn_gethostbyname
|
||||
*
|
||||
* @param msg the dns_api_msg pointing to the query
|
||||
*/
|
||||
void
|
||||
do_gethostbyname(void *arg)
|
||||
{
|
||||
DNS_RESULT res;
|
||||
struct dns_api_msg *msg = (struct dns_api_msg*)arg;
|
||||
|
||||
res = dns_gethostbyname(msg->name, msg->addr, do_dns_found, msg);
|
||||
if (res != DNS_QUERY_QUEUED) {
|
||||
/* If not queued, return to app thread directly */
|
||||
if (res == DNS_QUERY_INVALID) {
|
||||
/* some error occurred */
|
||||
*msg->err = ERR_ARG;
|
||||
} else if (res == DNS_COMPLETE) {
|
||||
/* name was already in octet notation or cached */
|
||||
*msg->err = ERR_OK;
|
||||
}
|
||||
/* on error or immediate success, wake up the application
|
||||
* task waiting in netconn_gethostbyname */
|
||||
sys_sem_signal(msg->sem);
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_DNS */
|
||||
|
||||
#endif /* LWIP_NETCONN */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user