summaryrefslogtreecommitdiff
path: root/main/dns.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/dns.c')
-rw-r--r--main/dns.c44
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