Author: mmichelson Date: Thu Aug 21 16:36:00 2014 New Revision: 421794 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=421794 Log: Ensure after-bridge behavior is correct when moving from Stasis to a non-Stasis bridge.
Because of the departable state of channels that enter Stasis bridges, Stasis has to take responsibility for directing the channel to its intended after-bridge destination if the channel moves from a Stasis bridge to a non-Stasis bridge. This change ensures that when such a move occurs, when the channel leaves the bridging system, any after bridge gotos are honored. Review: https://reviewboard.asterisk.org/r/3920 ........ Merged revisions 421792 from http://svn.asterisk.org/svn/asterisk/branches/12 Modified: branches/13/ (props changed) branches/13/res/stasis/control.c Propchange: branches/13/ ------------------------------------------------------------------------------ Binary property 'branch-12-merged' - no diff available. Modified: branches/13/res/stasis/control.c URL: http://svnview.digium.com/svn/asterisk/branches/13/res/stasis/control.c?view=diff&rev=421794&r1=421793&r2=421794 ============================================================================== --- branches/13/res/stasis/control.c (original) +++ branches/13/res/stasis/control.c Thu Aug 21 16:36:00 2014 @@ -810,6 +810,21 @@ if (stasis_app_send_command_async(control, bridge_channel_depart, bridge_channel)) { ao2_cleanup(bridge_channel); } + if (stasis_app_channel_is_stasis_end_published(chan)) { + /* The channel has had a StasisEnd published on it, but until now had remained in + * the bridging system. This means that the channel moved from a Stasis bridge to a + * non-Stasis bridge and is now exiting the bridging system. Because of this, the + * channel needs to exit the Stasis application and go to wherever the non-Stasis + * bridge has directed it to go. If the non-Stasis bridge has not set up an after + * bridge destination, then the channel should be hung up. + */ + int hangup_flag; + + hangup_flag = ast_bridge_setup_after_goto(chan) ? AST_SOFTHANGUP_DEV : AST_SOFTHANGUP_ASYNCGOTO; + ast_channel_lock(chan); + ast_softhangup_nolock(chan, hangup_flag); + ast_channel_unlock(chan); + } } static void bridge_after_cb_failed(enum ast_bridge_after_cb_reason reason, -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits