summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlle Johansson <oej@edvina.net>2008-01-23 21:09:56 +0000
committerOlle Johansson <oej@edvina.net>2008-01-23 21:09:56 +0000
commit02e2718e94e03ca72336df767aa572f3922069d9 (patch)
tree7500bca947113b1b3b36bc7150625717baec2f54
parent64b5fceb32fd2613a332b8c6982c88ee931f8593 (diff)
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
-rw-r--r--channels/chan_sip.c10
1 files 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)) {