summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid M. Lee <dlee@digium.com>2013-07-10 13:50:48 +0000
committerDavid M. Lee <dlee@digium.com>2013-07-10 13:50:48 +0000
commita73394abb874221ab3ae23348b285b217c1ee120 (patch)
tree179d7d699e3f838dfd05b14452a48f049b844a65
parent0bfe2d4cc4dda5a4bcde039614336c104a88f8d3 (diff)
Corrected api-docs for channel variables
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393968 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--res/res_stasis_http_asterisk.c64
-rw-r--r--res/res_stasis_http_channels.c68
-rw-r--r--res/stasis_http/ari_model_validators.c38
-rw-r--r--res/stasis_http/ari_model_validators.h20
-rw-r--r--rest-api/api-docs/asterisk.json3
-rw-r--r--rest-api/api-docs/channels.json12
6 files changed, 185 insertions, 20 deletions
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
@@ -162,6 +162,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.
*
* An external device that may offer/accept calls to/from Asterisk.
@@ -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)
diff --git a/rest-api/api-docs/asterisk.json b/rest-api/api-docs/asterisk.json
index 8c404a075..8bc887485 100644
--- a/rest-api/api-docs/asterisk.json
+++ b/rest-api/api-docs/asterisk.json
@@ -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"
diff --git a/rest-api/api-docs/channels.json b/rest-api/api-docs/channels.json
index a97f22566..c442d8eb3 100644
--- a/rest-api/api-docs/channels.json
+++ b/rest-api/api-docs/channels.json
@@ -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"
- }
- }
}
}
}