diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-08-06 23:07:25 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-08-06 23:07:25 +0000 |
commit | 7786b1e99d249798e0e394bf473b954b3a612072 (patch) | |
tree | 88638230f2edbad4d6329906b68657811d6cca6f /pjsip/src/pjsip-ua | |
parent | 6dd0c041b65a7c102aad3aee3c35264e3bf1186f (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/src/pjsip-ua')
-rw-r--r-- | pjsip/src/pjsip-ua/sip_inv.c | 8 |
1 files changed, 8 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; |