Ignore:
Timestamp:
Apr 3, 2007 6:01:27 PM (17 years ago)
Author:
bennylp
Message:

Fixed misc bugs with ICE: (1) moved STUN session from candidate to component since it causes STUN response to wrong session, and (2) keep-alive transaction timed-out when ICE is active

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjnath/src/pjnath/stun_session.c

    r1126 r1140  
    5050 
    5151 
    52 static void tsx_on_complete(pj_stun_client_tsx *tsx, 
    53                             pj_status_t status,  
    54                             const pj_stun_msg *response); 
    55 static pj_status_t tsx_on_send_msg(pj_stun_client_tsx *tsx, 
    56                                    const void *stun_pkt, 
    57                                    pj_size_t pkt_size); 
     52static void stun_tsx_on_complete(pj_stun_client_tsx *tsx, 
     53                                 pj_status_t status,  
     54                                 const pj_stun_msg *response); 
     55static pj_status_t stun_tsx_on_send_msg(pj_stun_client_tsx *tsx, 
     56                                        const void *stun_pkt, 
     57                                        pj_size_t pkt_size); 
     58static void stun_tsx_on_destroy(pj_stun_client_tsx *tsx); 
    5859 
    5960static pj_stun_tsx_cb tsx_cb =  
    6061{ 
    61     &tsx_on_complete, 
    62     &tsx_on_send_msg 
     62    &stun_tsx_on_complete, 
     63    &stun_tsx_on_send_msg, 
     64    &stun_tsx_on_destroy 
    6365}; 
    6466 
     
    121123static pj_status_t create_request_tdata(pj_stun_session *sess, 
    122124                                        unsigned msg_type, 
     125                                        const pj_uint8_t tsx_id[12], 
    123126                                        pj_stun_tx_data **p_tdata) 
    124127{ 
     
    132135    /* Create STUN message */ 
    133136    status = pj_stun_msg_create(tdata->pool, msg_type,  PJ_STUN_MAGIC,  
    134                                 NULL, &tdata->msg); 
     137                                tsx_id, &tdata->msg); 
    135138    if (status != PJ_SUCCESS) { 
    136139        pj_pool_release(tdata->pool); 
     
    149152} 
    150153 
     154 
     155static void stun_tsx_on_destroy(pj_stun_client_tsx *tsx) 
     156{ 
     157    pj_stun_tx_data *tdata; 
     158 
     159    tdata = (pj_stun_tx_data*) pj_stun_client_tsx_get_data(tsx); 
     160    pj_stun_client_tsx_destroy(tsx); 
     161    pj_pool_release(tdata->pool); 
     162} 
     163 
    151164static void destroy_tdata(pj_stun_tx_data *tdata) 
    152165{ 
    153     if (tdata->client_tsx) { 
    154         tsx_erase(tdata->sess, tdata); 
    155         pj_stun_client_tsx_destroy(tdata->client_tsx); 
    156         tdata->client_tsx = NULL; 
    157     } 
    158166    if (tdata->res_timer.id != PJ_FALSE) { 
    159167        pj_timer_heap_cancel(tdata->sess->cfg->timer_heap,  
     
    162170        pj_list_erase(tdata); 
    163171    } 
    164     pj_pool_release(tdata->pool); 
     172 
     173    if (tdata->client_tsx) { 
     174        pj_time_val delay = {2, 0}; 
     175        tsx_erase(tdata->sess, tdata); 
     176        pj_stun_client_tsx_schedule_destroy(tdata->client_tsx, &delay); 
     177        tdata->client_tsx = NULL; 
     178 
     179    } else { 
     180        pj_pool_release(tdata->pool); 
     181    } 
    165182} 
    166183 
     
    307324 
    308325 
    309 static void tsx_on_complete(pj_stun_client_tsx *tsx, 
    310                             pj_status_t status,  
    311                             const pj_stun_msg *response) 
     326static void stun_tsx_on_complete(pj_stun_client_tsx *tsx, 
     327                                pj_status_t status,  
     328                                const pj_stun_msg *response) 
    312329{ 
    313330    pj_stun_tx_data *tdata; 
     
    321338} 
    322339 
    323 static pj_status_t tsx_on_send_msg(pj_stun_client_tsx *tsx, 
    324                                    const void *stun_pkt, 
    325                                    pj_size_t pkt_size) 
     340static pj_status_t stun_tsx_on_send_msg(pj_stun_client_tsx *tsx, 
     341                                        const void *stun_pkt, 
     342                                        pj_size_t pkt_size) 
    326343{ 
    327344    pj_stun_tx_data *tdata; 
     
    442459PJ_DEF(pj_status_t) pj_stun_session_create_req(pj_stun_session *sess, 
    443460                                               int method, 
     461                                               const pj_uint8_t tsx_id[12], 
    444462                                               pj_stun_tx_data **p_tdata) 
    445463{ 
     
    449467    PJ_ASSERT_RETURN(sess && p_tdata, PJ_EINVAL); 
    450468 
    451     status = create_request_tdata(sess, method, &tdata); 
     469    status = create_request_tdata(sess, method, tsx_id, &tdata); 
    452470    if (status != PJ_SUCCESS) 
    453471        return status; 
     
    766784    tdata = tsx_lookup(sess, msg); 
    767785    if (tdata == NULL) { 
    768         PJ_LOG(5,(SNAME(sess),  
     786        PJ_LOG(4,(SNAME(sess),  
    769787                  "Transaction not found, response silently discarded")); 
    770788        return PJ_SUCCESS; 
Note: See TracChangeset for help on using the changeset viewer.