summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-08-12 04:12:17 +0000
committerBenny Prijono <bennylp@teluu.com>2007-08-12 04:12:17 +0000
commit013e1a2bfce4c8f2d02694e59cd08b0a52ae7b80 (patch)
tree9ef7ab71c23a3d7e3802cd11fdf30f695fbe97e9 /pjsip
parent8bf418168488933a4095cb2833ba66c4081951da (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.c17
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,