aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2013-08-25 18:48:26 +0000
committerAnders Broman <anders.broman@ericsson.com>2013-08-25 18:48:26 +0000
commitd8e8f48636c5f139210eefe259fa71a02f49c71f (patch)
tree448a9d162bce0075ca915258740376c048593b68 /epan
parentb5900e53d9eaf5defebf06cb2ed439e5cdeed110 (diff)
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
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-diameter.c32
-rw-r--r--epan/packet.c28
-rw-r--r--epan/packet.h9
3 files changed, 41 insertions, 28 deletions
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,