From a73394abb874221ab3ae23348b285b217c1ee120 Mon Sep 17 00:00:00 2001 From: "David M. Lee" Date: Wed, 10 Jul 2013 13:50:48 +0000 Subject: Corrected api-docs for channel variables git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393968 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_stasis_http_asterisk.c | 64 ++++++++++++++++++++++++++++++-- res/res_stasis_http_channels.c | 68 ++++++++++++++++++++++++++++++++-- res/stasis_http/ari_model_validators.c | 38 +++++++++++++++++++ res/stasis_http/ari_model_validators.h | 20 ++++++++++ 4 files changed, 182 insertions(+), 8 deletions(-) (limited to 'res') diff --git a/res/res_stasis_http_asterisk.c b/res/res_stasis_http_asterisk.c index c0ff660cd..3c035652d 100644 --- a/res/res_stasis_http_asterisk.c +++ b/res/res_stasis_http_asterisk.c @@ -106,9 +106,14 @@ static void stasis_http_get_asterisk_info_cb( * \param[out] response Response to the HTTP request. */ static void stasis_http_get_global_var_cb( - struct ast_variable *get_params, struct ast_variable *path_vars, - struct ast_variable *headers, struct stasis_http_response *response) + struct ast_variable *get_params, struct ast_variable *path_vars, + struct ast_variable *headers, struct stasis_http_response *response) { +#if defined(AST_DEVMODE) + int is_valid; + int code; +#endif /* AST_DEVMODE */ + struct ast_get_global_var_args args = {}; struct ast_variable *i; @@ -119,6 +124,29 @@ static void stasis_http_get_global_var_cb( {} } stasis_http_get_global_var(headers, &args, response); +#if defined(AST_DEVMODE) + code = response->response_code; + + switch (code) { + case 500: /* Internal server error */ + is_valid = 1; + break; + default: + if (200 <= code && code <= 299) { + is_valid = ari_validate_variable( + response->message); + } else { + ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/variable\n", code); + is_valid = 0; + } + } + + if (!is_valid) { + ast_log(LOG_ERROR, "Response validation failed for /asterisk/variable\n"); + stasis_http_response_error(response, 500, + "Internal Server Error", "Response validation failed"); + } +#endif /* AST_DEVMODE */ } /*! * \brief Parameter parsing callback for /asterisk/variable. @@ -128,9 +156,14 @@ static void stasis_http_get_global_var_cb( * \param[out] response Response to the HTTP request. */ static void stasis_http_set_global_var_cb( - struct ast_variable *get_params, struct ast_variable *path_vars, - struct ast_variable *headers, struct stasis_http_response *response) + struct ast_variable *get_params, struct ast_variable *path_vars, + struct ast_variable *headers, struct stasis_http_response *response) { +#if defined(AST_DEVMODE) + int is_valid; + int code; +#endif /* AST_DEVMODE */ + struct ast_set_global_var_args args = {}; struct ast_variable *i; @@ -144,6 +177,29 @@ static void stasis_http_set_global_var_cb( {} } stasis_http_set_global_var(headers, &args, response); +#if defined(AST_DEVMODE) + code = response->response_code; + + switch (code) { + case 500: /* Internal server error */ + is_valid = 1; + break; + default: + if (200 <= code && code <= 299) { + is_valid = ari_validate_void( + response->message); + } else { + ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/variable\n", code); + is_valid = 0; + } + } + + if (!is_valid) { + ast_log(LOG_ERROR, "Response validation failed for /asterisk/variable\n"); + stasis_http_response_error(response, 500, + "Internal Server Error", "Response validation failed"); + } +#endif /* AST_DEVMODE */ } /*! \brief REST handler for /api-docs/asterisk.{format} */ diff --git a/res/res_stasis_http_channels.c b/res/res_stasis_http_channels.c index a3d2932a2..5c150dffb 100644 --- a/res/res_stasis_http_channels.c +++ b/res/res_stasis_http_channels.c @@ -818,9 +818,14 @@ static void stasis_http_record_channel_cb( * \param[out] response Response to the HTTP request. */ static void stasis_http_get_channel_var_cb( - struct ast_variable *get_params, struct ast_variable *path_vars, - struct ast_variable *headers, struct stasis_http_response *response) + struct ast_variable *get_params, struct ast_variable *path_vars, + struct ast_variable *headers, struct stasis_http_response *response) { +#if defined(AST_DEVMODE) + int is_valid; + int code; +#endif /* AST_DEVMODE */ + struct ast_get_channel_var_args args = {}; struct ast_variable *i; @@ -837,6 +842,31 @@ static void stasis_http_get_channel_var_cb( {} } stasis_http_get_channel_var(headers, &args, response); +#if defined(AST_DEVMODE) + code = response->response_code; + + switch (code) { + case 500: /* Internal server error */ + case 404: /* Channel not found */ + case 409: /* Channel not in a Stasis application */ + is_valid = 1; + break; + default: + if (200 <= code && code <= 299) { + is_valid = ari_validate_variable( + response->message); + } else { + ast_log(LOG_ERROR, "Invalid error response %d for /channels/{channelId}/variable\n", code); + is_valid = 0; + } + } + + if (!is_valid) { + ast_log(LOG_ERROR, "Response validation failed for /channels/{channelId}/variable\n"); + stasis_http_response_error(response, 500, + "Internal Server Error", "Response validation failed"); + } +#endif /* AST_DEVMODE */ } /*! * \brief Parameter parsing callback for /channels/{channelId}/variable. @@ -846,9 +876,14 @@ static void stasis_http_get_channel_var_cb( * \param[out] response Response to the HTTP request. */ static void stasis_http_set_channel_var_cb( - struct ast_variable *get_params, struct ast_variable *path_vars, - struct ast_variable *headers, struct stasis_http_response *response) + struct ast_variable *get_params, struct ast_variable *path_vars, + struct ast_variable *headers, struct stasis_http_response *response) { +#if defined(AST_DEVMODE) + int is_valid; + int code; +#endif /* AST_DEVMODE */ + struct ast_set_channel_var_args args = {}; struct ast_variable *i; @@ -868,6 +903,31 @@ static void stasis_http_set_channel_var_cb( {} } stasis_http_set_channel_var(headers, &args, response); +#if defined(AST_DEVMODE) + code = response->response_code; + + switch (code) { + case 500: /* Internal server error */ + case 404: /* Channel not found */ + case 409: /* Channel not in a Stasis application */ + is_valid = 1; + break; + default: + if (200 <= code && code <= 299) { + is_valid = ari_validate_void( + response->message); + } else { + ast_log(LOG_ERROR, "Invalid error response %d for /channels/{channelId}/variable\n", code); + is_valid = 0; + } + } + + if (!is_valid) { + ast_log(LOG_ERROR, "Response validation failed for /channels/{channelId}/variable\n"); + stasis_http_response_error(response, 500, + "Internal Server Error", "Response validation failed"); + } +#endif /* AST_DEVMODE */ } /*! \brief REST handler for /api-docs/channels.{format} */ diff --git a/res/stasis_http/ari_model_validators.c b/res/stasis_http/ari_model_validators.c index 14b5d6974..bf3c0e7d0 100644 --- a/res/stasis_http/ari_model_validators.c +++ b/res/stasis_http/ari_model_validators.c @@ -57,6 +57,44 @@ ari_validator ari_validate_asterisk_info_fn(void) return ari_validate_asterisk_info; } +int ari_validate_variable(struct ast_json *json) +{ + int res = 1; + struct ast_json_iter *iter; + int has_value = 0; + + for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) { + if (strcmp("value", ast_json_object_iter_key(iter)) == 0) { + int prop_is_valid; + has_value = 1; + prop_is_valid = ari_validate_string( + ast_json_object_iter_value(iter)); + if (!prop_is_valid) { + ast_log(LOG_ERROR, "ARI Variable field value failed validation\n"); + res = 0; + } + } else + { + ast_log(LOG_ERROR, + "ARI Variable has undocumented field %s\n", + ast_json_object_iter_key(iter)); + res = 0; + } + } + + if (!has_value) { + ast_log(LOG_ERROR, "ARI Variable missing required field value\n"); + res = 0; + } + + return res; +} + +ari_validator ari_validate_variable_fn(void) +{ + return ari_validate_variable; +} + int ari_validate_endpoint(struct ast_json *json) { int res = 1; diff --git a/res/stasis_http/ari_model_validators.h b/res/stasis_http/ari_model_validators.h index ee3d09308..2f6418657 100644 --- a/res/stasis_http/ari_model_validators.h +++ b/res/stasis_http/ari_model_validators.h @@ -161,6 +161,24 @@ int ari_validate_asterisk_info(struct ast_json *json); */ ari_validator ari_validate_asterisk_info_fn(void); +/*! + * \brief Validator for Variable. + * + * The value of a channel variable + * + * \param json JSON object to validate. + * \returns True (non-zero) if valid. + * \returns False (zero) if invalid. + */ +int ari_validate_variable(struct ast_json *json); + +/*! + * \brief Function pointer to ari_validate_variable(). + * + * See \ref ari_model_validators.h for more details. + */ +ari_validator ari_validate_variable_fn(void); + /*! * \brief Validator for Endpoint. * @@ -767,6 +785,8 @@ ari_validator ari_validate_stasis_start_fn(void); * JSON models * * AsteriskInfo + * Variable + * - value: string (required) * Endpoint * - channel_ids: List[string] (required) * - resource: string (required) -- cgit v1.2.3