From 2cf5079205e1c03e6b2c9528cd8401151a38b021 Mon Sep 17 00:00:00 2001
From: Jasper Hafkenscheid <jasper.hafkenscheid@wearespindle.com>
Date: Tue, 9 Oct 2018 14:44:57 +0200
Subject: [PATCH] chan_sip:  Attempt ast_do_pickup in handle_invite_replaces

When a call pickup is performed using and invite with replaces header
the ast_do_pickup method is attempted and a PICKUP stasis message is sent.

ASTERISK-28081 #close
Reported-by: Luit van Drongelen

Change-Id: Ieb1442027a3ce6ae55faca47bc095e53972f947a
---
 channels/chan_sip.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 3aae905bf8..55da37d35c 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -25903,7 +25903,13 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req,
 		}
 		ao2_ref(bridge, -1);
 	} else {
-		ast_channel_move(replaces_chan, c);
+		int pickedup;
+		ast_channel_lock(replaces_chan);
+		pickedup = ast_can_pickup(replaces_chan) && !ast_do_pickup(c, replaces_chan);
+		ast_channel_unlock(replaces_chan);
+		if (!pickedup) {
+			ast_channel_move(replaces_chan, c);
+		}
 		ast_hangup(c);
 	}
 	ast_channel_unref(c);
-- 
GitLab