stasis: Only place stasis created and dialed channels into dial bridge.

The dial bridge is meant to hold channels which have been created
and dialed in stasis. It handles the frames coming from them and raises
the appropriate events.

It was possible for the code to mistakenly place calls which came
from the dialplan into the dial bridge if they were not in an
answered state. These channels are not outgoing channels and
should not be placed into the dial bridge.

The code now checks to ensure that only stasis created channels are
placed into the dial bridge by checking that a PBX does not exist
on the channel.

ASTERISK-27756

Change-Id: Ideee69ff06c9a0b31f7ed61165f5c055f51d21b6
This commit is contained in:
agupta 2019-04-30 19:51:46 +05:30 committed by Joshua Colp
parent d6b37e2926
commit 39c5188bec
1 changed files with 5 additions and 1 deletions

View File

@ -1085,7 +1085,11 @@ static int depart_channel(struct stasis_app_control *control, struct ast_channel
{
ast_bridge_depart(chan);
if (!ast_check_hangup(chan) && ast_channel_state(chan) != AST_STATE_UP) {
/* Channels which have a PBX are not ones that have been created and dialed from ARI. They
* have externally come in from the dialplan, and thus should not be placed into the dial
* bridge. Only channels which are created and dialed in ARI should go into the dial bridge.
*/
if (!ast_check_hangup(chan) && ast_channel_state(chan) != AST_STATE_UP && !ast_channel_pbx(chan)) {
/* Channel is still being dialed, so put it back in the dialing bridge */
add_to_dial_bridge(control, chan);
}