diff options
author | Richard Mudgett <rmudgett@digium.com> | 2018-04-05 18:33:40 -0500 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2018-04-06 16:12:57 -0600 |
commit | 0c03eab9626a3262d6b4f122ceaca29e7d390bbc (patch) | |
tree | 9402418ba14185de8c2651e340f15bdd1c550a15 /include | |
parent | 72a8e2106ea4f611a755da1a9c20f7bced300cce (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 'include')
-rw-r--r-- | include/asterisk/bridge.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/asterisk/bridge.h b/include/asterisk/bridge.h index 8d5c50211..484d9a2f5 100644 --- a/include/asterisk/bridge.h +++ b/include/asterisk/bridge.h @@ -945,6 +945,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, |