summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-08-06 23:07:25 +0000
committerBenny Prijono <bennylp@teluu.com>2006-08-06 23:07:25 +0000
commit7786b1e99d249798e0e394bf473b954b3a612072 (patch)
tree88638230f2edbad4d6329906b68657811d6cca6f /pjsip
parent6dd0c041b65a7c102aad3aee3c35264e3bf1186f (diff)
Fixed assertion error if ACK is received before INVITE transaction sends final response (malicious?). Also fixed misc warnings, and stress-tested on Quad Xeon
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@657 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c8
-rw-r--r--pjsip/src/pjsip/sip_transaction.c3
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c4
3 files changed, 15 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index e35f0eea..32947446 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -256,10 +256,18 @@ static pj_bool_t mod_inv_on_rx_request(pjsip_rx_data *rdata)
*/
if (method->id == PJSIP_ACK_METHOD && inv) {
+ /* Ignore ACK if pending INVITE transaction has not finished. */
+ if (inv->invite_tsx &&
+ inv->invite_tsx->state < PJSIP_TSX_STATE_COMPLETED)
+ {
+ return PJ_TRUE;
+ }
+
/* Terminate INVITE transaction, if it's still present. */
if (inv->invite_tsx &&
inv->invite_tsx->state <= PJSIP_TSX_STATE_COMPLETED)
{
+ pj_assert(inv->invite_tsx->status_code >= 200);
pjsip_tsx_terminate(inv->invite_tsx,
inv->invite_tsx->status_code);
inv->invite_tsx = NULL;
diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c
index b7a23eb9..211749fe 100644
--- a/pjsip/src/pjsip/sip_transaction.c
+++ b/pjsip/src/pjsip/sip_transaction.c
@@ -1009,6 +1009,9 @@ static void tsx_set_state( pjsip_transaction *tsx,
{
pjsip_tsx_state_e prev_state = tsx->state;
+ /* New state must be greater than previous state */
+ pj_assert(state >= tsx->state);
+
PJ_LOG(5, (tsx->obj_name, "State changed from %s to %s, event=%s",
state_str[tsx->state], state_str[state],
pjsip_event_str(event_src_type)));
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index faafe2bd..9c011b84 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -552,6 +552,10 @@ PJ_DEF(pj_status_t) pjsua_init( const pjsua_config *ua_cfg,
if (status != PJ_SUCCESS)
goto on_error;
}
+ PJ_LOG(4,(THIS_FILE, "%d SIP worker threads created",
+ pjsua_var.ua_cfg.thread_cnt));
+ } else {
+ PJ_LOG(4,(THIS_FILE, "No SIP worker threads created"));
}
/* Done! */