diff options
Diffstat (limited to 'res/ari/resource_channels.c')
-rw-r--r-- | res/ari/resource_channels.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c index 6cc00ce41..393609298 100644 --- a/res/ari/resource_channels.c +++ b/res/ari/resource_channels.c @@ -42,6 +42,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/stasis_app_snoop.h" #include "asterisk/stasis_channels.h" #include "asterisk/causes.h" +#include "asterisk/core_local.h" #include "resource_channels.h" #include <limits.h> @@ -775,6 +776,7 @@ static void ari_channels_handle_originate_with_id(const char *args_endpoint, struct ast_format tmp_fmt; char *stuff; struct ast_channel *chan; + struct ast_channel *local_peer; RAII_VAR(struct ast_channel_snapshot *, snapshot, NULL, ao2_cleanup); struct ast_assigned_ids assignedids = { .uniqueid = args_channel_id, @@ -859,20 +861,24 @@ static void ari_channels_handle_originate_with_id(const char *args_endpoint, return; } - snapshot = ast_channel_snapshot_get_latest(ast_channel_uniqueid(chan)); - ast_channel_unlock(chan); + /* See if this is a Local channel and if so, get the peer */ + local_peer = ast_local_get_peer(chan); if (!ast_strlen_zero(args_app)) { - /* channel: + channel ID + null terminator */ - char uri[9 + strlen(ast_channel_uniqueid(chan))]; - const char *uris[1] = { uri, }; - - sprintf(uri, "channel:%s", ast_channel_uniqueid(chan)); - stasis_app_subscribe(args_app, uris, 1, NULL); + stasis_app_subscribe_channel(args_app, chan); + if (local_peer) { + stasis_app_subscribe_channel(args_app, local_peer); + } } + snapshot = ast_channel_snapshot_get_latest(ast_channel_uniqueid(chan)); + ast_channel_unlock(chan); + ast_ari_response_ok(response, ast_channel_snapshot_to_json(snapshot, NULL)); ast_channel_unref(chan); + if (local_peer) { + ast_channel_unref(local_peer); + } } void ast_ari_channels_originate_with_id(struct ast_variable *headers, |