summaryrefslogtreecommitdiff
path: root/res/res_ari_channels.c
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2014-01-21 14:27:21 +0000
committerKinsey Moore <kmoore@digium.com>2014-01-21 14:27:21 +0000
commit1590d32ab0a5b6797c96244a47f18f868574e970 (patch)
tree3cc0717778b4d2b816ba4df12bb76a75716631b3 /res/res_ari_channels.c
parent4bc84b1b9f25b6bdfab7daef9c08000fb31d5a43 (diff)
ARI: Support channel variables in originate
This adds back in support for specifying channel variables during an originate without compromising the ability to specify query parameters in the JSON body. This was accomplished by generating the body-parsing code in a separate function instead of being integrated with the URI query parameter parsing code such that it could be called by paths with body parameters. This is transparent to the user of the API and prevents manual duplication of code or data structures. (closes issue ASTERISK-23051) Review: https://reviewboard.asterisk.org/r/3122/ Reported by: Matt Jordan ........ Merged revisions 406003 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@406006 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_ari_channels.c')
-rw-r--r--res/res_ari_channels.c459
1 files changed, 294 insertions, 165 deletions
diff --git a/res/res_ari_channels.c b/res/res_ari_channels.c
index 40ad32b2b..12ef16843 100644
--- a/res/res_ari_channels.c
+++ b/res/res_ari_channels.c
@@ -102,6 +102,47 @@ static void ast_ari_channels_list_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_originate_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_originate_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "endpoint");
+ if (field) {
+ args->endpoint = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "extension");
+ if (field) {
+ args->extension = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "context");
+ if (field) {
+ args->context = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "priority");
+ if (field) {
+ args->priority = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "app");
+ if (field) {
+ args->app = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "appArgs");
+ if (field) {
+ args->app_args = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "callerId");
+ if (field) {
+ args->caller_id = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "timeout");
+ if (field) {
+ args->timeout = ast_json_integer_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels.
* \param get_params GET parameters in the HTTP request.
@@ -117,7 +158,6 @@ static void ast_ari_channels_originate_cb(
struct ast_ari_channels_originate_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -165,39 +205,7 @@ static void ast_ari_channels_originate_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "endpoint");
- if (field) {
- args.endpoint = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "extension");
- if (field) {
- args.extension = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "context");
- if (field) {
- args.context = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "priority");
- if (field) {
- args.priority = ast_json_integer_get(field);
- }
- field = ast_json_object_get(body, "app");
- if (field) {
- args.app = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "appArgs");
- if (field) {
- args.app_args = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "callerId");
- if (field) {
- args.caller_id = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "timeout");
- if (field) {
- args.timeout = ast_json_integer_get(field);
- }
+ args.variables = ast_json_ref(body);
ast_ari_channels_originate(headers, &args, response);
#if defined(AST_DEVMODE)
code = response->response_code;
@@ -290,6 +298,19 @@ static void ast_ari_channels_get_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_hangup_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_hangup_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "reason");
+ if (field) {
+ args->reason = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}.
* \param get_params GET parameters in the HTTP request.
@@ -305,7 +326,6 @@ static void ast_ari_channels_hangup_cb(
struct ast_ari_channels_hangup_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -338,10 +358,9 @@ static void ast_ari_channels_hangup_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "reason");
- if (field) {
- args.reason = ast_json_string_get(field);
+ if (ast_ari_channels_hangup_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_hangup(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -377,6 +396,27 @@ static void ast_ari_channels_hangup_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_continue_in_dialplan_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_continue_in_dialplan_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "context");
+ if (field) {
+ args->context = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "extension");
+ if (field) {
+ args->extension = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "priority");
+ if (field) {
+ args->priority = ast_json_integer_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/continue.
* \param get_params GET parameters in the HTTP request.
@@ -392,7 +432,6 @@ static void ast_ari_channels_continue_in_dialplan_cb(
struct ast_ari_channels_continue_in_dialplan_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -431,18 +470,9 @@ static void ast_ari_channels_continue_in_dialplan_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "context");
- if (field) {
- args.context = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "extension");
- if (field) {
- args.extension = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "priority");
- if (field) {
- args.priority = ast_json_integer_get(field);
+ if (ast_ari_channels_continue_in_dialplan_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_continue_in_dialplan(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -658,6 +688,35 @@ static void ast_ari_channels_ring_stop_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_send_dtmf_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_send_dtmf_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "dtmf");
+ if (field) {
+ args->dtmf = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "before");
+ if (field) {
+ args->before = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "between");
+ if (field) {
+ args->between = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "duration");
+ if (field) {
+ args->duration = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "after");
+ if (field) {
+ args->after = ast_json_integer_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/dtmf.
* \param get_params GET parameters in the HTTP request.
@@ -673,7 +732,6 @@ static void ast_ari_channels_send_dtmf_cb(
struct ast_ari_channels_send_dtmf_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -718,26 +776,9 @@ static void ast_ari_channels_send_dtmf_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "dtmf");
- if (field) {
- args.dtmf = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "before");
- if (field) {
- args.before = ast_json_integer_get(field);
- }
- field = ast_json_object_get(body, "between");
- if (field) {
- args.between = ast_json_integer_get(field);
- }
- field = ast_json_object_get(body, "duration");
- if (field) {
- args.duration = ast_json_integer_get(field);
- }
- field = ast_json_object_get(body, "after");
- if (field) {
- args.after = ast_json_integer_get(field);
+ if (ast_ari_channels_send_dtmf_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_send_dtmf(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -774,6 +815,19 @@ static void ast_ari_channels_send_dtmf_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_mute_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_mute_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "direction");
+ if (field) {
+ args->direction = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/mute.
* \param get_params GET parameters in the HTTP request.
@@ -789,7 +843,6 @@ static void ast_ari_channels_mute_cb(
struct ast_ari_channels_mute_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -822,10 +875,9 @@ static void ast_ari_channels_mute_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "direction");
- if (field) {
- args.direction = ast_json_string_get(field);
+ if (ast_ari_channels_mute_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_mute(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -861,6 +913,19 @@ static void ast_ari_channels_mute_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_unmute_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_unmute_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "direction");
+ if (field) {
+ args->direction = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/mute.
* \param get_params GET parameters in the HTTP request.
@@ -876,7 +941,6 @@ static void ast_ari_channels_unmute_cb(
struct ast_ari_channels_unmute_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -909,10 +973,9 @@ static void ast_ari_channels_unmute_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "direction");
- if (field) {
- args.direction = ast_json_string_get(field);
+ if (ast_ari_channels_unmute_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_unmute(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -1068,6 +1131,19 @@ static void ast_ari_channels_unhold_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_start_moh_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_start_moh_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "mohClass");
+ if (field) {
+ args->moh_class = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/moh.
* \param get_params GET parameters in the HTTP request.
@@ -1083,7 +1159,6 @@ static void ast_ari_channels_start_moh_cb(
struct ast_ari_channels_start_moh_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -1116,10 +1191,9 @@ static void ast_ari_channels_start_moh_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "mohClass");
- if (field) {
- args.moh_class = ast_json_string_get(field);
+ if (ast_ari_channels_start_moh_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_start_moh(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -1335,6 +1409,31 @@ static void ast_ari_channels_stop_silence_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_play_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_play_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "media");
+ if (field) {
+ args->media = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "lang");
+ if (field) {
+ args->lang = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "offsetms");
+ if (field) {
+ args->offsetms = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "skipms");
+ if (field) {
+ args->skipms = ast_json_integer_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/play.
* \param get_params GET parameters in the HTTP request.
@@ -1350,7 +1449,6 @@ static void ast_ari_channels_play_cb(
struct ast_ari_channels_play_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -1392,22 +1490,9 @@ static void ast_ari_channels_play_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "media");
- if (field) {
- args.media = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "lang");
- if (field) {
- args.lang = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "offsetms");
- if (field) {
- args.offsetms = ast_json_integer_get(field);
- }
- field = ast_json_object_get(body, "skipms");
- if (field) {
- args.skipms = ast_json_integer_get(field);
+ if (ast_ari_channels_play_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_play(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -1443,6 +1528,43 @@ static void ast_ari_channels_play_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_record_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_record_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "name");
+ if (field) {
+ args->name = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "format");
+ if (field) {
+ args->format = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "maxDurationSeconds");
+ if (field) {
+ args->max_duration_seconds = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "maxSilenceSeconds");
+ if (field) {
+ args->max_silence_seconds = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "ifExists");
+ if (field) {
+ args->if_exists = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "beep");
+ if (field) {
+ args->beep = ast_json_is_true(field);
+ }
+ field = ast_json_object_get(body, "terminateOn");
+ if (field) {
+ args->terminate_on = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/record.
* \param get_params GET parameters in the HTTP request.
@@ -1458,7 +1580,6 @@ static void ast_ari_channels_record_cb(
struct ast_ari_channels_record_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -1509,34 +1630,9 @@ static void ast_ari_channels_record_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "name");
- if (field) {
- args.name = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "format");
- if (field) {
- args.format = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "maxDurationSeconds");
- if (field) {
- args.max_duration_seconds = ast_json_integer_get(field);
- }
- field = ast_json_object_get(body, "maxSilenceSeconds");
- if (field) {
- args.max_silence_seconds = ast_json_integer_get(field);
- }
- field = ast_json_object_get(body, "ifExists");
- if (field) {
- args.if_exists = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "beep");
- if (field) {
- args.beep = ast_json_is_true(field);
- }
- field = ast_json_object_get(body, "terminateOn");
- if (field) {
- args.terminate_on = ast_json_string_get(field);
+ if (ast_ari_channels_record_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_record(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -1574,6 +1670,19 @@ static void ast_ari_channels_record_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_get_channel_var_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_get_channel_var_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "variable");
+ if (field) {
+ args->variable = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/variable.
* \param get_params GET parameters in the HTTP request.
@@ -1589,7 +1698,6 @@ static void ast_ari_channels_get_channel_var_cb(
struct ast_ari_channels_get_channel_var_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -1622,10 +1730,9 @@ static void ast_ari_channels_get_channel_var_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "variable");
- if (field) {
- args.variable = ast_json_string_get(field);
+ if (ast_ari_channels_get_channel_var_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_get_channel_var(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -1662,6 +1769,23 @@ static void ast_ari_channels_get_channel_var_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_set_channel_var_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_set_channel_var_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "variable");
+ if (field) {
+ args->variable = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "value");
+ if (field) {
+ args->value = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/variable.
* \param get_params GET parameters in the HTTP request.
@@ -1677,7 +1801,6 @@ static void ast_ari_channels_set_channel_var_cb(
struct ast_ari_channels_set_channel_var_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -1713,14 +1836,9 @@ static void ast_ari_channels_set_channel_var_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "variable");
- if (field) {
- args.variable = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "value");
- if (field) {
- args.value = ast_json_string_get(field);
+ if (ast_ari_channels_set_channel_var_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_set_channel_var(headers, &args, response);
#if defined(AST_DEVMODE)
@@ -1757,6 +1875,31 @@ static void ast_ari_channels_set_channel_var_cb(
fin: __attribute__((unused))
return;
}
+int ast_ari_channels_snoop_channel_parse_body(
+ struct ast_json *body,
+ struct ast_ari_channels_snoop_channel_args *args)
+{
+ struct ast_json *field;
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "spy");
+ if (field) {
+ args->spy = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "whisper");
+ if (field) {
+ args->whisper = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "app");
+ if (field) {
+ args->app = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "appArgs");
+ if (field) {
+ args->app_args = ast_json_string_get(field);
+ }
+ return 0;
+}
+
/*!
* \brief Parameter parsing callback for /channels/{channelId}/snoop.
* \param get_params GET parameters in the HTTP request.
@@ -1772,7 +1915,6 @@ static void ast_ari_channels_snoop_channel_cb(
struct ast_ari_channels_snoop_channel_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
- struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
@@ -1814,22 +1956,9 @@ static void ast_ari_channels_snoop_channel_cb(
goto fin;
}
}
- /* Parse query parameters out of it */
- field = ast_json_object_get(body, "spy");
- if (field) {
- args.spy = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "whisper");
- if (field) {
- args.whisper = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "app");
- if (field) {
- args.app = ast_json_string_get(field);
- }
- field = ast_json_object_get(body, "appArgs");
- if (field) {
- args.app_args = ast_json_string_get(field);
+ if (ast_ari_channels_snoop_channel_parse_body(body, &args)) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
}
ast_ari_channels_snoop_channel(headers, &args, response);
#if defined(AST_DEVMODE)