aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wslua
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2013-09-07 11:07:18 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2013-09-07 11:07:18 +0000
commita8638eec90bace9997e084bf4ab15f0485ac1106 (patch)
tree6e2ff3da21d6ad5d86672c7650286df6b7c2f1af /epan/wslua
parent452bfe4ce09e6b0ec769703f95057abd1283e6ff (diff)
Added support for integer range in DissectorTable_add and DissectorTable_remove.
This was requested in bug 6762. svn path=/trunk/; revision=51817
Diffstat (limited to 'epan/wslua')
-rw-r--r--epan/wslua/wslua_proto.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/epan/wslua/wslua_proto.c b/epan/wslua/wslua_proto.c
index 706b781649..61abf9fbb8 100644
--- a/epan/wslua/wslua_proto.c
+++ b/epan/wslua/wslua_proto.c
@@ -1758,7 +1758,7 @@ WSLUA_METHOD DissectorTable_add (lua_State *L) {
/*
Add a dissector to a table.
*/
-#define WSLUA_ARG_DissectorTable_add_PATTERN 2 /* The pattern to match (either an integer or a string depending on the table's type). */
+#define WSLUA_ARG_DissectorTable_add_PATTERN 2 /* The pattern to match (either an integer, a integer range or a string depending on the table's type). */
#define WSLUA_ARG_DissectorTable_add_DISSECTOR 3 /* The dissector to add (either an Proto or a Dissector). */
DissectorTable dt = checkDissectorTable(L,1);
@@ -1787,8 +1787,19 @@ WSLUA_METHOD DissectorTable_add (lua_State *L) {
dissector_add_string(dt->name, pattern,handle);
g_free (pattern);
} else if ( type == FT_UINT32 || type == FT_UINT16 || type == FT_UINT8 || type == FT_UINT24 ) {
- int port = luaL_checkint(L, WSLUA_ARG_DissectorTable_add_PATTERN);
- dissector_add_uint(dt->name, port, handle);
+ if (lua_isnumber(L, WSLUA_ARG_DissectorTable_add_PATTERN)) {
+ int port = luaL_checkint(L, WSLUA_ARG_DissectorTable_add_PATTERN);
+ dissector_add_uint(dt->name, port, handle);
+ } else {
+ /* Not a number, try as range */
+ gchar* pattern = g_strdup(luaL_checkstring(L,WSLUA_ARG_DissectorTable_add_PATTERN));
+ range_t *range;
+ if (range_convert_str(&range, pattern, G_MAXUINT32) == CVT_NO_ERROR)
+ dissector_add_uint_range(dt->name, range, handle);
+ else
+ WSLUA_ARG_ERROR(DissectorTable_add,PATTERN,"invalid integer or range");
+ g_free (pattern);
+ }
} else {
luaL_error(L,"Strange type %d for a DissectorTable",type);
}
@@ -1800,7 +1811,7 @@ WSLUA_METHOD DissectorTable_remove (lua_State *L) {
/*
Remove a dissector from a table
*/
-#define WSLUA_ARG_DissectorTable_remove_PATTERN 2 /* The pattern to match (either an integer or a string depending on the table's type). */
+#define WSLUA_ARG_DissectorTable_remove_PATTERN 2 /* The pattern to match (either an integer, a integer range or a string depending on the table's type). */
#define WSLUA_ARG_DissectorTable_remove_DISSECTOR 3 /* The dissector to remove (either an Proto or a Dissector). */
DissectorTable dt = checkDissectorTable(L,1);
ftenum_t type;
@@ -1825,8 +1836,19 @@ WSLUA_METHOD DissectorTable_remove (lua_State *L) {
dissector_delete_string(dt->name, pattern,handle);
g_free (pattern);
} else if ( type == FT_UINT32 || type == FT_UINT16 || type == FT_UINT8 || type == FT_UINT24 ) {
- int port = luaL_checkint(L, WSLUA_ARG_DissectorTable_remove_PATTERN);
- dissector_delete_uint(dt->name, port, handle);
+ if (lua_isnumber(L, WSLUA_ARG_DissectorTable_remove_PATTERN)) {
+ int port = luaL_checkint(L, WSLUA_ARG_DissectorTable_remove_PATTERN);
+ dissector_delete_uint(dt->name, port, handle);
+ } else {
+ /* Not a number, try as range */
+ gchar* pattern = g_strdup(luaL_checkstring(L,WSLUA_ARG_DissectorTable_remove_PATTERN));
+ range_t *range;
+ if (range_convert_str(&range, pattern, G_MAXUINT32) == CVT_NO_ERROR)
+ dissector_delete_uint_range(dt->name, range, handle);
+ else
+ WSLUA_ARG_ERROR(DissectorTable_remove,PATTERN,"invalid integer or range");
+ g_free (pattern);
+ }
}
return 0;