diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-08-12 04:12:17 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-08-12 04:12:17 +0000 |
commit | 013e1a2bfce4c8f2d02694e59cd08b0a52ae7b80 (patch) | |
tree | 9ef7ab71c23a3d7e3802cd11fdf30f695fbe97e9 /pjsip | |
parent | 8bf418168488933a4095cb2833ba66c4081951da (diff) |
Ticket #362: Transaction timer I in Completed state should be zero for reliable transports (thanks Ivan F. Skripov)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1415 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/src/pjsip/sip_transaction.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c index 0eb102c5..790d653d 100644 --- a/pjsip/src/pjsip/sip_transaction.c +++ b/pjsip/src/pjsip/sip_transaction.c @@ -2640,6 +2640,8 @@ static pj_status_t tsx_on_state_completed_uas( pjsip_transaction *tsx, } } else { + pj_time_val timeout; + /* Process incoming ACK request. */ /* Cease retransmission. */ @@ -2649,11 +2651,22 @@ static pj_status_t tsx_on_state_completed_uas( pjsip_transaction *tsx, } tsx->transport_flag &= ~(TSX_HAS_PENDING_RESCHED); - /* Start timer I in T4 interval (transaction termination). */ + /* Reschedule timeout timer. */ pjsip_endpt_cancel_timer( tsx->endpt, &tsx->timeout_timer ); tsx->timeout_timer.id = TIMER_ACTIVE; + + /* Timer I is T4 timer for unreliable transports, and + * zero seconds for reliable transports. + */ + if (PJSIP_TRANSPORT_IS_RELIABLE(tsx->transport)==0) { + timeout.sec = 0; + timeout.msec = 0; + } else { + timeout.sec = t4_timer_val.sec; + timeout.msec = t4_timer_val.msec; + } pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer, - &t4_timer_val); + &timeout); /* Move state to "Confirmed" */ tsx_set_state( tsx, PJSIP_TSX_STATE_CONFIRMED, |