Added in 6762: Consistent port range selection for dissectors
I think the trick might be "Converts a range string" so the range needs a "
(double quotes) wrapper.
The Wiki example (Using Lua to register protocols to more ports) could be rewritten as:
local tcp_port_table = DissectorTable.get("tcp.port")
local http_dissector = tcp_port_table:get_dissector(80)
tcp_port_table:add("4888-4891",http_dissector)
Search through the Wireshark source code for dissector_add_uint_range_with_preference
for other range examples.
epan/wslua/wslua_dissector.c:
/* Not a number, try as range */
const gchar* pattern = luaL_checkstring(L,WSLUA_ARG_DissectorTable_add_PATTERN);
range_t *range = NULL;
if (range_convert_str(NULL, &range, pattern, G_MAXUINT32) == CVT_NO_ERROR) {
dissector_add_uint_range(dt->name, range, handle);
epan/range.c:
/******************** Range Entry Parser *********************************/
/* Converts a range string to a fast comparable array of ranges.
* The parameter 'es' points to the string to be converted.
* The parameter 'max_value' specifies the maximum value in a
* range.
*
* This function allocates a range_t large enough to hold the number
* of ranges specified, and fills the array range->ranges containing
* low and high values with the number of ranges being range->nranges.
* After having called this function, the function value_is_in_range()
* determines whether a given number is within the range or not.
*
* In case of a single number, we make a range where low is equal to high.
* We take care on wrongly entered ranges; opposite order will be taken
* care of.
*
* The following syntax is accepted :
*
* 1-20,30-40 Range from 1 to 20, and packets 30 to 40
* -20,30 Range from 1 to 20, and packet 30
* 20,30,40- 20, 30, and the range from 40 to the end
* 20-10,30-25 Range from 10 to 20, and from 25 to 30
* - All values
*/