diff options
Diffstat (limited to 'pjnath/src/pjnath-test/server.c')
-rw-r--r-- | pjnath/src/pjnath-test/server.c | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/pjnath/src/pjnath-test/server.c b/pjnath/src/pjnath-test/server.c index 7491d9da..99bacba1 100644 --- a/pjnath/src/pjnath-test/server.c +++ b/pjnath/src/pjnath-test/server.c @@ -53,10 +53,11 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, pj_sockaddr hostip; char strbuf[100]; pj_status_t status; + pj_bool_t use_ipv6 = flags & SERVER_IPV6; PJ_ASSERT_RETURN(stun_cfg && domain && p_test_srv, PJ_EINVAL); - status = pj_gethostip(pj_AF_INET(), &hostip); + status = pj_gethostip(GET_AF(use_ipv6), &hostip); if (status != PJ_SUCCESS) return status; @@ -74,7 +75,7 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, if (flags & CREATE_DNS_SERVER) { status = pj_dns_server_create(mem, test_srv->stun_cfg->ioqueue, - pj_AF_INET(), DNS_SERVER_PORT, + GET_AF(use_ipv6), DNS_SERVER_PORT, 0, &test_srv->dns_server); if (status != PJ_SUCCESS) { destroy_test_server(test_srv); @@ -85,11 +86,17 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, if (flags & CREATE_A_RECORD_FOR_DOMAIN) { pj_dns_parsed_rr rr; pj_str_t res_name; - pj_in_addr ip_addr; pj_strdup2(pool, &res_name, domain); - ip_addr = hostip.ipv4.sin_addr; - pj_dns_init_a_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, &ip_addr); + + if (use_ipv6) { + pj_dns_init_aaaa_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, + &hostip.ipv6.sin6_addr); + } else { + pj_dns_init_a_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, + &hostip.ipv4.sin_addr); + } + pj_dns_server_add_rec(test_srv->dns_server, 1, &rr); } @@ -102,7 +109,8 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, pj_bzero(&stun_sock_cb, sizeof(stun_sock_cb)); stun_sock_cb.on_data_recvfrom = &stun_on_data_recvfrom; - pj_sockaddr_in_init(&bound_addr.ipv4, NULL, STUN_SERVER_PORT); + pj_sockaddr_init(GET_AF(use_ipv6), &bound_addr, + NULL, STUN_SERVER_PORT); status = pj_activesock_create_udp(pool, &bound_addr, NULL, test_srv->stun_cfg->ioqueue, @@ -123,7 +131,6 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, if (test_srv->dns_server && (flags & CREATE_STUN_SERVER_DNS_SRV)) { pj_str_t res_name, target; pj_dns_parsed_rr rr; - pj_in_addr ip_addr; /* Add DNS entries: * _stun._udp.domain 60 IN SRV 0 0 PORT stun.domain. @@ -140,8 +147,13 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, pj_dns_server_add_rec(test_srv->dns_server, 1, &rr); res_name = target; - ip_addr = hostip.ipv4.sin_addr; - pj_dns_init_a_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, &ip_addr); + if (use_ipv6) { + pj_dns_init_aaaa_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, + &hostip.ipv6.sin6_addr); + } else { + pj_dns_init_a_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, + &hostip.ipv4.sin_addr); + } pj_dns_server_add_rec(test_srv->dns_server, 1, &rr); } @@ -154,7 +166,7 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, pj_bzero(&turn_sock_cb, sizeof(turn_sock_cb)); turn_sock_cb.on_data_recvfrom = &turn_on_data_recvfrom; - pj_sockaddr_in_init(&bound_addr.ipv4, NULL, TURN_SERVER_PORT); + pj_sockaddr_init(GET_AF(use_ipv6), &bound_addr, NULL, TURN_SERVER_PORT); status = pj_activesock_create_udp(pool, &bound_addr, NULL, test_srv->stun_cfg->ioqueue, @@ -175,7 +187,6 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, if (test_srv->dns_server && (flags & CREATE_TURN_SERVER_DNS_SRV)) { pj_str_t res_name, target; pj_dns_parsed_rr rr; - pj_in_addr ip_addr; /* Add DNS entries: * _turn._udp.domain 60 IN SRV 0 0 PORT turn.domain. @@ -192,8 +203,14 @@ pj_status_t create_test_server(pj_stun_config *stun_cfg, pj_dns_server_add_rec(test_srv->dns_server, 1, &rr); res_name = target; - ip_addr = hostip.ipv4.sin_addr; - pj_dns_init_a_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, &ip_addr); + + if (use_ipv6) { + pj_dns_init_aaaa_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, + &hostip.ipv6.sin6_addr); + } else { + pj_dns_init_a_rr(&rr, &res_name, PJ_DNS_CLASS_IN, 60, + &hostip.ipv4.sin_addr); + } pj_dns_server_add_rec(test_srv->dns_server, 1, &rr); } } @@ -344,6 +361,7 @@ static pj_bool_t turn_on_data_recvfrom(pj_activesock_t *asock, char client_info[PJ_INET6_ADDRSTRLEN+10]; unsigned i; pj_ssize_t len; + pj_bool_t use_ipv6 = PJ_FALSE; if (status != PJ_SUCCESS) return PJ_TRUE; @@ -351,6 +369,7 @@ static pj_bool_t turn_on_data_recvfrom(pj_activesock_t *asock, pj_sockaddr_print(src_addr, client_info, sizeof(client_info), 3); test_srv = (test_server*) pj_activesock_get_user_data(asock); + use_ipv6 = test_srv->flags & SERVER_IPV6; pool = pj_pool_create(test_srv->stun_cfg->pf, NULL, 512, 512, NULL); /* Find the client */ @@ -480,9 +499,9 @@ static pj_bool_t turn_on_data_recvfrom(pj_activesock_t *asock, alloc->pool = pj_pool_create(test_srv->stun_cfg->pf, "alloc", 512, 512, NULL); - /* Create relay socket */ - pj_sockaddr_in_init(&alloc->alloc_addr.ipv4, NULL, 0); - pj_gethostip(pj_AF_INET(), &alloc->alloc_addr); + /* Create relay socket */ + pj_sockaddr_init(GET_AF(use_ipv6), &alloc->alloc_addr, NULL, 0); + pj_gethostip(GET_AF(use_ipv6), &alloc->alloc_addr); status = pj_activesock_create_udp(alloc->pool, &alloc->alloc_addr, NULL, test_srv->stun_cfg->ioqueue, @@ -697,6 +716,8 @@ static pj_bool_t alloc_on_data_recvfrom(pj_activesock_t *asock, pj_ssize_t sent; unsigned i; + PJ_UNUSED_ARG(addr_len); + if (status != PJ_SUCCESS) return PJ_TRUE; @@ -707,10 +728,7 @@ static pj_bool_t alloc_on_data_recvfrom(pj_activesock_t *asock, /* Check that this peer has a permission */ for (i=0; i<alloc->perm_cnt; ++i) { - if (pj_sockaddr_get_len(&alloc->perm[i]) == (unsigned)addr_len && - pj_memcmp(pj_sockaddr_get_addr(&alloc->perm[i]), - pj_sockaddr_get_addr(src_addr), - addr_len) == 0) + if (pj_sockaddr_cmp(&alloc->perm[i], src_addr) == 0) { break; } |