chan_sip: Attempt ast_do_pickup in handle_invite_replaces
authorJasper Hafkenscheid <jasper.hafkenscheid@wearespindle.com>
Tue, 9 Oct 2018 12:44:57 +0000 (14:44 +0200)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 2 Nov 2018 15:21:52 +0000 (10:21 -0500)
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

index 3aae905..55da37d 100644 (file)
@@ -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);