Changeset 4352


Ignore:
Timestamp:
Feb 19, 2013 2:37:28 PM (6 years ago)
Author:
ming
Message:

Fixed #1620: Fix the calculation of transmission count during retransmission of STUN request

Location:
pjproject/trunk/pjnath
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjnath/include/pjnath/stun_session.h

    r3553 r4352  
    683683 * @param sess      The STUN session instance. 
    684684 * @param tdata     The request message previously sent. 
     685 * @param mod_count Boolean flag to indicate whether transmission count 
     686 *                  needs to be incremented. 
    685687 * 
    686688 * @return          PJ_SUCCESS on success, or the appropriate error. 
     
    690692 */ 
    691693PJ_DECL(pj_status_t) pj_stun_session_retransmit_req(pj_stun_session *sess, 
    692                                                     pj_stun_tx_data *tdata); 
     694                                                    pj_stun_tx_data *tdata, 
     695                                                    pj_bool_t mod_count); 
    693696 
    694697 
  • pjproject/trunk/pjnath/include/pjnath/stun_transaction.h

    r3553 r4352  
    235235 * 
    236236 * @param tsx           The STUN client transaction instance. 
     237 * @param mod_count     Boolean flag to indicate whether transmission count 
     238 *                      needs to be incremented. 
    237239 * 
    238240 * @return              PJ_SUCCESS on success, or PJNATH_ESTUNDESTROYED  
     
    241243 *                      as returned by \a on_send_msg() callback. 
    242244 */ 
    243 PJ_DECL(pj_status_t) pj_stun_client_tsx_retransmit(pj_stun_client_tsx *tsx); 
     245PJ_DECL(pj_status_t) pj_stun_client_tsx_retransmit(pj_stun_client_tsx *tsx, 
     246                                                   pj_bool_t mod_count); 
    244247 
    245248 
  • pjproject/trunk/pjnath/src/pjnath/ice_session.c

    r4196 r4352  
    27432743                  "because it's in progress. Retransmitting", i)); 
    27442744            pj_log_push_indent(); 
    2745             pj_stun_session_retransmit_req(comp->stun_sess, c->tdata); 
     2745            pj_stun_session_retransmit_req(comp->stun_sess, c->tdata, PJ_FALSE); 
    27462746            pj_log_pop_indent(); 
    27472747 
  • pjproject/trunk/pjnath/src/pjnath/stun_session.c

    r4199 r4352  
    10551055 */ 
    10561056PJ_DEF(pj_status_t) pj_stun_session_retransmit_req(pj_stun_session *sess, 
    1057                                                    pj_stun_tx_data *tdata) 
     1057                                                   pj_stun_tx_data *tdata, 
     1058                                                   pj_bool_t mod_count) 
    10581059{ 
    10591060    pj_status_t status; 
     
    10661067    pj_lock_acquire(sess->lock); 
    10671068 
    1068     status = pj_stun_client_tsx_retransmit(tdata->client_tsx); 
     1069    status = pj_stun_client_tsx_retransmit(tdata->client_tsx, mod_count); 
    10691070 
    10701071    pj_lock_release(sess->lock); 
  • pjproject/trunk/pjnath/src/pjnath/stun_transaction.c

    r3753 r4352  
    181181 * Transmit message. 
    182182 */ 
    183 static pj_status_t tsx_transmit_msg(pj_stun_client_tsx *tsx) 
     183static pj_status_t tsx_transmit_msg(pj_stun_client_tsx *tsx, 
     184                                    pj_bool_t mod_count) 
    184185{ 
    185186    pj_status_t status; 
     
    188189                     !tsx->require_retransmit, PJ_EBUSY); 
    189190 
    190     if (tsx->require_retransmit) { 
     191    if (tsx->require_retransmit && mod_count) { 
    191192        /* Calculate retransmit/timeout delay */ 
    192193        if (tsx->transmit_count == 0) { 
     
    222223 
    223224 
    224     tsx->transmit_count++; 
     225    if (mod_count) 
     226        tsx->transmit_count++; 
    225227 
    226228    PJ_LOG(5,(tsx->obj_name, "STUN sending message (transmit count=%d)", 
     
    234236        /* We've been destroyed, don't access the object. */ 
    235237    } else if (status != PJ_SUCCESS) { 
    236         if (tsx->retransmit_timer.id != 0) { 
     238        if (tsx->retransmit_timer.id != 0 && mod_count) { 
    237239            pj_timer_heap_cancel(tsx->timer_heap,  
    238240                                 &tsx->retransmit_timer); 
     
    296298 
    297299    /* Send the message */ 
    298     status = tsx_transmit_msg(tsx); 
     300    status = tsx_transmit_msg(tsx, PJ_TRUE); 
    299301    if (status != PJ_SUCCESS) { 
    300302        if (tsx->retransmit_timer.id != 0) { 
     
    336338 
    337339    tsx->retransmit_timer.id = 0; 
    338     status = tsx_transmit_msg(tsx); 
     340    status = tsx_transmit_msg(tsx, PJ_TRUE); 
    339341    if (status == PJNATH_ESTUNDESTROYED) { 
    340342        /* We've been destroyed, don't try to access the object */ 
     
    354356 * Request to retransmit the request. 
    355357 */ 
    356 PJ_DEF(pj_status_t) pj_stun_client_tsx_retransmit(pj_stun_client_tsx *tsx) 
     358PJ_DEF(pj_status_t) pj_stun_client_tsx_retransmit(pj_stun_client_tsx *tsx, 
     359                                                  pj_bool_t mod_count) 
    357360{ 
    358361    if (tsx->destroy_timer.id != 0) { 
     
    365368    } 
    366369 
    367     return tsx_transmit_msg(tsx); 
     370    return tsx_transmit_msg(tsx, mod_count); 
    368371} 
    369372 
Note: See TracChangeset for help on using the changeset viewer.