Simplify adding and deletetion of port ranges by adding new methods.

If no one has any objection I'll edit the deocumentation later.

svn path=/trunk/; revision=51517
This commit is contained in:
Anders Broman 2013-08-25 18:48:26 +00:00
parent b5900e53d9
commit d8e8f48636
3 changed files with 41 additions and 28 deletions

View File

@ -1700,30 +1700,6 @@ dictionary_load(void)
return 1;
}
static void
tcp_range_delete_callback(guint32 port)
{
dissector_delete_uint("tcp.port", port, diameter_tcp_handle);
}
static void
tcp_range_add_callback(guint32 port)
{
dissector_add_uint("tcp.port", port, diameter_tcp_handle);
}
static void
sctp_range_delete_callback(guint32 port)
{
dissector_delete_uint("sctp.port", port, diameter_sctp_handle);
}
static void
sctp_range_add_callback(guint32 port)
{
dissector_add_uint("sctp.port", port, diameter_sctp_handle);
}
/* registration with the filtering engine */
void proto_reg_handoff_diameter(void);
@ -1989,8 +1965,8 @@ proto_reg_handoff_diameter(void)
diameter_udp_port = g_diameter_udp_port;
Initialized=TRUE;
} else {
range_foreach(diameter_tcp_port_range, tcp_range_delete_callback);
range_foreach(diameter_sctp_port_range, sctp_range_delete_callback);
dissector_delete_uint_range("tcp.port", diameter_tcp_port_range, diameter_tcp_handle);
dissector_delete_uint_range("sctp.port", diameter_sctp_port_range, diameter_sctp_handle);
g_free(diameter_tcp_port_range);
g_free(diameter_sctp_port_range);
dissector_delete_uint("udp.port", diameter_udp_port, diameter_udp_handle);
@ -2004,8 +1980,8 @@ proto_reg_handoff_diameter(void)
/* set port for future deletes */
diameter_tcp_port_range = range_copy(global_diameter_tcp_port_range);
diameter_sctp_port_range = range_copy(global_diameter_sctp_port_range);
range_foreach(diameter_tcp_port_range, tcp_range_add_callback);
range_foreach(diameter_sctp_port_range, sctp_range_add_callback);
dissector_add_uint_range("tcp.port", diameter_tcp_port_range, diameter_tcp_handle);
dissector_add_uint_range("sctp.port", diameter_sctp_port_range, diameter_sctp_handle);
exported_pdu_tap = find_tap_id(EXPORT_PDU_TAP_NAME_LAYER_7);

View File

@ -834,6 +834,21 @@ dissector_add_uint(const char *name, const guint32 pattern, dissector_handle_t h
dissector_add_handle(name, handle);
}
void dissector_add_uint_range(const char *abbrev, range_t *range,
dissector_handle_t handle)
{
guint32 i, j;
if (range) {
for (i=0; i < range->nranges; i++) {
for (j = range->ranges[i].low; j <= range->ranges[i].high; j++)
dissector_add_uint(abbrev, j, handle);
}
}
}
/* Delete the entry for a dissector in a uint dissector table
with a particular pattern. */
@ -866,6 +881,19 @@ dissector_delete_uint(const char *name, const guint32 pattern,
}
}
void dissector_delete_uint_range(const char *abbrev, range_t *range,
dissector_handle_t handle)
{
guint32 i, j;
if (range) {
for (i=0; i < range->nranges; i++) {
for (j = range->ranges[i].low; j <= range->ranges[i].high; j++)
dissector_delete_uint(abbrev, j, handle);
}
}
}
/* Change the entry for a dissector in a uint dissector table
with a particular pattern to use a new dissector handle. */
void

View File

@ -38,6 +38,7 @@
#include "epan.h"
#include "tfs.h"
#include "ws_symbol_export.h"
#include "range.h"
#ifdef __cplusplus
extern "C" {
@ -174,11 +175,19 @@ WS_DLL_PUBLIC int get_dissector_table_base(const char *name);
WS_DLL_PUBLIC void dissector_add_uint(const char *abbrev, const guint32 pattern,
dissector_handle_t handle);
/* Add an range of entries to a uint dissector table. */
WS_DLL_PUBLIC void dissector_add_uint_range(const char *abbrev, range_t *range,
dissector_handle_t handle);
/* Delete the entry for a dissector in a uint dissector table
with a particular pattern. */
WS_DLL_PUBLIC void dissector_delete_uint(const char *name, const guint32 pattern,
dissector_handle_t handle);
/* Delete an range of entries from a uint dissector table. */
WS_DLL_PUBLIC void dissector_delete_uint_range(const char *abbrev, range_t *range,
dissector_handle_t handle);
/* Change the entry for a dissector in a uint dissector table
with a particular pattern to use a new dissector handle. */
WS_DLL_PUBLIC void dissector_change_uint(const char *abbrev, const guint32 pattern,