diff options
Diffstat (limited to 'res/res_ari_sounds.c')
-rw-r--r-- | res/res_ari_sounds.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/res/res_ari_sounds.c b/res/res_ari_sounds.c index 62a34364e..a3657d13b 100644 --- a/res/res_ari_sounds.c +++ b/res/res_ari_sounds.c @@ -59,11 +59,14 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") * \param[out] response Response to the HTTP request. */ static void ast_ari_sounds_list_cb( + struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_ari_response *response) { struct ast_ari_sounds_list_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; @@ -78,6 +81,30 @@ static void ast_ari_sounds_list_cb( } else {} } + /* Look for a JSON request entity */ + body = ast_http_get_json(ser, headers); + if (!body) { + switch (errno) { + case EFBIG: + ast_ari_response_error(response, 413, "Request Entity Too Large", "Request body too large"); + goto fin; + case ENOMEM: + ast_ari_response_error(response, 500, "Internal Server Error", "Error processing request"); + goto fin; + case EIO: + ast_ari_response_error(response, 400, "Bad Request", "Error parsing request body"); + goto fin; + } + } + /* Parse query parameters out of it */ + field = ast_json_object_get(body, "lang"); + if (field) { + args.lang = ast_json_string_get(field); + } + field = ast_json_object_get(body, "format"); + if (field) { + args.format = ast_json_string_get(field); + } ast_ari_sounds_list(headers, &args, response); #if defined(AST_DEVMODE) code = response->response_code; @@ -118,11 +145,13 @@ fin: __attribute__((unused)) * \param[out] response Response to the HTTP request. */ static void ast_ari_sounds_get_cb( + struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_ari_response *response) { struct ast_ari_sounds_get_args args = {}; struct ast_variable *i; + RAII_VAR(struct ast_json *, body, NULL, ast_json_unref); #if defined(AST_DEVMODE) int is_valid; int code; |