Ignore:
Timestamp:
Apr 9, 2008 9:38:12 AM (13 years ago)
Author:
bennylp
Message:

More ticket #485: huge changeset to support TURN TCP. Please see ticket #485 for the details

File:
1 edited

Legend:

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

    r1904 r1913  
    4949    pj_bool_t            quit; 
    5050 
    51     pj_turn_udp         *udp_rel; 
     51    pj_turn_sock        *relay; 
    5252    pj_sockaddr          relay_addr; 
    5353 
     
    5757static struct options 
    5858{ 
    59     char    *srv_addr; 
    60     char    *srv_port; 
    61     char    *realm; 
    62     char    *user_name; 
    63     char    *password; 
    64     pj_bool_t use_fingerprint; 
     59    pj_bool_t    use_tcp; 
     60    char        *srv_addr; 
     61    char        *srv_port; 
     62    char        *realm; 
     63    char        *user_name; 
     64    char        *password; 
     65    pj_bool_t    use_fingerprint; 
    6566} o; 
    6667 
    6768 
    6869static int worker_thread(void *unused); 
    69 static void turn_on_rx_data(pj_turn_udp *udp_rel, 
     70static void turn_on_rx_data(pj_turn_sock *relay, 
    7071                            const pj_uint8_t *pkt, 
    7172                            unsigned pkt_len, 
    7273                            const pj_sockaddr_t *peer_addr, 
    7374                            unsigned addr_len); 
    74 static void turn_on_state(pj_turn_udp *udp_rel, pj_turn_state_t old_state, 
     75static void turn_on_state(pj_turn_sock *relay, pj_turn_state_t old_state, 
    7576                          pj_turn_state_t new_state); 
    7677 
     
    156157        g.thread = NULL; 
    157158    } 
    158     if (g.udp_rel) { 
    159         pj_turn_udp_destroy(g.udp_rel); 
    160         g.udp_rel = NULL; 
     159    if (g.relay) { 
     160        pj_turn_sock_destroy(g.relay); 
     161        g.relay = NULL; 
    161162    } 
    162163    for (i=0; i<PJ_ARRAY_SIZE(g.peer); ++i) { 
     
    243244static pj_status_t create_relay(void) 
    244245{ 
    245     pj_turn_udp_cb rel_cb; 
     246    pj_turn_sock_cb rel_cb; 
    246247    pj_stun_auth_cred cred; 
    247248    pj_str_t srv; 
    248249    pj_status_t status; 
    249250 
    250     if (g.udp_rel) { 
     251    if (g.relay) { 
    251252        PJ_LOG(1,(THIS_FILE, "Relay already created")); 
    252253        return -1; 
     
    256257    rel_cb.on_rx_data = &turn_on_rx_data; 
    257258    rel_cb.on_state = &turn_on_state; 
    258     CHECK( pj_turn_udp_create(&g.stun_config, pj_AF_INET(), &rel_cb, 0, 
    259                               NULL, &g.udp_rel) ); 
     259    CHECK( pj_turn_sock_create(&g.stun_config, pj_AF_INET(),  
     260                               (o.use_tcp? PJ_TURN_TP_TCP : PJ_TURN_TP_UDP), 
     261                               &rel_cb, 0, 
     262                               NULL, &g.relay) ); 
    260263 
    261264    if (o.user_name) { 
     
    272275 
    273276    srv = pj_str(o.srv_addr); 
    274     CHECK( pj_turn_udp_init(g.udp_rel,                           /* the relay */ 
     277    CHECK( pj_turn_sock_init(g.relay,                            /* the relay */ 
    275278                            &srv,                                /* srv addr */ 
    276279                            (o.srv_port?atoi(o.srv_port):PJ_STUN_PORT),/* def port */ 
     
    285288static void destroy_relay(void) 
    286289{ 
    287     if (g.udp_rel) { 
    288         pj_turn_udp_destroy(g.udp_rel); 
    289     } 
    290 } 
    291  
    292  
    293 static void turn_on_rx_data(pj_turn_udp *udp_rel, 
     290    if (g.relay) { 
     291        pj_turn_sock_destroy(g.relay); 
     292    } 
     293} 
     294 
     295 
     296static void turn_on_rx_data(pj_turn_sock *relay, 
    294297                            const pj_uint8_t *pkt, 
    295298                            unsigned pkt_len, 
     
    306309 
    307310 
    308 static void turn_on_state(pj_turn_udp *udp_rel, pj_turn_state_t old_state, 
     311static void turn_on_state(pj_turn_sock *relay, pj_turn_state_t old_state, 
    309312                          pj_turn_state_t new_state) 
    310313{ 
     
    314317    if (new_state == PJ_TURN_STATE_READY) { 
    315318        pj_turn_session_info info; 
    316         pj_turn_udp_get_info(udp_rel, &info); 
     319        pj_turn_sock_get_info(relay, &info); 
    317320        pj_memcpy(&g.relay_addr, &info.relay_addr, sizeof(pj_sockaddr)); 
    318     } else if (new_state > PJ_TURN_STATE_READY && g.udp_rel) { 
     321    } else if (new_state > PJ_TURN_STATE_READY && g.relay) { 
    319322        PJ_LOG(3,(THIS_FILE, "Relay shutting down..")); 
    320         g.udp_rel = NULL; 
     323        g.relay = NULL; 
    321324    } 
    322325} 
     
    327330    char client_state[20], relay_addr[80], peer0_addr[80], peer1_addr[80]; 
    328331 
    329     if (g.udp_rel) { 
    330         pj_turn_udp_get_info(g.udp_rel, &info); 
     332    if (g.relay) { 
     333        pj_turn_sock_get_info(g.relay, &info); 
    331334        strcpy(client_state, pj_turn_state_name(info.state)); 
    332335        if (info.state >= PJ_TURN_STATE_READY) 
     
    358361          peer1_addr); 
    359362    puts("+-----------------------------------+                                |"); 
    360     puts("| q  Quit        d  Dump            | 1  Send data to relay adderss  |"); 
     363    puts("| q  Quit                  d  Dump  | 1  Send data to relay adderss  |"); 
    361364    puts("+-----------------------------------+--------------------------------+"); 
    362365    printf(">>> "); 
     
    385388            break; 
    386389        case 's': 
    387             if (g.udp_rel == NULL) { 
     390            if (g.relay == NULL) { 
    388391                puts("Error: no relay"); 
    389392                continue; 
     
    395398 
    396399            strcpy(input, "Hello from client"); 
    397             status = pj_turn_udp_sendto(g.udp_rel, (const pj_uint8_t*)input,  
     400            status = pj_turn_sock_sendto(g.relay, (const pj_uint8_t*)input,  
    398401                                        strlen(input)+1,  
    399402                                        &peer->addr,  
     
    403406            break; 
    404407        case 'b': 
    405             if (g.udp_rel == NULL) { 
     408            if (g.relay == NULL) { 
    406409                puts("Error: no relay"); 
    407410                continue; 
     
    412415                peer = &g.peer[1]; 
    413416 
    414             status = pj_turn_udp_bind_channel(g.udp_rel, &peer->addr, 
     417            status = pj_turn_sock_bind_channel(g.relay, &peer->addr, 
    415418                                              pj_sockaddr_get_len(&peer->addr)); 
    416419            if (status != PJ_SUCCESS) 
    417420                my_perror("turn_udp_bind_channel() failed", status); 
    418421            break; 
     422        case 'd': 
     423            pj_pool_factory_dump(&g.cp.factory, PJ_TRUE); 
     424            break; 
    419425        case 'x': 
    420             if (g.udp_rel == NULL) { 
     426            if (g.relay == NULL) { 
    421427                puts("Error: no relay"); 
    422428                continue; 
     
    426432        case '0': 
    427433        case '1': 
    428             if (g.udp_rel == NULL) { 
     434            if (g.relay == NULL) { 
    429435                puts("No relay"); 
    430436                break; 
     
    451457    puts(""); 
    452458    puts("and OPTIONS:"); 
    453     puts(" --realm, -r       Set realm of the credential"); 
    454     puts(" --username, -u    Set username of the credential"); 
    455     puts(" --password, -p    Set password of the credential"); 
    456     puts(" --fingerprint, -F Use fingerprint for outgoing requests"); 
     459    puts(" --tcp, -T             Use TCP to connect to TURN server"); 
     460    puts(" --realm, -r REALM     Set realm of the credential to REALM"); 
     461    puts(" --username, -u UID    Set username of the credential to UID"); 
     462    puts(" --password, -p PASSWD Set password of the credential to PASSWD"); 
     463    puts(" --fingerprint, -F     Use fingerprint for outgoing requests"); 
    457464    puts(" --help, -h"); 
    458465} 
     
    465472        { "password",   1, 0, 'p'}, 
    466473        { "fingerprint",0, 0, 'F'}, 
    467         { "data",       1, 0, 'D'}, 
     474        { "tcp",        0, 0, 'T'}, 
    468475        { "help",       0, 0, 'h'} 
    469476    }; 
     
    472479    pj_status_t status; 
    473480 
    474     while((c=pj_getopt_long(argc,argv, "r:u:p:N:hF", long_options, &opt_id))!=-1) { 
     481    while((c=pj_getopt_long(argc,argv, "r:u:p:N:hFT", long_options, &opt_id))!=-1) { 
    475482        switch (c) { 
    476483        case 'r': 
     
    488495        case 'F': 
    489496            o.use_fingerprint = PJ_TRUE; 
     497            break; 
     498        case 'T': 
     499            o.use_tcp = PJ_TRUE; 
    490500            break; 
    491501 
Note: See TracChangeset for help on using the changeset viewer.