diff --git a/epan/dissectors/packet-diameter.c b/epan/dissectors/packet-diameter.c index 0e18a85699..4697bc1e72 100644 --- a/epan/dissectors/packet-diameter.c +++ b/epan/dissectors/packet-diameter.c @@ -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); diff --git a/epan/packet.c b/epan/packet.c index 691fc95a11..adce4db166 100644 --- a/epan/packet.c +++ b/epan/packet.c @@ -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 diff --git a/epan/packet.h b/epan/packet.h index 79b07d2fbc..212b20c7d8 100644 --- a/epan/packet.h +++ b/epan/packet.h @@ -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,