res_pjsip_refer/chan_sip: Fix INVITE with replaces transfer to ConfBridge

There is a problem when an INVITE-with-Replaces transfer targets a channel
in a ConfBridge.  The transfer will unconditionally swap out the
ConfBridge channel.  Unfortunately, the ConfBridge state will not be aware
of this change.  Unexpected behavior will happen as a result since
ConfBridge channels currently can only be replaced by a masquerade and not
normal bridge channel moves.

* We just need to pretend that the channel isn't in a bridge (like other
transfer methods already do) so the transfer channel will masquerade into
the ConfBridge channel.

Change-Id: I209beb0e748fa4f4b92a576f36afa8f495ba4c82
This commit is contained in:
Richard Mudgett
2018-04-05 18:33:40 -05:00
parent dcac292ae3
commit 72b16ee400
4 changed files with 17 additions and 12 deletions

View File

@@ -25670,10 +25670,7 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req,
ast_raw_answer(c);
ast_channel_lock(replaces_chan);
bridge = ast_channel_get_bridge(replaces_chan);
ast_channel_unlock(replaces_chan);
bridge = ast_bridge_transfer_acquire_bridge(replaces_chan);
if (bridge) {
if (ast_bridge_impart(bridge, c, replaces_chan, NULL,
AST_BRIDGE_IMPART_CHAN_INDEPENDENT)) {