diff options
Diffstat (limited to 'res/res_ari_device_states.c')
-rw-r--r-- | res/res_ari_device_states.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/res/res_ari_device_states.c b/res/res_ari_device_states.c index 07f51ba3e..a8079f139 100644 --- a/res/res_ari_device_states.c +++ b/res/res_ari_device_states.c @@ -59,10 +59,12 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") * \param[out] response Response to the HTTP request. */ static void ast_ari_device_states_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_device_states_list_args args = {}; + RAII_VAR(struct ast_json *, body, NULL, ast_json_unref); #if defined(AST_DEVMODE) int is_valid; int code; @@ -108,11 +110,13 @@ fin: __attribute__((unused)) * \param[out] response Response to the HTTP request. */ static void ast_ari_device_states_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_device_states_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; @@ -164,11 +168,14 @@ fin: __attribute__((unused)) * \param[out] response Response to the HTTP request. */ static void ast_ari_device_states_update_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_device_states_update_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; @@ -186,6 +193,26 @@ static void ast_ari_device_states_update_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, "deviceState"); + if (field) { + args.device_state = ast_json_string_get(field); + } ast_ari_device_states_update(headers, &args, response); #if defined(AST_DEVMODE) code = response->response_code; @@ -228,11 +255,13 @@ fin: __attribute__((unused)) * \param[out] response Response to the HTTP request. */ static void ast_ari_device_states_delete_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_device_states_delete_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; |