Ignore:
Timestamp:
May 25, 2007 6:11:35 AM (17 years ago)
Author:
bennylp
Message:

Fixed ticket #297: Bug in handling data from peer in TURN sample application (thanks scott_lvsha)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjnath/src/pjstun-client/client_main.c

    r1275 r1300  
    4242    pj_stun_session     *sess; 
    4343    pj_sock_t            sock; 
     44    pj_sock_t            peer_sock; 
    4445    pj_thread_t         *thread; 
    4546    pj_bool_t            quit; 
     
    155156        PJ_FD_ZERO(&readset); 
    156157        PJ_FD_SET(g.sock, &readset); 
    157  
    158         n = pj_sock_select(g.sock+1, &readset, NULL, NULL, &timeout); 
     158        PJ_FD_SET(g.peer_sock, &readset); 
     159 
     160        n = (g.peer_sock > g.sock) ? g.peer_sock : g.sock; 
     161        n = pj_sock_select(n+1, &readset, NULL, NULL, &timeout); 
    159162        if (n > 0) { 
    160163            if (PJ_FD_ISSET(g.sock, &readset)) { 
     
    180183                } else { 
    181184                    buffer[len] = '\0'; 
    182                     PJ_LOG(3,(THIS_FILE, "Received data: %s", (char*)buffer)); 
     185                    PJ_LOG(3,(THIS_FILE, "Received data on client sock: %s", (char*)buffer)); 
    183186                } 
     187 
     188            } else if (PJ_FD_ISSET(g.peer_sock, &readset)) { 
     189                pj_uint8_t buffer[512]; 
     190                pj_ssize_t len; 
     191                pj_sockaddr_in addr; 
     192                int addrlen; 
     193                pj_status_t rc; 
     194 
     195                len = sizeof(buffer); 
     196                addrlen = sizeof(addr); 
     197                rc = pj_sock_recvfrom(g.peer_sock, buffer, &len, 0, &addr, &addrlen); 
     198                if (rc != PJ_SUCCESS || len <= 0) 
     199                    continue; 
     200 
     201                buffer[len] = '\0'; 
     202 
     203                if (pj_stun_msg_check(buffer, len, PJ_STUN_IS_DATAGRAM)==PJ_SUCCESS) { 
     204                    pj_stun_msg *msg; 
     205 
     206                    rc = pj_stun_msg_decode(g.pool, (pj_uint8_t*)buffer, len, 0, 
     207                                            &msg, NULL, NULL); 
     208                    if (rc != PJ_SUCCESS) { 
     209                        my_perror("Error decoding packet on peer sock", rc); 
     210                    } else { 
     211                        pj_stun_msg_dump(msg, buffer, sizeof(buffer), NULL); 
     212                        PJ_LOG(3,(THIS_FILE, "Received STUN packet on peer sock: %s", 
     213                                  buffer)); 
     214                    } 
     215 
     216                } else { 
     217                    PJ_LOG(3,(THIS_FILE, "Received data on peer sock: %s", (char*)buffer)); 
     218                } 
     219 
    184220            } 
     221 
    185222        } else if (n < 0) 
    186223            pj_thread_sleep(50); 
     
    234271    pj_assert(status == PJ_SUCCESS); 
    235272 
     273    status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, &g.peer_sock); 
     274    pj_assert(status == PJ_SUCCESS); 
     275 
     276    status = pj_sock_bind_in(g.peer_sock, 0, 0); 
     277    pj_assert(status == PJ_SUCCESS); 
     278 
    236279    status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, &g.sock); 
    237280    pj_assert(status == PJ_SUCCESS); 
     
    250293    PJ_LOG(3,(THIS_FILE, "Listening on port %d", (int)pj_ntohs(addr.sin_port))); 
    251294 
    252     pj_memcpy(&g.peer_addr, &addr, sizeof(pj_sockaddr_in)); 
     295    len = sizeof(g.peer_addr); 
     296    status = pj_sock_getsockname(g.peer_sock, &g.peer_addr, &len); 
    253297    if (g.peer_addr.sin_addr.s_addr == 0) 
    254298        pj_gethostip(&g.peer_addr.sin_addr); 
     299 
     300    PJ_LOG(3,(THIS_FILE, "Peer is on port %d", (int)pj_ntohs(g.peer_addr.sin_port))); 
    255301 
    256302    pj_memset(&stun_cb, 0, sizeof(stun_cb)); 
     
    488534 
    489535    len = strlen(g.data); 
    490     pj_sock_sendto(g.sock, g.data, &len, 0, &g.relay_addr, sizeof(g.relay_addr)); 
     536    pj_sock_sendto(g.peer_sock, g.data, &len, 0, &g.relay_addr, sizeof(g.relay_addr)); 
    491537} 
    492538 
     
    645691 
    646692    g.data = g.data_buf; 
     693    pj_ansi_strcpy(g.data, "Hello world"); 
    647694 
    648695    while((c=pj_getopt_long(argc,argv, "r:u:p:N:hF", long_options, &opt_id))!=-1) { 
Note: See TracChangeset for help on using the changeset viewer.