[asterisk-commits] dlee: branch dlee/ari-event-remodel2 r392360 - in /team/dlee/ari-event-remode...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Jun 20 14:53:19 CDT 2013
Author: dlee
Date: Thu Jun 20 14:53:17 2013
New Revision: 392360
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=392360
Log:
Validation fixes
Modified:
team/dlee/ari-event-remodel2/res/res_ari_model.c
team/dlee/ari-event-remodel2/res/res_stasis_http.c
team/dlee/ari-event-remodel2/res/stasis_http/ari_model.c
team/dlee/ari-event-remodel2/res/stasis_http/ari_model.h
team/dlee/ari-event-remodel2/rest-api-templates/ari_model.c.mustache
team/dlee/ari-event-remodel2/rest-api-templates/asterisk_processor.py
team/dlee/ari-event-remodel2/rest-api-templates/swagger_model.py
team/dlee/ari-event-remodel2/rest-api/api-docs/events.json
team/dlee/ari-event-remodel2/tests/test_ari_model.c
Modified: team/dlee/ari-event-remodel2/res/res_ari_model.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/res/res_ari_model.c?view=diff&rev=392360&r1=392359&r2=392360
==============================================================================
--- team/dlee/ari-event-remodel2/res/res_ari_model.c (original)
+++ team/dlee/ari-event-remodel2/res/res_ari_model.c Thu Jun 20 14:53:17 2013
@@ -48,15 +48,23 @@
* Handles the probably impossible case of a leap second, too */
#define REGEX_HMS "[0-2][0-9]:[0-5][0-9](:[0-6][0-9](.[0-9]+)?)?"
-/* Regex for timezone */
-#define REGEX_TZ "(Z|[-+][0-2][0-9]:[0-5][0-9])"
+/* Regex for timezone: (+|-)hh(:mm), with optional colon. */
+#define REGEX_TZ "(Z|[-+][0-2][0-9](:?[0-5][0-9])?)"
/* REGEX for ISO 8601, the time specifier optional */
#define ISO8601_PATTERN "^" REGEX_YMD "(T" REGEX_HMS REGEX_TZ ")?$"
static int check_type(struct ast_json *json, enum ast_json_type expected)
{
- enum ast_json_type actual = ast_json_typeof(json);
+ enum ast_json_type actual;
+
+ if (!json) {
+ ast_log(LOG_ERROR, "Expected type %s, was NULL\n",
+ ast_json_typename(expected));
+ return 0;
+ }
+
+ actual = ast_json_typeof(json);
if (expected != actual) {
ast_log(LOG_ERROR, "Expected type %s, was %s\n",
ast_json_typename(expected), ast_json_typename(actual));
Modified: team/dlee/ari-event-remodel2/res/res_stasis_http.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/res/res_stasis_http.c?view=diff&rev=392360&r1=392359&r2=392360
==============================================================================
--- team/dlee/ari-event-remodel2/res/res_stasis_http.c (original)
+++ team/dlee/ari-event-remodel2/res/res_stasis_http.c Thu Jun 20 14:53:17 2013
@@ -324,7 +324,7 @@
void stasis_http_response_no_content(struct stasis_http_response *response)
{
- response->message = NULL;
+ response->message = ast_json_null();
response->response_code = 204;
response->response_text = "No Content";
}
@@ -386,9 +386,7 @@
/* Regular OPTIONS response */
add_allow_header(handler, response);
- response->response_code = 204;
- response->response_text = "No Content";
- response->message = NULL;
+ stasis_http_response_no_content(response);
/* Parse CORS headers */
for (header = headers; header != NULL; header = header->next) {
@@ -844,11 +842,10 @@
return 0;
}
- /* Leaving message unset is only allowed for 204 (No Content).
- * If you explicitly want to have no content for a different return
+ /* If you explicitly want to have no content for a different return
* code, set message to ast_json_null().
*/
- ast_assert(response.response_code == 204 || response.message != NULL);
+ ast_assert(response.message != NULL);
ast_assert(response.response_code > 0);
ast_str_append(&response_headers, 0, "%s", ast_str_buffer(response.headers));
Modified: team/dlee/ari-event-remodel2/res/stasis_http/ari_model.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/res/stasis_http/ari_model.c?view=diff&rev=392360&r1=392359&r2=392360
==============================================================================
--- team/dlee/ari-event-remodel2/res/stasis_http/ari_model.c (original)
+++ team/dlee/ari-event-remodel2/res/stasis_http/ari_model.c Thu Jun 20 14:53:17 2013
@@ -788,6 +788,7 @@
int res = 1;
struct ast_json_iter *iter;
int has_application = 0;
+ int has_type = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
@@ -797,6 +798,25 @@
ast_json_object_iter_value(iter));
if (!prop_res) {
ast_log(LOG_ERROR, "ARI ApplicationReplaced field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ApplicationReplaced field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ApplicationReplaced field type failed validation\n");
res = 0;
}
} else
@@ -812,6 +832,10 @@
ast_log(LOG_ERROR, "ARI ApplicationReplaced missing required field application\n");
res = 0;
}
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ApplicationReplaced missing required field type\n");
+ res = 0;
+ }
return res;
}
@@ -820,9 +844,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_bridge = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeCreated field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeCreated field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeCreated field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_bridge = 1;
@@ -841,6 +896,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI BridgeCreated missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI BridgeCreated missing required field type\n");
+ res = 0;
+ }
if (!has_bridge) {
ast_log(LOG_ERROR, "ARI BridgeCreated missing required field bridge\n");
res = 0;
@@ -853,9 +916,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_bridge = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeDestroyed field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeDestroyed field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeDestroyed field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_bridge = 1;
@@ -874,6 +968,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI BridgeDestroyed missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI BridgeDestroyed missing required field type\n");
+ res = 0;
+ }
if (!has_bridge) {
ast_log(LOG_ERROR, "ARI BridgeDestroyed missing required field bridge\n");
res = 0;
@@ -886,10 +988,41 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_bridge = 0;
int has_bridge_from = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeMerged field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeMerged field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI BridgeMerged field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_bridge = 1;
@@ -918,6 +1051,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI BridgeMerged missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI BridgeMerged missing required field type\n");
+ res = 0;
+ }
if (!has_bridge) {
ast_log(LOG_ERROR, "ARI BridgeMerged missing required field bridge\n");
res = 0;
@@ -934,11 +1075,42 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_caller_presentation = 0;
int has_caller_presentation_txt = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelCallerId field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelCallerId field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelCallerId field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("caller_presentation", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_caller_presentation = 1;
@@ -977,6 +1149,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field type\n");
+ res = 0;
+ }
if (!has_caller_presentation) {
ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field caller_presentation\n");
res = 0;
@@ -997,9 +1177,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelCreated field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelCreated field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelCreated field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_channel = 1;
@@ -1018,6 +1229,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelCreated missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelCreated missing required field type\n");
+ res = 0;
+ }
if (!has_channel) {
ast_log(LOG_ERROR, "ARI ChannelCreated missing required field channel\n");
res = 0;
@@ -1030,11 +1249,42 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_cause = 0;
int has_cause_txt = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDestroyed field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDestroyed field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDestroyed field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("cause", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_cause = 1;
@@ -1073,6 +1323,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field type\n");
+ res = 0;
+ }
if (!has_cause) {
ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field cause\n");
res = 0;
@@ -1093,9 +1351,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDialplan field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDialplan field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDialplan field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_channel = 1;
@@ -1114,6 +1403,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field type\n");
+ res = 0;
+ }
if (!has_channel) {
ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field channel\n");
res = 0;
@@ -1126,11 +1423,42 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_channel = 0;
int has_digit = 0;
int has_duration_ms = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_channel = 1;
@@ -1169,6 +1497,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field type\n");
+ res = 0;
+ }
if (!has_channel) {
ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field channel\n");
res = 0;
@@ -1189,9 +1525,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_bridge = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_bridge = 1;
@@ -1219,6 +1586,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelEnteredBridge missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelEnteredBridge missing required field type\n");
+ res = 0;
+ }
if (!has_bridge) {
ast_log(LOG_ERROR, "ARI ChannelEnteredBridge missing required field bridge\n");
res = 0;
@@ -1231,9 +1606,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelHangupRequest field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelHangupRequest field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelHangupRequest field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("cause", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
prop_res = ari_validate_int(
@@ -1270,6 +1676,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelHangupRequest missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelHangupRequest missing required field type\n");
+ res = 0;
+ }
if (!has_channel) {
ast_log(LOG_ERROR, "ARI ChannelHangupRequest missing required field channel\n");
res = 0;
@@ -1282,10 +1696,41 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_bridge = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelLeftBridge field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelLeftBridge field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelLeftBridge field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_bridge = 1;
@@ -1314,6 +1759,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelLeftBridge missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelLeftBridge missing required field type\n");
+ res = 0;
+ }
if (!has_bridge) {
ast_log(LOG_ERROR, "ARI ChannelLeftBridge missing required field bridge\n");
res = 0;
@@ -1330,9 +1783,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelStateChange field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelStateChange field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelStateChange field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_channel = 1;
@@ -1351,6 +1835,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelStateChange missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelStateChange missing required field type\n");
+ res = 0;
+ }
if (!has_channel) {
ast_log(LOG_ERROR, "ARI ChannelStateChange missing required field channel\n");
res = 0;
@@ -1363,10 +1855,41 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_channel = 0;
int has_eventname = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelUserevent field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelUserevent field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelUserevent field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_channel = 1;
@@ -1395,6 +1918,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelUserevent missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelUserevent missing required field type\n");
+ res = 0;
+ }
if (!has_channel) {
ast_log(LOG_ERROR, "ARI ChannelUserevent missing required field channel\n");
res = 0;
@@ -1411,10 +1942,41 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_value = 0;
int has_variable = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelVarset field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelVarset field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI ChannelVarset field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
prop_res = ari_validate_channel(
@@ -1452,6 +2014,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI ChannelVarset missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI ChannelVarset missing required field type\n");
+ res = 0;
+ }
if (!has_value) {
ast_log(LOG_ERROR, "ARI ChannelVarset missing required field value\n");
res = 0;
@@ -1469,6 +2039,79 @@
int res = 1;
struct ast_json_iter *iter;
int has_application = 0;
+ int has_type = 0;
+ const char *discriminator;
+
+ discriminator = ast_json_string_get(ast_json_object_get(json, "type"));
+ if (!discriminator) {
+ ast_log(LOG_ERROR, "ARI Event missing required field type");
+ return 0;
+ }
+
+ if (strcmp("Event", discriminator) == 0) {
+ /* Self type; fall through */
+ } else
+ if (strcmp("ApplicationReplaced", discriminator) == 0) {
+ return ari_validate_application_replaced(json);
+ } else
+ if (strcmp("BridgeCreated", discriminator) == 0) {
+ return ari_validate_bridge_created(json);
+ } else
+ if (strcmp("BridgeDestroyed", discriminator) == 0) {
+ return ari_validate_bridge_destroyed(json);
+ } else
+ if (strcmp("BridgeMerged", discriminator) == 0) {
+ return ari_validate_bridge_merged(json);
+ } else
+ if (strcmp("ChannelCallerId", discriminator) == 0) {
+ return ari_validate_channel_caller_id(json);
+ } else
+ if (strcmp("ChannelCreated", discriminator) == 0) {
+ return ari_validate_channel_created(json);
+ } else
+ if (strcmp("ChannelDestroyed", discriminator) == 0) {
+ return ari_validate_channel_destroyed(json);
+ } else
+ if (strcmp("ChannelDialplan", discriminator) == 0) {
+ return ari_validate_channel_dialplan(json);
+ } else
+ if (strcmp("ChannelDtmfReceived", discriminator) == 0) {
+ return ari_validate_channel_dtmf_received(json);
+ } else
+ if (strcmp("ChannelEnteredBridge", discriminator) == 0) {
+ return ari_validate_channel_entered_bridge(json);
+ } else
+ if (strcmp("ChannelHangupRequest", discriminator) == 0) {
+ return ari_validate_channel_hangup_request(json);
+ } else
+ if (strcmp("ChannelLeftBridge", discriminator) == 0) {
+ return ari_validate_channel_left_bridge(json);
+ } else
+ if (strcmp("ChannelStateChange", discriminator) == 0) {
+ return ari_validate_channel_state_change(json);
+ } else
+ if (strcmp("ChannelUserevent", discriminator) == 0) {
+ return ari_validate_channel_userevent(json);
+ } else
+ if (strcmp("ChannelVarset", discriminator) == 0) {
+ return ari_validate_channel_varset(json);
+ } else
+ if (strcmp("PlaybackFinished", discriminator) == 0) {
+ return ari_validate_playback_finished(json);
+ } else
+ if (strcmp("PlaybackStarted", discriminator) == 0) {
+ return ari_validate_playback_started(json);
+ } else
+ if (strcmp("StasisEnd", discriminator) == 0) {
+ return ari_validate_stasis_end(json);
+ } else
+ if (strcmp("StasisStart", discriminator) == 0) {
+ return ari_validate_stasis_start(json);
+ } else
+ {
+ ast_log(LOG_ERROR, "ARI Event has undocumented subtype %s\n",
+ discriminator);
+ }
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
@@ -1492,6 +2135,7 @@
} else
if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
+ has_type = 1;
prop_res = ari_validate_string(
ast_json_object_iter_value(iter));
if (!prop_res) {
@@ -1511,6 +2155,10 @@
ast_log(LOG_ERROR, "ARI Event missing required field application\n");
res = 0;
}
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI Event missing required field type\n");
+ res = 0;
+ }
return res;
}
@@ -1519,9 +2167,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_playback = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI PlaybackFinished field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI PlaybackFinished field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI PlaybackFinished field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("playback", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_playback = 1;
@@ -1540,6 +2219,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI PlaybackFinished missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI PlaybackFinished missing required field type\n");
+ res = 0;
+ }
if (!has_playback) {
ast_log(LOG_ERROR, "ARI PlaybackFinished missing required field playback\n");
res = 0;
@@ -1552,9 +2239,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_playback = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI PlaybackStarted field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI PlaybackStarted field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI PlaybackStarted field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("playback", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_playback = 1;
@@ -1573,6 +2291,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI PlaybackStarted missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI PlaybackStarted missing required field type\n");
+ res = 0;
+ }
if (!has_playback) {
ast_log(LOG_ERROR, "ARI PlaybackStarted missing required field playback\n");
res = 0;
@@ -1585,9 +2311,40 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI StasisEnd field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI StasisEnd field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI StasisEnd field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_channel = 1;
@@ -1606,6 +2363,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI StasisEnd missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI StasisEnd missing required field type\n");
+ res = 0;
+ }
if (!has_channel) {
ast_log(LOG_ERROR, "ARI StasisEnd missing required field channel\n");
res = 0;
@@ -1618,10 +2383,41 @@
{
int res = 1;
struct ast_json_iter *iter;
+ int has_application = 0;
+ int has_type = 0;
int has_args = 0;
int has_channel = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+ if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_application = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI StasisStart field application failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ prop_res = ari_validate_date(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI StasisStart field timestamp failed validation\n");
+ res = 0;
+ }
+ } else
+ if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
+ int prop_res;
+ has_type = 1;
+ prop_res = ari_validate_string(
+ ast_json_object_iter_value(iter));
+ if (!prop_res) {
+ ast_log(LOG_ERROR, "ARI StasisStart field type failed validation\n");
+ res = 0;
+ }
+ } else
if (strcmp("args", ast_json_object_iter_key(iter)) == 0) {
int prop_res;
has_args = 1;
@@ -1651,6 +2447,14 @@
}
}
+ if (!has_application) {
+ ast_log(LOG_ERROR, "ARI StasisStart missing required field application\n");
+ res = 0;
+ }
+ if (!has_type) {
+ ast_log(LOG_ERROR, "ARI StasisStart missing required field type\n");
+ res = 0;
+ }
if (!has_args) {
ast_log(LOG_ERROR, "ARI StasisStart missing required field args\n");
res = 0;
Modified: team/dlee/ari-event-remodel2/res/stasis_http/ari_model.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/res/stasis_http/ari_model.h?view=diff&rev=392360&r1=392359&r2=392360
==============================================================================
--- team/dlee/ari-event-remodel2/res/stasis_http/ari_model.h (original)
+++ team/dlee/ari-event-remodel2/res/stasis_http/ari_model.h Thu Jun 20 14:53:17 2013
@@ -532,59 +532,115 @@
* - target_uri: string (required)
* ApplicationReplaced
* - application: string (required)
+ * - timestamp: Date
+ * - type: string (required)
* BridgeCreated
+ * - application: string (required)
+ * - timestamp: Date
+ * - type: string (required)
* - bridge: Bridge (required)
* BridgeDestroyed
+ * - application: string (required)
+ * - timestamp: Date
+ * - type: string (required)
* - bridge: Bridge (required)
* BridgeMerged
+ * - application: string (required)
+ * - timestamp: Date
+ * - type: string (required)
* - bridge: Bridge (required)
* - bridge_from: Bridge (required)
* ChannelCallerId
+ * - application: string (required)
+ * - timestamp: Date
+ * - type: string (required)
* - caller_presentation: int (required)
* - caller_presentation_txt: string (required)
* - channel: Channel (required)
[... 328 lines stripped ...]
More information about the asterisk-commits
mailing list