[asterisk-commits] dlee: branch dlee/ari-event-remodel r392099 - in /team/dlee/ari-event-remodel...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Jun 17 15:08:48 CDT 2013
Author: dlee
Date: Mon Jun 17 15:08:46 2013
New Revision: 392099
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=392099
Log:
Test validators for byte, int, and boolean
Added:
team/dlee/ari-event-remodel/res/res_ari_model.exports.in (with props)
Removed:
team/dlee/ari-event-remodel/include/asterisk/ari_model.h
Modified:
team/dlee/ari-event-remodel/res/res_ari_model.c
team/dlee/ari-event-remodel/res/stasis_http/ari_model.c
team/dlee/ari-event-remodel/rest-api-templates/ari_model.c.mustache
Modified: team/dlee/ari-event-remodel/res/res_ari_model.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel/res/res_ari_model.c?view=diff&rev=392099&r1=392098&r2=392099
==============================================================================
--- team/dlee/ari-event-remodel/res/res_ari_model.c (original)
+++ team/dlee/ari-event-remodel/res/res_ari_model.c Mon Jun 17 15:08:46 2013
@@ -31,7 +31,7 @@
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-#include "asterisk/ari_model.h"
+#include "stasis_http/ari_model.h"
#include "asterisk/logger.h"
#include "asterisk/module.h"
#include "asterisk/utils.h"
@@ -41,7 +41,18 @@
/* Regex to match date strings */
static regex_t date_regex;
-#define DATE_PATTERN "^$"
+/* Regex for YYYY-MM-DD */
+#define REGEX_YMD "[0-9]{4}-[0-9]{2}-[0-9]{2}"
+
+/* Regex for hh:mm(:ss(.s)); seconds and subseconds optional
+ * 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-59])"
+
+/* 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)
{
@@ -54,32 +65,52 @@
return 1;
}
-int ari_validate_byte(struct ast_json *json)
+static int check_range(intmax_t minval, intmax_t maxval, struct ast_json *json)
{
- int v;
+ intmax_t v;
if (!check_type(json, AST_JSON_INTEGER)) {
return 0;
}
v = ast_json_integer_get(json);
+
+ if (v < minval || maxval < v) {
+ ast_log(LOG_ERROR, "Value out of range. Expected %jd <= %jd <= %jd\n", minval, v, maxval);
+ return 0;
+ }
+ return 1;
+}
+
+int ari_validate_byte(struct ast_json *json)
+{
/* Java bytes are signed, which accounts for great fun for all */
- return -128 <= v && v <= 255;
+ return check_range(-128, 255, json);
}
int ari_validate_boolean(struct ast_json *json)
{
- return check_type(json, AST_JSON_TRUE) ||
- check_type(json, AST_JSON_FALSE);
+ enum ast_json_type actual = ast_json_typeof(json);
+ switch (actual) {
+ case AST_JSON_TRUE:
+ case AST_JSON_FALSE:
+ return 1;
+ default:
+ ast_log(LOG_ERROR, "Expected type boolean, was %s\n",
+ ast_json_typename(actual));
+ return 0;
+ }
}
int ari_validate_int(struct ast_json *json)
{
- return check_type(json, AST_JSON_INTEGER);
+ /* Swagger int's are 32-bit */
+ return check_range(-2147483648, 2147483647, json);
}
int ari_validate_long(struct ast_json *json)
{
+ /* All integral values are valid longs. No need for range check. */
return check_type(json, AST_JSON_INTEGER);
}
@@ -139,7 +170,7 @@
static int load_module(void)
{
int res;
- res = regcomp(&date_regex, DATE_PATTERN,
+ res = regcomp(&date_regex, ISO8601_PATTERN,
REG_EXTENDED | REG_ICASE | REG_NOSUB);
if (res != 0) {
@@ -154,7 +185,8 @@
return 0;
}
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER,
+AST_MODULE_INFO(ASTERISK_GPL_KEY,
+ AST_MODFLAG_LOAD_ORDER | AST_MODFLAG_GLOBAL_SYMBOLS,
"ARI Model validators",
.load = load_module,
.unload = unload_module,
Added: team/dlee/ari-event-remodel/res/res_ari_model.exports.in
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel/res/res_ari_model.exports.in?view=auto&rev=392099
==============================================================================
--- team/dlee/ari-event-remodel/res/res_ari_model.exports.in (added)
+++ team/dlee/ari-event-remodel/res/res_ari_model.exports.in Mon Jun 17 15:08:46 2013
@@ -1,0 +1,6 @@
+{
+ global:
+ LINKER_SYMBOL_PREFIXari_*;
+ local:
+ *;
+};
Propchange: team/dlee/ari-event-remodel/res/res_ari_model.exports.in
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/dlee/ari-event-remodel/res/res_ari_model.exports.in
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/dlee/ari-event-remodel/res/res_ari_model.exports.in
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: team/dlee/ari-event-remodel/res/stasis_http/ari_model.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel/res/stasis_http/ari_model.c?view=diff&rev=392099&r1=392098&r2=392099
==============================================================================
--- team/dlee/ari-event-remodel/res/stasis_http/ari_model.c (original)
+++ team/dlee/ari-event-remodel/res/stasis_http/ari_model.c Mon Jun 17 15:08:46 2013
@@ -33,7 +33,7 @@
#include "asterisk/logger.h"
#include "asterisk/module.h"
-#include "asterisk/ari_model.h"
+#include "ari_model.h"
int ari_validate_asterisk_info(struct ast_json *json)
{
Modified: team/dlee/ari-event-remodel/rest-api-templates/ari_model.c.mustache
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel/rest-api-templates/ari_model.c.mustache?view=diff&rev=392099&r1=392098&r2=392099
==============================================================================
--- team/dlee/ari-event-remodel/rest-api-templates/ari_model.c.mustache (original)
+++ team/dlee/ari-event-remodel/rest-api-templates/ari_model.c.mustache Mon Jun 17 15:08:46 2013
@@ -31,7 +31,7 @@
#include "asterisk/logger.h"
#include "asterisk/module.h"
-#include "asterisk/ari_model.h"
+#include "ari_model.h"
{{#apis}}
{{#api_declaration}}
{{#models}}
More information about the asterisk-commits
mailing list