[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