From 6b2ea480193a27f18687690c51c985dba506967d Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Fri, 20 Apr 2007 03:07:16 +0000 Subject: Fix for ticket #221: retransmit timer wasn't cleared when 2xx response for NIT is received, causing assertion failure git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1209 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsip/sip_transaction.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c index 61b3bfa5..9934e0dd 100644 --- a/pjsip/src/pjsip/sip_transaction.c +++ b/pjsip/src/pjsip/sip_transaction.c @@ -1794,14 +1794,13 @@ static void tsx_resched_retransmission( pjsip_transaction *tsx ) pj_assert((tsx->transport_flag & TSX_HAS_PENDING_TRANSPORT) == 0); - pj_assert(tsx->status_code < 200); - - if (tsx->status_code >= 100) + if (tsx->role==PJSIP_ROLE_UAC && tsx->status_code >= 100) msec_time = PJSIP_T2_TIMEOUT; else msec_time = (1 << (tsx->retransmit_count)) * PJSIP_T1_TIMEOUT; if (tsx->role == PJSIP_ROLE_UAC) { + pj_assert(tsx->status_code < 200); /* Retransmission for non-INVITE transaction caps-off at T2 */ if (msec_time>PJSIP_T2_TIMEOUT && tsx->method.id!=PJSIP_INVITE_METHOD) msec_time = PJSIP_T2_TIMEOUT; @@ -2421,6 +2420,12 @@ static pj_status_t tsx_on_state_proceeding_uac(pjsip_transaction *tsx, pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer, &timeout); + /* Cancel retransmission timer */ + if (tsx->retransmit_timer._timer_id != -1) { + pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer); + tsx->retransmit_timer._timer_id = -1; + } + /* Move state to Completed, inform TU. */ tsx_set_state( tsx, PJSIP_TSX_STATE_COMPLETED, PJSIP_EVENT_RX_MSG, event->body.rx_msg.rdata ); -- cgit v1.2.3