summaryrefslogtreecommitdiff
path: root/pjsip/src
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-05-03 13:31:21 +0000
committerBenny Prijono <bennylp@teluu.com>2007-05-03 13:31:21 +0000
commit8f426164cc8b5ca4ea96766bf78fd2d1f28cd656 (patch)
tree8588997230cc891c042cd63ba187bb10585e20da /pjsip/src
parent3d5dfee8ad79256ed558c7c46ebde8849321c3ae (diff)
Implemented ticket #246, #247, #261, #268, #250 for Symbian
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1246 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src')
-rw-r--r--pjsip/src/pjsip/sip_transaction.c75
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c4
2 files changed, 45 insertions, 34 deletions
diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c
index 009f16a0..9f8188b3 100644
--- a/pjsip/src/pjsip/sip_transaction.c
+++ b/pjsip/src/pjsip/sip_transaction.c
@@ -141,12 +141,8 @@ static const pj_time_val td_timer_val = { PJSIP_TD_TIMEOUT/1000,
static const pj_time_val timeout_timer_val = { (64*PJSIP_T1_TIMEOUT)/1000,
(64*PJSIP_T1_TIMEOUT)%1000 };
-/* Internal timer IDs */
-enum Transaction_Timer_Id
-{
- TSX_TIMER_RETRANSMISSION,
- TSX_TIMER_TIMEOUT,
-};
+#define TIMER_INACTIVE 0
+#define TIMER_ACTIVE 1
/* Prototypes. */
@@ -910,12 +906,10 @@ static pj_status_t tsx_create( pjsip_module *tsx_user,
"tsx%p", tsx);
tsx->handle_200resp = 1;
- tsx->retransmit_timer.id = TSX_TIMER_RETRANSMISSION;
- tsx->retransmit_timer._timer_id = -1;
+ tsx->retransmit_timer.id = 0;
tsx->retransmit_timer.user_data = tsx;
tsx->retransmit_timer.cb = &tsx_timer_callback;
- tsx->timeout_timer.id = TSX_TIMER_TIMEOUT;
- tsx->timeout_timer._timer_id = -1;
+ tsx->timeout_timer.id = 0;
tsx->timeout_timer.user_data = tsx;
tsx->timeout_timer.cb = &tsx_timer_callback;
@@ -949,14 +943,14 @@ static pj_status_t tsx_destroy( pjsip_transaction *tsx )
tsx->last_tx = NULL;
}
/* Cancel timeout timer. */
- if (tsx->timeout_timer._timer_id != -1) {
+ if (tsx->timeout_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->timeout_timer);
- tsx->timeout_timer._timer_id = -1;
+ tsx->timeout_timer.id = 0;
}
/* Cancel retransmission timer. */
- if (tsx->retransmit_timer._timer_id != -1) {
+ if (tsx->retransmit_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer);
- tsx->retransmit_timer._timer_id = -1;
+ tsx->retransmit_timer.id = 0;
}
/* Clear some pending flags. */
@@ -1001,15 +995,13 @@ static void tsx_timer_callback( pj_timer_heap_t *theap, pj_timer_entry *entry)
PJ_UNUSED_ARG(theap);
+ entry->id = 0;
+
PJ_LOG(5,(tsx->obj_name, "%s timer event",
- (entry->id==TSX_TIMER_RETRANSMISSION ? "Retransmit":"Timeout")));
+ (entry==&tsx->retransmit_timer ? "Retransmit":"Timeout")));
- if (entry->id == TSX_TIMER_RETRANSMISSION) {
- PJSIP_EVENT_INIT_TIMER(event, &tsx->retransmit_timer);
- } else {
- PJSIP_EVENT_INIT_TIMER(event, &tsx->timeout_timer);
- }
+ PJSIP_EVENT_INIT_TIMER(event, entry);
/* Dispatch event to transaction. */
lock_tsx(tsx, &lck);
@@ -1081,11 +1073,12 @@ static void tsx_set_state( pjsip_transaction *tsx,
tsx->transport_flag |= TSX_HAS_PENDING_DESTROY;
} else {
/* Cancel timeout timer. */
- if (tsx->timeout_timer._timer_id != -1) {
+ if (tsx->timeout_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->timeout_timer);
- tsx->timeout_timer._timer_id = -1;
+ tsx->timeout_timer.id = 0;
}
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,
&timeout);
}
@@ -1821,6 +1814,7 @@ static void tsx_resched_retransmission( pjsip_transaction *tsx )
timeout.sec = msec_time / 1000;
timeout.msec = msec_time % 1000;
+ tsx->retransmit_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->retransmit_timer,
&timeout);
}
@@ -1912,6 +1906,7 @@ static pj_status_t tsx_on_state_null( pjsip_transaction *tsx,
/* Start Timer B (or called timer F for non-INVITE) for transaction
* timeout.
*/
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,
&timeout_timer_val);
@@ -1923,6 +1918,7 @@ static pj_status_t tsx_on_state_null( pjsip_transaction *tsx,
if (tsx->transport_flag & TSX_HAS_PENDING_TRANSPORT) {
tsx->transport_flag |= TSX_HAS_PENDING_RESCHED;
} else {
+ tsx->retransmit_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer(tsx->endpt, &tsx->retransmit_timer,
&t1_timer_val);
}
@@ -1963,9 +1959,9 @@ static pj_status_t tsx_on_state_calling( pjsip_transaction *tsx,
{
/* Cancel retransmission timer. */
- if (tsx->retransmit_timer._timer_id != -1) {
+ if (tsx->retransmit_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer);
- tsx->retransmit_timer._timer_id = -1;
+ tsx->retransmit_timer.id = 0;
}
tsx->transport_flag &= ~(TSX_HAS_PENDING_RESCHED);
@@ -1996,23 +1992,23 @@ static pj_status_t tsx_on_state_calling( pjsip_transaction *tsx,
* timer.
*/
if (code >= 200) {
- if (tsx->retransmit_timer._timer_id != -1) {
+ if (tsx->retransmit_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer);
- tsx->retransmit_timer._timer_id = -1;
+ tsx->retransmit_timer.id = 0;
}
- if (tsx->timeout_timer._timer_id != -1) {
+ if (tsx->timeout_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->timeout_timer);
- tsx->timeout_timer._timer_id = -1;
+ tsx->timeout_timer.id = 0;
}
} else {
/* Cancel retransmit timer (for non-INVITE transaction, the
* retransmit timer will be rescheduled at T2.
*/
- if (tsx->retransmit_timer._timer_id != -1) {
+ if (tsx->retransmit_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer);
- tsx->retransmit_timer._timer_id = -1;
+ tsx->retransmit_timer.id = 0;
}
/* For provisional response, only cancel retransmit when this
@@ -2028,6 +2024,7 @@ static pj_status_t tsx_on_state_calling( pjsip_transaction *tsx,
} else {
if (!tsx->is_reliable) {
+ tsx->retransmit_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer(tsx->endpt,
&tsx->retransmit_timer,
&t2_timer_val);
@@ -2201,6 +2198,7 @@ static pj_status_t tsx_on_state_proceeding_uas( pjsip_transaction *tsx,
if (tsx->transport_flag & TSX_HAS_PENDING_TRANSPORT) {
tsx->transport_flag |= TSX_HAS_PENDING_RESCHED;
} else {
+ tsx->retransmit_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt,
&tsx->retransmit_timer,
&t1_timer_val);
@@ -2239,6 +2237,7 @@ static pj_status_t tsx_on_state_proceeding_uas( pjsip_transaction *tsx,
timeout.sec = timeout.msec = 0;
}
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,
&timeout);
@@ -2264,15 +2263,18 @@ static pj_status_t tsx_on_state_proceeding_uas( pjsip_transaction *tsx,
*/
if (tsx->method.id == PJSIP_INVITE_METHOD) {
/* Start timer H for INVITE */
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer(tsx->endpt,&tsx->timeout_timer,
&timeout_timer_val);
} else if (!tsx->is_reliable) {
/* Start timer J on 64*T1 seconds for non-INVITE */
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer(tsx->endpt,&tsx->timeout_timer,
&timeout_timer_val);
} else {
/* Start timer J on zero seconds for non-INVITE */
pj_time_val zero_time = { 0, 0 };
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer(tsx->endpt,&tsx->timeout_timer,
&zero_time);
}
@@ -2289,6 +2291,7 @@ static pj_status_t tsx_on_state_proceeding_uas( pjsip_transaction *tsx,
if (tsx->transport_flag & TSX_HAS_PENDING_TRANSPORT) {
tsx->transport_flag |= TSX_HAS_PENDING_RESCHED;
} else {
+ tsx->retransmit_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer(tsx->endpt,
&tsx->retransmit_timer,
&t1_timer_val);
@@ -2426,13 +2429,14 @@ static pj_status_t tsx_on_state_proceeding_uac(pjsip_transaction *tsx,
} else {
timeout.sec = timeout.msec = 0;
}
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,
&timeout);
/* Cancel retransmission timer */
- if (tsx->retransmit_timer._timer_id != -1) {
+ if (tsx->retransmit_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer);
- tsx->retransmit_timer._timer_id = -1;
+ tsx->retransmit_timer.id = 0;
}
/* Move state to Completed, inform TU. */
@@ -2493,6 +2497,7 @@ static pj_status_t tsx_on_state_proceeding_uac(pjsip_transaction *tsx,
} else {
timeout.sec = timeout.msec = 0;
}
+ tsx->timeout->timer.id = TSX_TIMER_TIMEOUT;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer, &timeout);
/* Inform TU.
@@ -2561,6 +2566,7 @@ static pj_status_t tsx_on_state_proceeding_uac(pjsip_transaction *tsx,
} else {
timeout.sec = timeout.msec = 0;
}
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer, &timeout);
} else {
@@ -2601,14 +2607,15 @@ static pj_status_t tsx_on_state_completed_uas( pjsip_transaction *tsx,
/* Process incoming ACK request. */
/* Cease retransmission. */
- if (tsx->retransmit_timer._timer_id != -1) {
+ if (tsx->retransmit_timer.id != 0) {
pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer);
- tsx->retransmit_timer._timer_id = -1;
+ tsx->retransmit_timer.id = 0;
}
tsx->transport_flag &= ~(TSX_HAS_PENDING_RESCHED);
/* Start timer I in T4 interval (transaction termination). */
pjsip_endpt_cancel_timer( tsx->endpt, &tsx->timeout_timer );
+ tsx->timeout_timer.id = TIMER_ACTIVE;
pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,
&t4_timer_val);
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index 8a0e93e5..34691531 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -645,6 +645,9 @@ on_error:
/* Sleep with polling */
static void busy_sleep(unsigned msec)
{
+#if defined(PJ_SYMBIAN) && PJ_SYMBIAN != 0
+ pj_thread_sleep(msec);
+#else
pj_time_val timeout, now;
pj_gettimeofday(&timeout);
@@ -656,6 +659,7 @@ static void busy_sleep(unsigned msec)
;
pj_gettimeofday(&now);
} while (PJ_TIME_VAL_LT(now, timeout));
+#endif
}