diff options
Diffstat (limited to 'res/ari/resource_channels.c')
-rw-r--r-- | res/ari/resource_channels.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c index bce7c7def..35b757267 100644 --- a/res/ari/resource_channels.c +++ b/res/ari/resource_channels.c @@ -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); |