netconn: Add LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE (patch #9427)

This adds a new hook allowing an external DNS resolver to be hooked into
netconn_gethostbyname(). The hook can handle some or all of the queries

One use case for this hook is to run mDNSResponder in the same system as LwIP
(mDNSResponder also uses LwIP's socekt APIs) and have it handle .local queries
while LwIP stack handles unicast DNS queries
This commit is contained in:
Joel Cunningham
2017-11-20 09:59:35 -06:00
parent 2aed2fc215
commit 6af3b4accc
3 changed files with 38 additions and 0 deletions

View File

@@ -69,6 +69,10 @@
#include "lwip/priv/tcp_priv.h"
#include "lwip/priv/tcpip_priv.h"
#ifdef LWIP_HOOK_FILENAME
#include LWIP_HOOK_FILENAME
#endif
#include <string.h>
#define API_MSG_VAR_REF(name) API_VAR_REF(name)
@@ -1209,6 +1213,16 @@ netconn_gethostbyname(const char *name, ip_addr_t *addr)
}
#endif
#ifdef LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE
#if LWIP_IPV4 && LWIP_IPV6
if (LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, dns_addrtype, &err)) {
#else
if (LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, NETCONN_DNS_DEFAULT, &err)) {
#endif /* LWIP_IPV4 && LWIP_IPV6 */
return err;
}
#endif /* LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE */
API_VAR_ALLOC(struct dns_api_msg, MEMP_DNS_API_MSG, msg, ERR_MEM);
#if LWIP_MPU_COMPATIBLE
strncpy(API_VAR_REF(msg).name, name, DNS_MAX_NAME_LENGTH - 1);