From 02e2718e94e03ca72336df767aa572f3922069d9 Mon Sep 17 00:00:00 2001 From: Olle Johansson Date: Wed, 23 Jan 2008 21:09:56 +0000 Subject: Merged revisions 99977 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r99977 | oej | 2008-01-23 21:58:20 +0100 (Ons, 23 Jan 2008) | 9 lines Make sure we don't cancel destruction on calls in CANCEL state, even if we get 183 while waiting for answer on our CANCEL. (issue #11736) Reported by: MVF Patches: bug11736.txt uploaded by oej (license 306) Tested by: MVF ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@99979 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 920688c75..598ccaa54 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4609,6 +4609,7 @@ static int sip_hangup(struct ast_channel *ast) if (ast_test_flag(&p->flags[0], SIP_OUTGOING)) { /* stop retransmitting an INVITE that has not received a response */ __sip_pretend_ack(p); + p->invitestate = INV_CANCELLED; /* if we can't send right now, mark it pending */ if (p->invitestate == INV_CALLING) { @@ -4624,7 +4625,6 @@ static int sip_hangup(struct ast_channel *ast) INVITE, but do set an autodestruct just in case we never get it. */ needdestroy = 0; sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); - p->invitestate = INV_CANCELLED; } if ( p->initid != -1 ) { /* channel still up - reverse dec of inUse counter @@ -14274,14 +14274,14 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru switch (resp) { case 100: /* Trying */ case 101: /* Dialog establishment */ - if (!req->ignore) + if (!req->ignore && p->invitestate != INV_CANCELLED) sip_cancel_destroy(p); check_pendings(p); break; case 180: /* 180 Ringing */ case 182: /* 182 Queued */ - if (!req->ignore) + if (!req->ignore && p->invitestate != INV_CANCELLED) sip_cancel_destroy(p); if (!req->ignore && p->owner) { ast_queue_control(p->owner, AST_CONTROL_RINGING); @@ -14301,7 +14301,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru break; case 183: /* Session progress */ - if (!req->ignore) + if (!req->ignore && (p->invitestate != INV_CANCELLED)) sip_cancel_destroy(p); /* Ignore 183 Session progress without SDP */ if (find_sdp(req)) { @@ -14316,7 +14316,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru break; case 200: /* 200 OK on invite - someone's answering our call */ - if (!req->ignore) + if (!req->ignore && (p->invitestate != INV_CANCELLED)) sip_cancel_destroy(p); p->authtries = 0; if (find_sdp(req)) { -- cgit v1.2.3