Ignore:
Timestamp:
Dec 28, 2016 3:40:07 AM (8 years ago)
Author:
nanang
Message:

Re #1900: More merged from trunk (r5512 mistakenly contains merged changes in third-party dir only).

Location:
pjproject/branches/projects/uwp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/uwp

  • pjproject/branches/projects/uwp/pjnath/src/pjnath/nat_detect.c

    r4573 r5513  
    8585    pj_stun_nat_detect_cb   *cb; 
    8686    pj_sock_t                sock; 
    87     pj_sockaddr_in           local_addr; 
     87    pj_sockaddr              local_addr; 
    8888    pj_ioqueue_key_t        *key; 
    89     pj_sockaddr_in           server; 
    90     pj_sockaddr_in          *cur_server; 
     89    pj_sockaddr              server; 
     90    pj_sockaddr             *cur_server; 
    9191    pj_stun_session         *stun_sess; 
    9292 
     
    9494    pj_uint8_t               rx_pkt[PJ_STUN_MAX_PKT_LEN]; 
    9595    pj_ssize_t               rx_pkt_len; 
    96     pj_sockaddr_in           src_addr; 
     96    pj_sockaddr              src_addr; 
    9797    int                      src_addr_len; 
    9898 
     
    102102        pj_bool_t       complete; 
    103103        pj_status_t     status; 
    104         pj_sockaddr_in  ma; 
    105         pj_sockaddr_in  ca; 
     104        pj_sockaddr     ma; 
     105        pj_sockaddr     ca; 
    106106        pj_stun_tx_data *tdata; 
    107107    } result[ST_MAX]; 
     
    129129static pj_status_t send_test(nat_detect_session *sess, 
    130130                             enum test_type test_id, 
    131                              const pj_sockaddr_in *alt_addr, 
     131                             const pj_sockaddr *alt_addr, 
    132132                             pj_uint32_t change_flag); 
    133133static void on_sess_timer(pj_timer_heap_t *th, 
     
    167167} 
    168168 
    169 static pj_status_t get_local_interface(const pj_sockaddr_in *server, 
    170                                        pj_in_addr *local_addr) 
     169static pj_status_t get_local_interface(const pj_sockaddr *server, 
     170                                       pj_sockaddr *local_addr) 
    171171{ 
    172172    pj_sock_t sock; 
    173     pj_sockaddr_in tmp; 
     173    pj_sockaddr tmp, local; 
    174174    int addr_len; 
    175175    pj_status_t status; 
    176176 
    177     status = pj_sock_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, &sock); 
     177    status = pj_sock_socket(server->addr.sa_family, pj_SOCK_DGRAM(), 
     178                            0, &sock); 
    178179    if (status != PJ_SUCCESS) 
    179180        return status; 
    180181 
    181     status = pj_sock_bind_in(sock, 0, 0); 
     182    addr_len = pj_sockaddr_get_len(server); 
     183    pj_bzero(&local, sizeof(pj_sockaddr)); 
     184    status = pj_sock_bind(sock, &local, addr_len); 
    182185    if (status != PJ_SUCCESS) { 
    183186        pj_sock_close(sock); 
     
    185188    } 
    186189 
    187     status = pj_sock_connect(sock, server, sizeof(pj_sockaddr_in)); 
     190    status = pj_sock_connect(sock, server, addr_len); 
    188191    if (status != PJ_SUCCESS) { 
    189192        pj_sock_close(sock); 
     
    191194    } 
    192195 
    193     addr_len = sizeof(pj_sockaddr_in); 
    194196    status = pj_sock_getsockname(sock, &tmp, &addr_len); 
    195197    if (status != PJ_SUCCESS) { 
     
    198200    } 
    199201 
    200     local_addr->s_addr = tmp.sin_addr.s_addr; 
     202    pj_sockaddr_cp(local_addr, &tmp); 
    201203     
    202204    pj_sock_close(sock); 
     
    210212                                            pj_stun_nat_detect_cb *cb) 
    211213{ 
     214    pj_sockaddr srv; 
     215 
     216    if (server) 
     217        pj_sockaddr_cp(&srv, server); 
     218 
     219    return pj_stun_detect_nat_type2(&srv, stun_cfg, user_data, cb); 
     220} 
     221 
     222PJ_DEF(pj_status_t) pj_stun_detect_nat_type2(const pj_sockaddr *server, 
     223                                             pj_stun_config *stun_cfg, 
     224                                             void *user_data, 
     225                                             pj_stun_nat_detect_cb *cb) 
     226{ 
    212227    pj_pool_t *pool; 
    213228    nat_detect_session *sess; 
    214229    pj_stun_session_cb sess_cb; 
    215230    pj_ioqueue_callback ioqueue_cb; 
    216     int addr_len; 
     231    int af, addr_len; 
     232    char addr[PJ_INET6_ADDRSTRLEN]; 
    217233    pj_status_t status; 
    218234 
     
    244260    pj_grp_lock_add_handler(sess->grp_lock, pool, sess, &sess_on_destroy); 
    245261 
    246     pj_memcpy(&sess->server, server, sizeof(pj_sockaddr_in)); 
     262    pj_sockaddr_cp(&sess->server, server); 
    247263 
    248264    /* 
     
    257273     * Initialize socket. 
    258274     */ 
    259     status = pj_sock_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, &sess->sock); 
     275    af = server->addr.sa_family; 
     276    status = pj_sock_socket(af, pj_SOCK_DGRAM(), 0, &sess->sock); 
    260277    if (status != PJ_SUCCESS) 
    261278        goto on_error; 
     
    264281     * Bind to any. 
    265282     */ 
    266     pj_bzero(&sess->local_addr, sizeof(pj_sockaddr_in)); 
    267     sess->local_addr.sin_family = pj_AF_INET(); 
    268     status = pj_sock_bind(sess->sock, &sess->local_addr,  
    269                           sizeof(pj_sockaddr_in)); 
     283    pj_bzero(&sess->local_addr, sizeof(pj_sockaddr)); 
     284    addr_len = pj_sockaddr_get_len(server); 
     285    status = pj_sock_bind(sess->sock, &sess->local_addr, addr_len); 
    270286    if (status != PJ_SUCCESS) 
    271287        goto on_error; 
     
    274290     * Get local/bound address. 
    275291     */ 
    276     addr_len = sizeof(sess->local_addr); 
    277292    status = pj_sock_getsockname(sess->sock, &sess->local_addr, &addr_len); 
    278293    if (status != PJ_SUCCESS) 
     
    282297     * Find out which interface is used to send to the server. 
    283298     */ 
    284     status = get_local_interface(server, &sess->local_addr.sin_addr); 
     299    status = get_local_interface(server, &sess->local_addr); 
    285300    if (status != PJ_SUCCESS) 
    286301        goto on_error; 
    287302 
    288303    PJ_LOG(5,(sess->pool->obj_name, "Local address is %s:%d", 
    289               pj_inet_ntoa(sess->local_addr.sin_addr),  
    290               pj_ntohs(sess->local_addr.sin_port))); 
     304              pj_sockaddr_print(&sess->local_addr, addr, sizeof(addr), 0), 
     305              pj_sockaddr_get_port(&sess->local_addr))); 
    291306 
    292307    PJ_LOG(5,(sess->pool->obj_name, "Server set to %s:%d", 
    293               pj_inet_ntoa(server->sin_addr),  
    294               pj_ntohs(server->sin_port))); 
     308              pj_sockaddr_print(server, addr, sizeof(addr), 0), 
     309              pj_sockaddr_get_port(server))); 
    295310 
    296311    /* 
     
    572587    sess->result[test_id].status = status; 
    573588    if (status == PJ_SUCCESS) { 
    574         pj_memcpy(&sess->result[test_id].ma, &mattr->sockaddr.ipv4, 
    575                   sizeof(pj_sockaddr_in)); 
    576         pj_memcpy(&sess->result[test_id].ca, &ca->sockaddr.ipv4, 
    577                   sizeof(pj_sockaddr_in)); 
     589        pj_sockaddr_cp(&sess->result[test_id].ma, &mattr->sockaddr); 
     590        pj_sockaddr_cp(&sess->result[test_id].ca, &ca->sockaddr); 
    578591    } 
    579592 
     
    587600        sess->result[ST_TEST_1].status == PJ_SUCCESS)  
    588601    { 
    589         cmp = pj_memcmp(&sess->local_addr, &sess->result[ST_TEST_1].ma, 
    590                         sizeof(pj_sockaddr_in)); 
     602        cmp = pj_sockaddr_cmp(&sess->local_addr, &sess->result[ST_TEST_1].ma); 
    591603        if (cmp != 0) 
    592604            send_test(sess, ST_TEST_1B, &sess->result[ST_TEST_1].ca, 0); 
     
    657669         * NAT type. Compare the MAPPED-ADDRESS with the local address. 
    658670         */ 
    659         cmp = pj_memcmp(&sess->local_addr, &sess->result[ST_TEST_1].ma, 
    660                         sizeof(pj_sockaddr_in)); 
     671        cmp = pj_sockaddr_cmp(&sess->local_addr, &sess->result[ST_TEST_1].ma); 
    661672        if (cmp==0) { 
    662673            /* 
     
    708719                     * MAPPED-ADDRESS returned in test 1.. 
    709720                     */ 
    710                     cmp = pj_memcmp(&sess->result[ST_TEST_1].ma, 
    711                                     &sess->result[ST_TEST_1B].ma, 
    712                                     sizeof(pj_sockaddr_in)); 
     721                    cmp = pj_sockaddr_cmp(&sess->result[ST_TEST_1].ma, 
     722                                          &sess->result[ST_TEST_1B].ma); 
    713723                    if (cmp != 0) { 
    714724                        /* 
     
    811821static pj_status_t send_test(nat_detect_session *sess, 
    812822                             enum test_type test_id, 
    813                              const pj_sockaddr_in *alt_addr, 
     823                             const pj_sockaddr *alt_addr, 
    814824                             pj_uint32_t change_flag) 
    815825{ 
    816826    pj_uint32_t magic, tsx_id[3]; 
     827    char addr[PJ_INET6_ADDRSTRLEN]; 
    817828    pj_status_t status; 
    818829 
     
    846857    /* Configure alternate address */ 
    847858    if (alt_addr) 
    848         sess->cur_server = (pj_sockaddr_in*) alt_addr; 
     859        sess->cur_server = (pj_sockaddr*) alt_addr; 
    849860    else 
    850861        sess->cur_server = &sess->server; 
     
    853864              "Performing %s to %s:%d",  
    854865              test_names[test_id], 
    855               pj_inet_ntoa(sess->cur_server->sin_addr), 
    856               pj_ntohs(sess->cur_server->sin_port))); 
     866              pj_sockaddr_print(sess->cur_server, addr, sizeof(addr), 0), 
     867              pj_sockaddr_get_port(sess->cur_server))); 
    857868 
    858869    /* Send the request */ 
    859870    status = pj_stun_session_send_msg(sess->stun_sess, NULL, PJ_TRUE, 
    860871                                      PJ_TRUE, sess->cur_server,  
    861                                       sizeof(pj_sockaddr_in), 
     872                                      pj_sockaddr_get_len(sess->cur_server), 
    862873                                      sess->result[test_id].tdata); 
    863874    if (status != PJ_SUCCESS) 
Note: See TracChangeset for help on using the changeset viewer.