diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-02-09 14:14:21 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-02-09 14:14:21 +0000 |
commit | 34f4ce979c4d04a00460988325dc3c28748f1834 (patch) | |
tree | 8de78f3b03af02eb1194965b425af8f10cd9d50b /pjsip | |
parent | a1fd7f6ddafccef9cf47bb8c291749aaa835e7fa (diff) |
Fixed ACK receipt not processed by invite session
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@170 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/src/pjsip-ua/sip_inv.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c index a655c86f..d551ee70 100644 --- a/pjsip/src/pjsip-ua/sip_inv.c +++ b/pjsip/src/pjsip-ua/sip_inv.c @@ -198,10 +198,19 @@ static pj_bool_t mod_inv_on_rx_request(pjsip_rx_data *rdata) * move state to CONFIRMED. */ if (method->id == PJSIP_ACK_METHOD && inv && - inv->state == PJSIP_INV_STATE_CONFIRMED) + inv->state != PJSIP_INV_STATE_CONFIRMED) { pjsip_event event; + /* Terminate INVITE transaction, if it's still present. */ + if (inv->invite_tsx && + inv->invite_tsx->state <= PJSIP_TSX_STATE_COMPLETED) + { + pjsip_tsx_terminate(inv->invite_tsx, + inv->invite_tsx->status_code); + inv->invite_tsx = NULL; + } + PJSIP_EVENT_INIT_RX_MSG(event, rdata); inv_set_state(inv, PJSIP_INV_STATE_CONFIRMED, &event); } @@ -1561,6 +1570,7 @@ static void inv_on_state_calling( pjsip_inv_session *inv, pjsip_event *e) pj_assert(e->body.tsx_state.type == PJSIP_EVENT_RX_MSG); inv_send_ack(inv, e->body.tsx_state.src.rdata); + inv_set_state(inv, PJSIP_INV_STATE_CONFIRMED, e); } else { @@ -1700,7 +1710,6 @@ static void inv_on_state_early( pjsip_inv_session *inv, pjsip_event *e) pj_assert(e->body.tsx_state.type == PJSIP_EVENT_RX_MSG); inv_send_ack(inv, e->body.tsx_state.src.rdata); - inv_set_state(inv, PJSIP_INV_STATE_CONFIRMED, e); } |