summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-05-30 04:26:40 +0000
committerBenny Prijono <bennylp@teluu.com>2007-05-30 04:26:40 +0000
commit2195f68b66250eb4b02b73ba40af959fa137c2ff (patch)
tree44f0e09c40b0d61c9a1175736bf0f6568f106f75 /pjsip/src/pjsip-ua
parent8d8e6b777d4a49d04ffe959a9ed5d92982a3f7aa (diff)
Fixed ticket #302: Behavior in cancelling INVITE session when no provisional response has been received (thanks Esbjörn Dominique)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1319 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua')
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index 3e4e546b..62d76d73 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -1512,8 +1512,12 @@ PJ_DEF(pj_status_t) pjsip_inv_end_session( pjsip_inv_session *inv,
*/
if (inv->invite_tsx->status_code < 100) {
- pjsip_tsx_terminate(inv->invite_tsx, 487);
+ pjsip_tsx_stop_retransmit(inv->invite_tsx);
+ inv->cancelling = PJ_TRUE;
+ inv->pending_cancel = PJ_TRUE;
*p_tdata = NULL;
+ PJ_LOG(4, (inv->obj_name, "Stopping retransmission, "
+ "delaying CANCEL"));
return PJ_SUCCESS;
}
@@ -1925,6 +1929,16 @@ static void inv_on_state_calling( pjsip_inv_session *inv, pjsip_event *e)
break;
case PJSIP_TSX_STATE_PROCEEDING:
+ if (inv->pending_cancel) {
+ pjsip_tx_data *cancel;
+
+ inv->pending_cancel = PJ_FALSE;
+
+ status = pjsip_inv_end_session(inv, 487, NULL, &cancel);
+ if (status == PJ_SUCCESS && cancel)
+ status = pjsip_inv_send_msg(inv, cancel);
+ }
+
if (dlg->remote.info->tag.slen) {
inv_set_state(inv, PJSIP_INV_STATE_EARLY, e);