From 7786b1e99d249798e0e394bf473b954b3a612072 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Sun, 6 Aug 2006 23:07:25 +0000 Subject: 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 --- pjsip/src/pjsip-ua/sip_inv.c | 8 ++++++++ pjsip/src/pjsip/sip_transaction.c | 3 +++ pjsip/src/pjsua-lib/pjsua_core.c | 4 ++++ 3 files changed, 15 insertions(+) (limited to 'pjsip/src') 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! */ -- cgit v1.2.3