summaryrefslogtreecommitdiff
path: root/pjnath/src/pjnath/stun_sock.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjnath/src/pjnath/stun_sock.c')
-rw-r--r--pjnath/src/pjnath/stun_sock.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/pjnath/src/pjnath/stun_sock.c b/pjnath/src/pjnath/stun_sock.c
index 2525307b..8a4297b3 100644
--- a/pjnath/src/pjnath/stun_sock.c
+++ b/pjnath/src/pjnath/stun_sock.c
@@ -416,10 +416,11 @@ PJ_DEF(pj_status_t) pj_stun_sock_start( pj_stun_sock *stun_sock,
pj_assert(stun_sock->q == NULL);
- opt = PJ_DNS_SRV_FALLBACK_A;
- if (stun_sock->af == pj_AF_INET6()) {
- opt |= (PJ_DNS_SRV_RESOLVE_AAAA | PJ_DNS_SRV_FALLBACK_AAAA);
- }
+ /* Init DNS resolution option */
+ if (stun_sock->af == pj_AF_INET6())
+ opt = (PJ_DNS_SRV_RESOLVE_AAAA_ONLY | PJ_DNS_SRV_FALLBACK_AAAA);
+ else
+ opt = PJ_DNS_SRV_FALLBACK_A;
status = pj_dns_srv_resolve(domain, &res_name, default_port,
stun_sock->pool, resolver, opt,
@@ -574,14 +575,18 @@ static void dns_srv_resolver_cb(void *user_data,
pj_assert(rec->count);
pj_assert(rec->entry[0].server.addr_count);
-
- PJ_TODO(SUPPORT_IPV6_IN_RESOLVER);
- pj_assert(stun_sock->af == pj_AF_INET());
+ pj_assert(rec->entry[0].server.addr[0].af == stun_sock->af);
/* Set the address */
- pj_sockaddr_in_init(&stun_sock->srv_addr.ipv4, NULL,
- rec->entry[0].port);
- stun_sock->srv_addr.ipv4.sin_addr = rec->entry[0].server.addr[0];
+ pj_sockaddr_init(stun_sock->af, &stun_sock->srv_addr, NULL,
+ rec->entry[0].port);
+ if (stun_sock->af == pj_AF_INET6()) {
+ stun_sock->srv_addr.ipv6.sin6_addr =
+ rec->entry[0].server.addr[0].ip.v6;
+ } else {
+ stun_sock->srv_addr.ipv4.sin_addr =
+ rec->entry[0].server.addr[0].ip.v4;
+ }
/* Start sending Binding request */
get_mapped_addr(stun_sock);