summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2013-10-25 22:01:43 +0000
committerJonathan Rose <jrose@digium.com>2013-10-25 22:01:43 +0000
commit5c696bde67411848e4bbbc2cc18c2f881a0a7ead (patch)
tree48cb93ea327e770c325918b84d21c78352dd2981
parentd8a760307e43031033b5607264f7edd8ecfe73a4 (diff)
ARI: channel/bridge recording errors when invalid format specified
Asterisk will now issue 422 if recording is requested against channels or bridges with an unknown format (closes issue ASTERISK-22626) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/2939/ ........ Merged revisions 402001 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@402002 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--res/ari/resource_bridges.c21
-rw-r--r--res/ari/resource_channels.c7
-rw-r--r--res/res_ari_bridges.c1
-rw-r--r--res/res_ari_channels.c1
-rw-r--r--rest-api/api-docs/bridges.json6
-rw-r--r--rest-api/api-docs/channels.json4
6 files changed, 39 insertions, 1 deletions
diff --git a/res/ari/resource_bridges.c b/res/ari/resource_bridges.c
index a036ce0f3..919171139 100644
--- a/res/ari/resource_bridges.c
+++ b/res/ari/resource_bridges.c
@@ -439,6 +439,27 @@ void ast_ari_record_bridge(struct ast_variable *headers, struct ast_record_bridg
stasis_app_recording_if_exists_parse(args->if_exists);
options->beep = args->beep;
+ if (options->terminate_on == STASIS_APP_RECORDING_TERMINATE_INVALID) {
+ ast_ari_response_error(
+ response, 400, "Bad Request",
+ "terminateOn invalid");
+ return;
+ }
+
+ if (options->if_exists == -1) {
+ ast_ari_response_error(
+ response, 400, "Bad Request",
+ "ifExists invalid");
+ return;
+ }
+
+ if (!ast_get_format_for_file_ext(options->format)) {
+ ast_ari_response_error(
+ response, 422, "Unprocessable Entity",
+ "specified format is unknown on this system");
+ return;
+ }
+
recording = stasis_app_control_record(control, options);
if (recording == NULL) {
switch(errno) {
diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c
index b8d59d38b..f1a9217af 100644
--- a/res/ari/resource_channels.c
+++ b/res/ari/resource_channels.c
@@ -407,6 +407,13 @@ void ast_ari_record_channel(struct ast_variable *headers,
return;
}
+ if (!ast_get_format_for_file_ext(options->format)) {
+ ast_ari_response_error(
+ response, 422, "Unprocessable Entity",
+ "specified format is unknown on this system");
+ return;
+ }
+
recording = stasis_app_control_record(control, options);
if (recording == NULL) {
switch(errno) {
diff --git a/res/res_ari_bridges.c b/res/res_ari_bridges.c
index f6a3c1c1a..d34505e2b 100644
--- a/res/res_ari_bridges.c
+++ b/res/res_ari_bridges.c
@@ -745,6 +745,7 @@ static void ast_ari_record_bridge_cb(
case 400: /* Invalid parameters */
case 404: /* Bridge not found */
case 409: /* Bridge is not in a Stasis application; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail */
+ case 422: /* The format specified is unknown on this system */
is_valid = 1;
break;
default:
diff --git a/res/res_ari_channels.c b/res/res_ari_channels.c
index 8ff4c065c..79aa88492 100644
--- a/res/res_ari_channels.c
+++ b/res/res_ari_channels.c
@@ -993,6 +993,7 @@ static void ast_ari_record_channel_cb(
case 400: /* Invalid parameters */
case 404: /* Channel not found */
case 409: /* Channel is not in a Stasis application; the channel is currently bridged with other hcannels; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail */
+ case 422: /* The format specified is unknown on this system */
is_valid = 1;
break;
default:
diff --git a/rest-api/api-docs/bridges.json b/rest-api/api-docs/bridges.json
index 187522826..3174eaaa3 100644
--- a/rest-api/api-docs/bridges.json
+++ b/rest-api/api-docs/bridges.json
@@ -466,7 +466,11 @@
{
"code": 409,
"reason": "Bridge is not in a Stasis application; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail"
- }
+ },
+ {
+ "code": 422,
+ "reason": "The format specified is unknown on this system"
+ }
]
}
]
diff --git a/rest-api/api-docs/channels.json b/rest-api/api-docs/channels.json
index a9b55873a..39dc4e376 100644
--- a/rest-api/api-docs/channels.json
+++ b/rest-api/api-docs/channels.json
@@ -721,6 +721,10 @@
{
"code": 409,
"reason": "Channel is not in a Stasis application; the channel is currently bridged with other hcannels; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail"
+ },
+ {
+ "code": 422,
+ "reason": "The format specified is unknown on this system"
}
]
}