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

@@ -912,6 +912,17 @@ void ast_bridge_remove_video_src(struct ast_bridge *bridge, struct ast_channel *
*/
const char *ast_bridge_video_mode_to_string(enum ast_bridge_video_mode_type video_mode);
/*!
* \brief Acquire the channel's bridge for transfer purposes.
* \since 13.21.0
*
* \param chan Channel involved in a transfer.
*
* \return The bridge the channel is in or NULL if it either isn't
* in a bridge or should not be considered to be in a bridge.
*/
struct ast_bridge *ast_bridge_transfer_acquire_bridge(struct ast_channel *chan);
enum ast_transfer_result {
/*! The transfer completed successfully */
AST_BRIDGE_TRANSFER_SUCCESS,