features: Bridge application's BRIDGERESULT not appropriately set

The dialplan application "Bridge" was not setting the BRIDGERESULT to failure
when a failure did occur. Even worse if it did fail to join the bridge it would
still report success.

This patch now sets the BRIDGERESULT variable to an appropriate value for a
given condition state. Also, removed the value INCOMPATIBLE as a valid result
type since it is no longer used.

ASTERISK-27369 #close

Change-Id: I22588e7125a765edf35cff28c98ca143e9927554
pull/9/head
Kevin Harwell 8 years ago
parent df18445b98
commit 1e70011710

@ -196,7 +196,6 @@
<value name="FAILURE" /> <value name="FAILURE" />
<value name="LOOP" /> <value name="LOOP" />
<value name="NONEXISTENT" /> <value name="NONEXISTENT" />
<value name="INCOMPATIBLE" />
</variable> </variable>
</variablelist> </variablelist>
</description> </description>
@ -1006,6 +1005,7 @@ static int bridge_exec(struct ast_channel *chan, const char *data)
const char *extension; const char *extension;
int priority; int priority;
int bridge_add_failed; int bridge_add_failed;
int res = -1;
struct ast_bridge_features chan_features; struct ast_bridge_features chan_features;
struct ast_bridge_features *peer_features; struct ast_bridge_features *peer_features;
struct ast_bridge *bridge; struct ast_bridge *bridge;
@ -1032,6 +1032,7 @@ static int bridge_exec(struct ast_channel *chan, const char *data)
if (!current_dest_chan) { if (!current_dest_chan) {
ast_log(LOG_WARNING, "Bridge failed because channel %s does not exist\n", ast_log(LOG_WARNING, "Bridge failed because channel %s does not exist\n",
args.dest_chan); args.dest_chan);
pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "NONEXISTENT");
return 0; return 0;
} }
@ -1039,13 +1040,13 @@ static int bridge_exec(struct ast_channel *chan, const char *data)
if (chan == current_dest_chan) { if (chan == current_dest_chan) {
ast_channel_unref(current_dest_chan); ast_channel_unref(current_dest_chan);
ast_log(LOG_WARNING, "Unable to bridge channel %s with itself\n", ast_channel_name(chan)); ast_log(LOG_WARNING, "Unable to bridge channel %s with itself\n", ast_channel_name(chan));
pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "LOOP");
return 0; return 0;
} }
if (ast_test_flag(&opts, OPT_DURATION_LIMIT) if (ast_test_flag(&opts, OPT_DURATION_LIMIT)
&& !ast_strlen_zero(opt_args[OPT_ARG_DURATION_LIMIT]) && !ast_strlen_zero(opt_args[OPT_ARG_DURATION_LIMIT])
&& ast_bridge_timelimit(chan, &bconfig, opt_args[OPT_ARG_DURATION_LIMIT], &calldurationlimit)) { && ast_bridge_timelimit(chan, &bconfig, opt_args[OPT_ARG_DURATION_LIMIT], &calldurationlimit)) {
pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "FAILURE");
goto done; goto done;
} }
@ -1124,14 +1125,18 @@ static int bridge_exec(struct ast_channel *chan, const char *data)
/* Don't keep the channel ref in case it was not already in a bridge. */ /* Don't keep the channel ref in case it was not already in a bridge. */
current_dest_chan = ast_channel_unref(current_dest_chan); current_dest_chan = ast_channel_unref(current_dest_chan);
ast_bridge_join(bridge, chan, NULL, &chan_features, NULL, res = ast_bridge_join(bridge, chan, NULL, &chan_features, NULL,
AST_BRIDGE_JOIN_PASS_REFERENCE); AST_BRIDGE_JOIN_PASS_REFERENCE);
ast_bridge_features_cleanup(&chan_features); ast_bridge_features_cleanup(&chan_features);
/* The bridge has ended, set BRIDGERESULT to SUCCESS. */
pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "SUCCESS");
done: done:
if (res == -1) {
pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "FAILURE");
} else {
pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "SUCCESS");
}
ast_free((char *) bconfig.warning_sound); ast_free((char *) bconfig.warning_sound);
ast_free((char *) bconfig.end_sound); ast_free((char *) bconfig.end_sound);
ast_free((char *) bconfig.start_sound); ast_free((char *) bconfig.start_sound);

Loading…
Cancel
Save