ARI: channel/bridge recording errors when invalid format specified
authorJonathan Rose <jrose@digium.com>
Fri, 25 Oct 2013 22:01:43 +0000 (22:01 +0000)
committerJonathan Rose <jrose@digium.com>
Fri, 25 Oct 2013 22:01:43 +0000 (22:01 +0000)
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

res/ari/resource_bridges.c
res/ari/resource_channels.c
res/res_ari_bridges.c
res/res_ari_channels.c
rest-api/api-docs/bridges.json
rest-api/api-docs/channels.json

index a036ce0..9191711 100644 (file)
@@ -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) {
index b8d59d3..f1a9217 100644 (file)
@@ -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) {
index f6a3c1c..d34505e 100644 (file)
@@ -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:
index 8ff4c06..79aa884 100644 (file)
@@ -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:
index 1875228..3174eaa 100644 (file)
                         {
                             "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"
+                                               }
                     ]
                                }
                        ]
index a9b5587..39dc4e3 100644 (file)
                                                {
                                                        "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"
                                                }
                                        ]
                                }