mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
res_pjsip: Enable PJSIP DNS client support.
This change enables DNS client support within PJSIP. System nameservers are automatically discovered using res_init or res_ninit. If this fails then PJSIP will resort to using gethostbyname for resolution. By enabling this support we gain SRV support, failover, and weight support. (closes issue ASTERISK-23435) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3343/ ........ Merged revisions 410795 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
44
main/dns.c
44
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;
|
||||
}
|
Reference in New Issue
Block a user