diff options
Diffstat (limited to 'pjnath/src/pjnath/stun_sock.c')
-rw-r--r-- | pjnath/src/pjnath/stun_sock.c | 25 |
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); |