[asterisk-commits] dlee: trunk r393968 - in /trunk: res/ res/stasis_http/ rest-api/api-docs/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Jul 10 08:50:55 CDT 2013
Author: dlee
Date: Wed Jul 10 08:50:48 2013
New Revision: 393968
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=393968
Log:
Corrected api-docs for channel variables
Modified:
trunk/res/res_stasis_http_asterisk.c
trunk/res/res_stasis_http_channels.c
trunk/res/stasis_http/ari_model_validators.c
trunk/res/stasis_http/ari_model_validators.h
trunk/rest-api/api-docs/asterisk.json
trunk/rest-api/api-docs/channels.json
Modified: trunk/res/res_stasis_http_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_stasis_http_asterisk.c?view=diff&rev=393968&r1=393967&r2=393968
==============================================================================
--- trunk/res/res_stasis_http_asterisk.c (original)
+++ trunk/res/res_stasis_http_asterisk.c Wed Jul 10 08:50:48 2013
@@ -106,9 +106,14 @@
* \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 @@
{}
}
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 @@
* \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 @@
{}
}
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} */
Modified: trunk/res/res_stasis_http_channels.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_stasis_http_channels.c?view=diff&rev=393968&r1=393967&r2=393968
==============================================================================
--- trunk/res/res_stasis_http_channels.c (original)
+++ trunk/res/res_stasis_http_channels.c Wed Jul 10 08:50:48 2013
@@ -818,9 +818,14 @@
* \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 @@
{}
}
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 @@
* \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 @@
{}
}
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} */
Modified: trunk/res/stasis_http/ari_model_validators.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/stasis_http/ari_model_validators.c?view=diff&rev=393968&r1=393967&r2=393968
==============================================================================
--- trunk/res/stasis_http/ari_model_validators.c (original)
+++ trunk/res/stasis_http/ari_model_validators.c Wed Jul 10 08:50:48 2013
@@ -57,6 +57,44 @@
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;
Modified: trunk/res/stasis_http/ari_model_validators.h
URL: http://svnview.digium.com/svn/asterisk/trunk/res/stasis_http/ari_model_validators.h?view=diff&rev=393968&r1=393967&r2=393968
==============================================================================
--- trunk/res/stasis_http/ari_model_validators.h (original)
+++ trunk/res/stasis_http/ari_model_validators.h Wed Jul 10 08:50:48 2013
@@ -162,6 +162,24 @@
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.
*
* An external device that may offer/accept calls to/from Asterisk.
@@ -767,6 +785,8 @@
* JSON models
*
* AsteriskInfo
+ * Variable
+ * - value: string (required)
* Endpoint
* - channel_ids: List[string] (required)
* - resource: string (required)
Modified: trunk/rest-api/api-docs/asterisk.json
URL: http://svnview.digium.com/svn/asterisk/trunk/rest-api/api-docs/asterisk.json?view=diff&rev=393968&r1=393967&r2=393968
==============================================================================
--- trunk/rest-api/api-docs/asterisk.json (original)
+++ trunk/rest-api/api-docs/asterisk.json Wed Jul 10 08:50:48 2013
@@ -92,8 +92,9 @@
},
"Variable": {
"id": "Variable",
+ "description": "The value of a channel variable",
"properties": {
- "variable": {
+ "value": {
"required": true,
"type": "string",
"description": "The value of the variable requested"
Modified: trunk/rest-api/api-docs/channels.json
URL: http://svnview.digium.com/svn/asterisk/trunk/rest-api/api-docs/channels.json?view=diff&rev=393968&r1=393967&r2=393968
==============================================================================
--- trunk/rest-api/api-docs/channels.json (original)
+++ trunk/rest-api/api-docs/channels.json Wed Jul 10 08:50:48 2013
@@ -654,7 +654,7 @@
"httpMethod": "GET",
"summary": "Get the value of a channel variable or function.",
"nickname": "getChannelVar",
- "responseClass": "ChannelVariable",
+ "responseClass": "Variable",
"parameters": [
{
"name": "channelId",
@@ -827,16 +827,6 @@
"description": "Timestamp when channel was created"
}
}
- },
- "Variable": {
- "id": "Variable",
- "properties": {
- "variable": {
- "required": true,
- "type": "string",
- "description": "The value of the variable requested"
- }
- }
}
}
}
More information about the asterisk-commits
mailing list