Merge "rest_api/channels: Fix multiple issues with create and dial"

changes/84/3184/1
zuul 9 years ago committed by Gerrit Code Review
commit 73d8cb587d

@ -1409,9 +1409,7 @@ static int base_process_party_a(struct cdr_object *cdr, struct ast_channel_snaps
static int base_process_bridge_leave(struct cdr_object *cdr, struct ast_bridge_snapshot *bridge, struct ast_channel_snapshot *channel)
{
/* In general, most things shouldn't get a bridge leave */
ast_assert(0);
return 1;
return 0;
}
static int base_process_dial_end(struct cdr_object *cdr, struct ast_channel_snapshot *caller, struct ast_channel_snapshot *peer, const char *dial_status)

@ -1776,6 +1776,9 @@ void ast_ari_channels_create(struct ast_variable *headers,
originator = ast_channel_get_by_name(args->originator);
if (originator) {
request_cap = ao2_bump(ast_channel_nativeformats(originator));
if (!ast_strlen_zero(args->app)) {
stasis_app_subscribe_channel(args->app, originator);
}
} else if (!ast_strlen_zero(args->formats)) {
char *format_name;
char *formats_copy = ast_strdupa(args->formats);
@ -1816,13 +1819,20 @@ void ast_ari_channels_create(struct ast_variable *headers,
chan_data->chan = ast_request(dialtech, request_cap, &assignedids, originator, dialdevice, &cause);
ao2_cleanup(request_cap);
ast_channel_cleanup(originator);
if (!chan_data->chan) {
ast_ari_response_alloc_failed(response);
ast_channel_cleanup(originator);
chan_data_destroy(chan_data);
return;
}
if (!ast_strlen_zero(args->app)) {
stasis_app_subscribe_channel(args->app, chan_data->chan);
}
ast_channel_cleanup(originator);
if (save_dialstring(chan_data->chan, stuff)) {
ast_ari_response_alloc_failed(response);
chan_data_destroy(chan_data);

@ -881,6 +881,9 @@ end:
return ret_bridge;
}
static int bridge_channel_depart(struct stasis_app_control *control,
struct ast_channel *chan, void *data);
/*!
* \brief after bridge callback for the dial bridge
*
@ -890,6 +893,15 @@ end:
static void dial_bridge_after_cb(struct ast_channel *chan, void *data)
{
struct stasis_app_control *control = data;
struct ast_bridge_channel *bridge_channel;
ast_channel_lock(chan);
bridge_channel = ast_channel_get_bridge_channel(chan);
ast_channel_unlock(chan);
ast_debug(3, "Channel: <%s> Reason: %d\n", ast_channel_name(control->channel), ast_channel_hangupcause(chan));
stasis_app_send_command_async(control, bridge_channel_depart, bridge_channel, __ao2_cleanup);
control->bridge = NULL;
}
@ -898,6 +910,7 @@ static void dial_bridge_after_cb_failed(enum ast_bridge_after_cb_reason reason,
{
struct stasis_app_control *control = data;
ast_debug(3, "Channel: <%s> Reason: %d\n", ast_channel_name(control->channel), reason);
dial_bridge_after_cb(control->channel, data);
}
@ -1443,6 +1456,8 @@ static int app_control_dial(struct stasis_app_control *control,
return -1;
}
ast_channel_publish_dial(NULL, chan, args->dialstring, NULL);
return 0;
}

Loading…
Cancel
Save