summaryrefslogtreecommitdiff
path: root/res/res_ari_device_states.c
diff options
context:
space:
mode:
Diffstat (limited to 'res/res_ari_device_states.c')
-rw-r--r--res/res_ari_device_states.c29
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;