diff options
author | zuul <zuul@gerrit.asterisk.org> | 2016-07-13 08:08:41 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2016-07-13 08:08:41 -0500 |
commit | 73d8cb587d6515b707c9cafe334e18fbd7c24905 (patch) | |
tree | edff4e9d6fd10c739d590c54777933d61d6581a6 /res | |
parent | e049248161d44a6e137cb9264337adb53bdb09a6 (diff) | |
parent | 886f2cab232e1dca65a90036aef39eda27443f4e (diff) |
Merge "rest_api/channels: Fix multiple issues with create and dial"
Diffstat (limited to 'res')
-rw-r--r-- | res/ari/resource_channels.c | 12 | ||||
-rw-r--r-- | res/stasis/control.c | 15 |
2 files changed, 26 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); diff --git a/res/stasis/control.c b/res/stasis/control.c index b255477bf..219a2c6cd 100644 --- a/res/stasis/control.c +++ b/res/stasis/control.c @@ -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; } |