summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2018-04-05 18:33:40 -0500
committerRichard Mudgett <rmudgett@digium.com>2018-04-06 16:12:57 -0600
commit0c03eab9626a3262d6b4f122ceaca29e7d390bbc (patch)
tree9402418ba14185de8c2651e340f15bdd1c550a15 /res
parent72a8e2106ea4f611a755da1a9c20f7bced300cce (diff)
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
Diffstat (limited to 'res')
-rw-r--r--res/res_pjsip_refer.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/res/res_pjsip_refer.c b/res/res_pjsip_refer.c
index 7d892f653..120203c95 100644
--- a/res/res_pjsip_refer.c
+++ b/res/res_pjsip_refer.c
@@ -917,10 +917,7 @@ static int invite_replaces(void *data)
ast_channel_ref(invite->session->channel);
invite->channel = invite->session->channel;
- ast_channel_lock(invite->channel);
- invite->bridge = ast_channel_get_bridge(invite->channel);
- ast_channel_unlock(invite->channel);
-
+ invite->bridge = ast_bridge_transfer_acquire_bridge(invite->channel);
return 0;
}