From 1b5d2d466702e831f813c493147839540f5109ad Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Wed, 26 May 2004 18:46:36 +0000
Subject: [PATCH] Cancel self destruct on provisional responses too (bug #1722)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3078 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_sip.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 37830d3d26..85464db331 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -5925,9 +5925,13 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
 		}
 		switch(resp) {
 		case 100:
+			if (!strcasecmp(msg, "INVITE")) {
+				sip_cancel_destroy(p);
+			}
 			break;
 		case 183:	
 			if (!strcasecmp(msg, "INVITE")) {
+				sip_cancel_destroy(p);
 				if (!ast_strlen_zero(get_header(req, "Content-Type")))
 					process_sdp(p, req);
 				if (p->owner) {
@@ -5937,10 +5941,13 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
 			}
 			break;
 		case 180:
-			if (p->owner) {
-				ast_queue_control(p->owner, AST_CONTROL_RINGING);
-				if (p->owner->_state != AST_STATE_UP)
-					ast_setstate(p->owner, AST_STATE_RINGING);
+			if (!strcasecmp(msg, "INVITE")) {
+				sip_cancel_destroy(p);
+				if (p->owner) {
+					ast_queue_control(p->owner, AST_CONTROL_RINGING);
+					if (p->owner->_state != AST_STATE_UP)
+						ast_setstate(p->owner, AST_STATE_RINGING);
+				}
 			}
 			break;
 		case 200:
-- 
GitLab