Ignore:
Timestamp:
Apr 9, 2008 9:38:12 AM (14 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/pjnath/stun_session.c

    r1903 r1913  
    350350 
    351351        /* Retry the request */ 
    352         status = pj_stun_session_send_msg(sess, PJ_TRUE, src_addr,  
     352        status = pj_stun_session_send_msg(sess, request->token, PJ_TRUE,  
     353                                          request->retransmit, src_addr,  
    353354                                          src_addr_len, tdata); 
    354355 
     
    378379 
    379380    if (notify_user && sess->cb.on_request_complete) { 
    380         (*sess->cb.on_request_complete)(sess, status, tdata,  
    381                                         response,  
    382                                         src_addr, src_addr_len); 
     381        (*sess->cb.on_request_complete)(sess, status, tdata->token, tdata,  
     382                                        response, src_addr, src_addr_len); 
    383383    } 
    384384 
     
    398398    tdata = (pj_stun_tx_data*) pj_stun_client_tsx_get_data(tsx); 
    399399 
    400     return tdata->sess->cb.on_send_msg(tdata->sess, stun_pkt, pkt_size, 
    401                                        tdata->dst_addr, tdata->addr_len); 
     400    return tdata->sess->cb.on_send_msg(tdata->sess, tdata->token, stun_pkt,  
     401                                       pkt_size, tdata->dst_addr,  
     402                                       tdata->addr_len); 
    402403} 
    403404 
     
    731732 
    732733PJ_DEF(pj_status_t) pj_stun_session_send_msg( pj_stun_session *sess, 
     734                                              void *token, 
    733735                                              pj_bool_t cache_res, 
     736                                              pj_bool_t retransmit, 
    734737                                              const pj_sockaddr_t *server, 
    735738                                              unsigned addr_len, 
     
    743746    tdata->max_len = PJ_STUN_MAX_PKT_LEN; 
    744747    tdata->pkt = pj_pool_alloc(tdata->pool, tdata->max_len); 
     748 
     749    tdata->token = token; 
     750    tdata->retransmit = retransmit; 
    745751 
    746752    /* Start locking the session now */ 
     
    788794 
    789795        /* Send the request! */ 
    790         status = pj_stun_client_tsx_send_msg(tdata->client_tsx, PJ_TRUE, 
     796        status = pj_stun_client_tsx_send_msg(tdata->client_tsx, retransmit, 
    791797                                             tdata->pkt, tdata->pkt_size); 
    792798        if (status != PJ_SUCCESS && status != PJ_EPENDING) { 
     
    829835     
    830836        /* Otherwise for non-request message, send directly to transport. */ 
    831         status = sess->cb.on_send_msg(sess, tdata->pkt, tdata->pkt_size, 
    832                                       server, addr_len); 
     837        status = sess->cb.on_send_msg(sess, token, tdata->pkt,  
     838                                      tdata->pkt_size, server, addr_len); 
    833839 
    834840        if (status != PJ_SUCCESS && status != PJ_EPENDING) { 
     
    855861                                             unsigned code,  
    856862                                             const char *errmsg, 
     863                                             void *token, 
    857864                                             pj_bool_t cache,  
    858865                                             const pj_sockaddr_t *dst_addr,  
     
    869876        return status; 
    870877 
    871     return pj_stun_session_send_msg(sess, cache, dst_addr,  addr_len, tdata); 
     878    return pj_stun_session_send_msg(sess, token, cache, PJ_FALSE, 
     879                                    dst_addr,  addr_len, tdata); 
    872880} 
    873881 
     
    888896 
    889897    if (notify) { 
    890         (sess->cb.on_request_complete)(sess, notify_status, tdata, NULL, 
    891                                        NULL, 0); 
     898        (sess->cb.on_request_complete)(sess, notify_status, tdata->token,  
     899                                       tdata, NULL, NULL, 0); 
    892900    } 
    893901 
     
    921929 
    922930/* Send response */ 
    923 static pj_status_t send_response(pj_stun_session *sess,  
     931static pj_status_t send_response(pj_stun_session *sess, void *token, 
    924932                                 pj_pool_t *pool, pj_stun_msg *response, 
    925933                                 const pj_stun_req_cred_info *auth_info, 
     
    954962 
    955963    /* Send packet */ 
    956     status = sess->cb.on_send_msg(sess, out_pkt, out_len, addr, addr_len); 
     964    status = sess->cb.on_send_msg(sess, token, out_pkt, out_len,  
     965                                  addr, addr_len); 
    957966 
    958967    return status; 
     
    961970/* Authenticate incoming message */ 
    962971static pj_status_t authenticate_req(pj_stun_session *sess, 
     972                                    void *token, 
    963973                                    const pj_uint8_t *pkt, 
    964974                                    unsigned pkt_len, 
     
    982992    if (status != PJ_SUCCESS && response != NULL) { 
    983993        PJ_LOG(5,(SNAME(sess), "Message authentication failed")); 
    984         send_response(sess, tmp_pool, response, &rdata->info, PJ_FALSE,  
    985                       src_addr, src_addr_len); 
     994        send_response(sess, token, tmp_pool, response, &rdata->info,  
     995                      PJ_FALSE, src_addr, src_addr_len); 
    986996    } 
    987997 
     
    10711081                 "Request retransmission, sending cached response")); 
    10721082 
    1073         send_response(sess, tmp_pool, t->msg, &t->auth_info, PJ_TRUE,  
    1074                       src_addr, src_addr_len); 
     1083        send_response(sess, t->token, tmp_pool, t->msg, &t->auth_info,  
     1084                      PJ_TRUE, src_addr, src_addr_len); 
    10751085        return PJ_SUCCESS; 
    10761086    } 
     
    10821092static pj_status_t on_incoming_request(pj_stun_session *sess, 
    10831093                                       unsigned options, 
     1094                                       void *token, 
    10841095                                       pj_pool_t *tmp_pool, 
    10851096                                       const pj_uint8_t *in_pkt, 
     
    11031114     */ 
    11041115    if ((options & PJ_STUN_NO_AUTHENTICATE) == 0) { 
    1105         status = authenticate_req(sess, (const pj_uint8_t*) in_pkt, in_pkt_len, 
    1106                                   &rdata, tmp_pool, src_addr, src_addr_len); 
     1116        status = authenticate_req(sess, token, (const pj_uint8_t*) in_pkt,  
     1117                                  in_pkt_len,&rdata, tmp_pool, src_addr,  
     1118                                  src_addr_len); 
    11071119        if (status != PJ_SUCCESS) { 
    11081120            return status; 
     
    11131125    if (sess->cb.on_rx_request) { 
    11141126        status = (*sess->cb.on_rx_request)(sess, in_pkt, in_pkt_len, &rdata, 
    1115                                            src_addr, src_addr_len); 
     1127                                           token, src_addr, src_addr_len); 
    11161128    } else { 
    11171129        pj_str_t err_text; 
     
    11231135                                             &err_text, &response); 
    11241136        if (status == PJ_SUCCESS && response) { 
    1125             status = send_response(sess, tmp_pool, response,  
     1137            status = send_response(sess, token, tmp_pool, response,  
    11261138                                   NULL, PJ_FALSE, src_addr, src_addr_len); 
    11271139        } 
     
    11341146/* Handle incoming indication */ 
    11351147static pj_status_t on_incoming_indication(pj_stun_session *sess, 
     1148                                          void *token, 
    11361149                                          pj_pool_t *tmp_pool, 
    11371150                                          const pj_uint8_t *in_pkt, 
     
    11461159    if (sess->cb.on_rx_indication) { 
    11471160        return (*sess->cb.on_rx_indication)(sess, in_pkt, in_pkt_len, msg, 
    1148                                             src_addr, src_addr_len); 
     1161                                            token, src_addr, src_addr_len); 
    11491162    } else { 
    11501163        return PJ_SUCCESS; 
     
    11571170                                              pj_size_t pkt_size, 
    11581171                                              unsigned options, 
     1172                                              void *token, 
    11591173                                              unsigned *parsed_len, 
    11601174                                              const pj_sockaddr_t *src_addr, 
     
    11811195        LOG_ERR_(sess, "STUN msg_decode() error", status); 
    11821196        if (response) { 
    1183             send_response(sess, tmp_pool, response, NULL, 
     1197            send_response(sess, token, tmp_pool, response, NULL, 
    11841198                          PJ_FALSE, src_addr, src_addr_len); 
    11851199        } 
     
    12181232    } else if (PJ_STUN_IS_REQUEST(msg->hdr.type)) { 
    12191233 
    1220         status = on_incoming_request(sess, options, tmp_pool,  
     1234        status = on_incoming_request(sess, options, token, tmp_pool,  
    12211235                                     (const pj_uint8_t*) packet, pkt_size,  
    12221236                                     msg, src_addr, src_addr_len); 
     
    12241238    } else if (PJ_STUN_IS_INDICATION(msg->hdr.type)) { 
    12251239 
    1226         status = on_incoming_indication(sess, tmp_pool,  
     1240        status = on_incoming_indication(sess, token, tmp_pool,  
    12271241                                        (const pj_uint8_t*) packet, pkt_size, 
    12281242                                        msg, src_addr, src_addr_len); 
Note: See TracChangeset for help on using the changeset viewer.