diff options
Diffstat (limited to 'main/dns.c')
-rw-r--r-- | main/dns.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/main/dns.c b/main/dns.c index d5682758e..fb0e2acb7 100644 --- a/main/dns.c +++ b/main/dns.c @@ -296,3 +296,47 @@ int ast_search_dns(void *context, return ret; } + +struct ao2_container *ast_dns_get_nameservers(void) +{ +#ifdef HAVE_RES_NINIT + struct __res_state dnsstate; +#endif + struct __res_state *state; + struct ao2_container *nameservers; + int i; + + nameservers = ast_str_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 3); + if (!nameservers) { + return NULL; + } + +#ifdef HAVE_RES_NINIT + memset(&dnsstate, 0, sizeof(dnsstate)); + res_ninit(&dnsstate); + state = &dnsstate; +#else + ast_mutex_lock(&res_lock); + res_init(); + state = &_res; +#endif + + for (i = 0; i < state->nscount; i++) { + ast_str_container_add(nameservers, ast_inet_ntoa(state->nsaddr_list[i].sin_addr)); + } + +#ifdef HAVE_RES_NINIT +#ifdef HAVE_RES_NDESTROY + res_ndestroy(&dnsstate); +#else + res_nclose(&dnsstate); +#endif +#else +#ifdef HAVE_RES_CLOSE + res_close(); +#endif + ast_mutex_unlock(&res_lock); +#endif + + return nameservers; +}
\ No newline at end of file |