summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-02-07 20:18:33 -0500
committerMichael Mann <mmann78@netscape.net>2017-02-08 14:24:42 +0000
commit89dfa6bdf4051bc0f7ae64925814d811a37c628a (patch)
tree68c6dfb2eb1f2b06ca858a8f06c9e313f5a72555
parent243c09fa06bf7646b577e2baf024106432ec1bd9 (diff)
downloadwireshark-89dfa6bdf4051bc0f7ae64925814d811a37c628a.tar.gz
Switch rtd and srt tables to use wmem_tree_t instead of (sorted) GSList.
Change-Id: I54fec10801eb8f359414f34bf705767964c9725e Reviewed-on: https://code.wireshark.org/review/20017 Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r--epan/epan.c1
-rw-r--r--epan/rtd_table.c41
-rw-r--r--epan/rtd_table.h3
-rw-r--r--epan/srt_table.c47
-rw-r--r--epan/srt_table.h7
-rw-r--r--ui/cli/tap-rtd.c7
-rw-r--r--ui/cli/tap-srt.c9
-rw-r--r--ui/cli/tshark-tap.h4
-rw-r--r--ui/gtk/response_time_delay_table.c5
-rw-r--r--ui/gtk/response_time_delay_table.h7
-rw-r--r--ui/gtk/service_response_time_table.c7
-rw-r--r--ui/gtk/service_response_time_table.h5
-rw-r--r--ui/qt/response_time_delay_dialog.cpp5
-rw-r--r--ui/qt/response_time_delay_dialog.h2
-rw-r--r--ui/qt/service_response_time_dialog.cpp5
-rw-r--r--ui/qt/service_response_time_dialog.h7
16 files changed, 58 insertions, 104 deletions
diff --git a/epan/epan.c b/epan/epan.c
index b79769b24e..06f78cfcfd 100644
--- a/epan/epan.c
+++ b/epan/epan.c
@@ -226,7 +226,6 @@ epan_cleanup(void)
stat_tap_table_cleanup();
follow_cleanup();
disabled_protos_cleanup();
- cleanup_srt_table();
stats_tree_cleanup();
#ifdef HAVE_LUA
wslua_cleanup();
diff --git a/epan/rtd_table.c b/epan/rtd_table.c
index d8cc80f3fe..595c616c33 100644
--- a/epan/rtd_table.c
+++ b/epan/rtd_table.c
@@ -66,16 +66,7 @@ const value_string* get_rtd_value_string(register_rtd_t* rtd)
return rtd->vs_type;
}
-static GSList *registered_rtd_tables = NULL;
-
-static gint
-insert_sorted_by_table_name(gconstpointer aparam, gconstpointer bparam)
-{
- const register_rtd_t *a = (const register_rtd_t *)aparam;
- const register_rtd_t *b = (const register_rtd_t *)bparam;
-
- return g_ascii_strcasecmp(proto_get_protocol_short_name(find_protocol_by_id(a->proto_id)), proto_get_protocol_short_name(find_protocol_by_id(b->proto_id)));
-}
+static wmem_tree_t *registered_rtd_tables = NULL;
void
register_rtd_table(const int proto_id, const char* tap_listener, guint num_tables, guint num_timestats, const value_string* vs_type,
@@ -84,7 +75,7 @@ register_rtd_table(const int proto_id, const char* tap_listener, guint num_table
register_rtd_t *table;
DISSECTOR_ASSERT(rtd_packet_func);
- table = g_new(register_rtd_t,1);
+ table = wmem_new(wmem_epan_scope(), register_rtd_t);
table->proto_id = proto_id;
if (tap_listener != NULL)
@@ -97,7 +88,10 @@ register_rtd_table(const int proto_id, const char* tap_listener, guint num_table
table->vs_type = vs_type;
table->filter_check = filter_check_cb;
- registered_rtd_tables = g_slist_insert_sorted(registered_rtd_tables, table, insert_sorted_by_table_name);
+ if (registered_rtd_tables == NULL)
+ registered_rtd_tables = wmem_tree_new(wmem_epan_scope());
+
+ wmem_tree_insert_string(registered_rtd_tables, wmem_strdup(wmem_epan_scope(), proto_get_protocol_filter_name(proto_id)), table, 0);
}
void free_rtd_table(rtd_stat_table* table, rtd_gui_free_cb gui_callback, void *callback_data)
@@ -130,26 +124,9 @@ void reset_rtd_table(rtd_stat_table* table, rtd_gui_reset_cb gui_callback, void
}
-static gint
-find_matching_rtd(gconstpointer arg1, gconstpointer arg2)
-{
- register_rtd_t *rtd = (register_rtd_t*)arg1;
- const gchar *name = (const gchar *)arg2;
-
- return strcmp(proto_get_protocol_filter_name(rtd->proto_id), name);
-}
-
register_rtd_t* get_rtd_table_by_name(const char* name)
{
- GSList *found_rtd;
-
- found_rtd = g_slist_find_custom(registered_rtd_tables,
- (gpointer)name, find_matching_rtd);
-
- if (found_rtd)
- return (register_rtd_t*)found_rtd->data;
-
- return NULL;
+ return (register_rtd_t*)wmem_tree_lookup_string(registered_rtd_tables, name, 0);
}
gchar* rtd_table_get_tap_string(register_rtd_t* rtd)
@@ -197,9 +174,9 @@ void rtd_table_dissector_init(register_rtd_t* rtd, rtd_stat_table* table, rtd_gu
gui_callback(table, callback_data);
}
-void rtd_table_iterate_tables(GFunc func, gpointer user_data)
+void rtd_table_iterate_tables(wmem_foreach_func func, gpointer user_data)
{
- g_slist_foreach(registered_rtd_tables, func, user_data);
+ wmem_tree_foreach(registered_rtd_tables, func, user_data);
}
/*
diff --git a/epan/rtd_table.h b/epan/rtd_table.h
index 5706326587..3385ccac98 100644
--- a/epan/rtd_table.h
+++ b/epan/rtd_table.h
@@ -27,6 +27,7 @@
#include "tap.h"
#include "timestats.h"
#include "value_string.h"
+#include "wmem/wmem.h"
#ifdef __cplusplus
extern "C" {
@@ -142,7 +143,7 @@ WS_DLL_PUBLIC void reset_rtd_table(rtd_stat_table* table, rtd_gui_reset_cb gui_c
* @param func action to be performed on all converation tables
* @param user_data any data needed to help perform function
*/
-WS_DLL_PUBLIC void rtd_table_iterate_tables(GFunc func, gpointer user_data);
+WS_DLL_PUBLIC void rtd_table_iterate_tables(wmem_foreach_func func, gpointer user_data);
/** Return filter used for register_tap_listener
*
diff --git a/epan/srt_table.c b/epan/srt_table.c
index f4da2811b1..c838ef7c1a 100644
--- a/epan/srt_table.c
+++ b/epan/srt_table.c
@@ -137,28 +137,11 @@ void reset_srt_table(GArray* srt_array, srt_gui_reset_cb gui_callback, void *cal
}
}
-static GSList *registered_srt_tables = NULL;
-
-static gint
-find_matching_srt(gconstpointer arg1, gconstpointer arg2)
-{
- register_srt_t *srt = (register_srt_t*)arg1;
- const gchar *name = (const gchar *)arg2;
-
- return strcmp(proto_get_protocol_filter_name(srt->proto_id), name);
-}
+static wmem_tree_t *registered_srt_tables = NULL;
register_srt_t* get_srt_table_by_name(const char* name)
{
- GSList *found_srt;
-
- found_srt = g_slist_find_custom(registered_srt_tables,
- (gpointer)name, find_matching_srt);
-
- if (found_srt)
- return (register_srt_t*)found_srt->data;
-
- return NULL;
+ return (register_srt_t*)wmem_tree_lookup_string(registered_srt_tables, name, 0);
}
gchar* srt_table_get_tap_string(register_srt_t* srt)
@@ -202,15 +185,6 @@ void srt_table_dissector_init(register_srt_t* srt, GArray* srt_array, srt_gui_in
srt->srt_init(srt, srt_array, gui_callback, callback_data);
}
-static gint
-insert_sorted_by_table_name(gconstpointer aparam, gconstpointer bparam)
-{
- const register_srt_t *a = (const register_srt_t *)aparam;
- const register_srt_t *b = (const register_srt_t *)bparam;
-
- return g_ascii_strcasecmp(proto_get_protocol_short_name(find_protocol_by_id(a->proto_id)), proto_get_protocol_short_name(find_protocol_by_id(b->proto_id)));
-}
-
void
register_srt_table(const int proto_id, const char* tap_listener, int max_tables, tap_packet_cb srt_packet_func, srt_init_cb init_cb, srt_param_handler_cb param_cb)
{
@@ -218,7 +192,7 @@ register_srt_table(const int proto_id, const char* tap_listener, int max_tables,
DISSECTOR_ASSERT(init_cb);
DISSECTOR_ASSERT(srt_packet_func);
- table = g_new(register_srt_t,1);
+ table = wmem_new(wmem_epan_scope(), register_srt_t);
table->proto_id = proto_id;
if (tap_listener != NULL)
@@ -231,12 +205,15 @@ register_srt_table(const int proto_id, const char* tap_listener, int max_tables,
table->param_cb = param_cb;
table->param_data = NULL;
- registered_srt_tables = g_slist_insert_sorted(registered_srt_tables, table, insert_sorted_by_table_name);
+ if (registered_srt_tables == NULL)
+ registered_srt_tables = wmem_tree_new(wmem_epan_scope());
+
+ wmem_tree_insert_string(registered_srt_tables, wmem_strdup(wmem_epan_scope(), proto_get_protocol_filter_name(proto_id)), table, 0);
}
-void srt_table_iterate_tables(GFunc func, gpointer user_data)
+void srt_table_iterate_tables(wmem_foreach_func func, gpointer user_data)
{
- g_slist_foreach(registered_srt_tables, func, user_data);
+ wmem_tree_foreach(registered_srt_tables, func, user_data);
}
srt_stat_table*
@@ -309,12 +286,6 @@ add_srt_table_data(srt_stat_table *rst, int indx, const nstime_t *req_time, pack
time_stat_update(&rp->stats, &delta, pinfo);
}
-void
-cleanup_srt_table(void)
-{
- g_slist_free_full(registered_srt_tables, g_free);
-}
-
/*
* Editor modelines
*
diff --git a/epan/srt_table.h b/epan/srt_table.h
index 9cd6e154ec..ac508fb759 100644
--- a/epan/srt_table.h
+++ b/epan/srt_table.h
@@ -25,6 +25,7 @@
#include "tap.h"
#include "timestats.h"
+#include "wmem/wmem.h"
#ifdef __cplusplus
extern "C" {
@@ -159,7 +160,7 @@ WS_DLL_PUBLIC void reset_srt_table(GArray* srt_array, srt_gui_reset_cb gui_callb
* @param func action to be performed on all converation tables
* @param user_data any data needed to help perform function
*/
-WS_DLL_PUBLIC void srt_table_iterate_tables(GFunc func, gpointer user_data);
+WS_DLL_PUBLIC void srt_table_iterate_tables(wmem_foreach_func func, gpointer user_data);
/** Return filter used for register_tap_listener
*
@@ -220,10 +221,6 @@ WS_DLL_PUBLIC void init_srt_table_row(srt_stat_table *rst, int proc_index, const
*/
WS_DLL_PUBLIC void add_srt_table_data(srt_stat_table *rst, int proc_index, const nstime_t *req_time, packet_info *pinfo);
-/** Clean internal structures
- */
-extern void cleanup_srt_table(void);
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/ui/cli/tap-rtd.c b/ui/cli/tap-rtd.c
index 2e43286b62..ee3c0a64e5 100644
--- a/ui/cli/tap-rtd.c
+++ b/ui/cli/tap-rtd.c
@@ -141,10 +141,10 @@ dissector_rtd_init(const char *opt_arg, void* userdata)
}
/* Set GUI fields for register_rtd list */
-void
-register_rtd_tables(gpointer data, gpointer user_data _U_)
+gboolean
+register_rtd_tables(const void *key _U_, void *value, void *userdata _U_)
{
- register_rtd_t *rtd = (register_rtd_t*)data;
+ register_rtd_t *rtd = (register_rtd_t*)value;
stat_tap_ui ui_info;
ui_info.group = REGISTER_STAT_GROUP_RESPONSE_TIME;
@@ -154,6 +154,7 @@ register_rtd_tables(gpointer data, gpointer user_data _U_)
ui_info.nparams = 0;
ui_info.params = NULL;
register_stat_tap_ui(&ui_info, rtd);
+ return FALSE;
}
/*
diff --git a/ui/cli/tap-srt.c b/ui/cli/tap-srt.c
index 32fde53594..11286c5dfb 100644
--- a/ui/cli/tap-srt.c
+++ b/ui/cli/tap-srt.c
@@ -161,17 +161,17 @@ dissector_srt_init(const char *opt_arg, void* userdata)
}
/* Set GUI fields for register_srt list */
-void
-register_srt_tables(gpointer data, gpointer user_data _U_)
+gboolean
+register_srt_tables(const void *key _U_, void *value, void *userdata _U_)
{
- register_srt_t *srt = (register_srt_t*)data;
+ register_srt_t *srt = (register_srt_t*)value;
const char* short_name = proto_get_protocol_short_name(find_protocol_by_id(get_srt_proto_id(srt)));
stat_tap_ui ui_info;
/* XXX - CAMEL dissector hasn't been converted over due seemingly different tap packet
handling functions. So let the existing TShark CAMEL tap keep its registration */
if (strcmp(short_name, "CAMEL") == 0)
- return;
+ return FALSE;
ui_info.group = REGISTER_STAT_GROUP_RESPONSE_TIME;
ui_info.title = NULL; /* construct this from the protocol info? */
@@ -180,6 +180,7 @@ register_srt_tables(gpointer data, gpointer user_data _U_)
ui_info.nparams = 0;
ui_info.params = NULL;
register_stat_tap_ui(&ui_info, srt);
+ return FALSE;
}
/*
diff --git a/ui/cli/tshark-tap.h b/ui/cli/tshark-tap.h
index d3f8d0179c..7dc2a98746 100644
--- a/ui/cli/tshark-tap.h
+++ b/ui/cli/tshark-tap.h
@@ -26,8 +26,8 @@
extern void init_iousers(struct register_ct* ct, const char *filter);
extern void init_hostlists(struct register_ct* ct, const char *filter);
-extern void register_srt_tables(gpointer data, gpointer user_data);
-extern void register_rtd_tables(gpointer data, gpointer user_data);
+extern gboolean register_srt_tables(const void *key, void *value, void *userdata);
+extern gboolean register_rtd_tables(const void *key, void *value, void *userdata);
extern void register_simple_stat_tables(gpointer data, gpointer user_data);
#endif /* __TSHARK_TAP_H__ */
diff --git a/ui/gtk/response_time_delay_table.c b/ui/gtk/response_time_delay_table.c
index 3ee0ffff22..e7d8b94ca4 100644
--- a/ui/gtk/response_time_delay_table.c
+++ b/ui/gtk/response_time_delay_table.c
@@ -362,9 +362,9 @@ static tap_param rtd_stat_params[] = {
{ PARAM_FILTER, "filter", "Filter", NULL, TRUE }
};
-void register_response_time_delay_tables(gpointer data, gpointer user_data _U_)
+gboolean register_response_time_delay_tables(const void *key _U_, void *value, void *userdata _U_)
{
- register_rtd_t* rtd = (register_rtd_t*)data;
+ register_rtd_t* rtd = (register_rtd_t*)value;
const char* short_name = proto_get_protocol_short_name(find_protocol_by_id(get_rtd_proto_id(rtd)));
tap_param_dlg* rtd_dlg;
@@ -380,6 +380,7 @@ void register_response_time_delay_tables(gpointer data, gpointer user_data _U_)
rtd_dlg->user_data = rtd; /* TODO: Actually use this */
register_param_stat(rtd_dlg, short_name, REGISTER_STAT_GROUP_RESPONSE_TIME);
+ return FALSE;
}
/*
diff --git a/ui/gtk/response_time_delay_table.h b/ui/gtk/response_time_delay_table.h
index 11cf0b328d..bd178796cd 100644
--- a/ui/gtk/response_time_delay_table.h
+++ b/ui/gtk/response_time_delay_table.h
@@ -34,9 +34,10 @@
/** Register function to register dissectors that support RTD for GTK.
*
- * @param data register_rtd_t* representing dissetor RTD table
- * @param user_data is unused
+ * @param key is unused
+ * @param value register_rtd_t* representing dissetor RTD table
+ * @param userdata is unused
*/
-void register_response_time_delay_tables(gpointer data, gpointer user_data);
+gboolean register_response_time_delay_tables(const void *key, void *value, void *userdata);
#endif /* __RESPONSE_TIME_DELAY_TABLE_H__ */
diff --git a/ui/gtk/service_response_time_table.c b/ui/gtk/service_response_time_table.c
index 31a083d35a..590c01a2c7 100644
--- a/ui/gtk/service_response_time_table.c
+++ b/ui/gtk/service_response_time_table.c
@@ -838,9 +838,9 @@ static tap_param scsi_stat_params[] = {
};
-void register_service_response_tables(gpointer data, gpointer user_data _U_)
+gboolean register_service_response_tables(const void *key _U_, void *value, void *userdata _U_)
{
- register_srt_t *srt = (register_srt_t*)data;
+ register_srt_t *srt = (register_srt_t*)value;
const char* short_name = proto_get_protocol_short_name(find_protocol_by_id(get_srt_proto_id(srt)));
tap_param_dlg* srt_dlg;
@@ -848,7 +848,7 @@ void register_service_response_tables(gpointer data, gpointer user_data _U_)
tap data. Let those specific dialogs register for themselves */
if ((strcmp(short_name, "RPC") == 0) ||
(strcmp(short_name, "DCERPC") == 0))
- return;
+ return FALSE;
srt_dlg = g_new(tap_param_dlg, 1);
@@ -869,6 +869,7 @@ void register_service_response_tables(gpointer data, gpointer user_data _U_)
}
register_param_stat(srt_dlg, short_name, REGISTER_STAT_GROUP_RESPONSE_TIME);
+ return FALSE;
}
diff --git a/ui/gtk/service_response_time_table.h b/ui/gtk/service_response_time_table.h
index c30ee72fec..7aeaf08b3b 100644
--- a/ui/gtk/service_response_time_table.h
+++ b/ui/gtk/service_response_time_table.h
@@ -95,9 +95,10 @@ void reset_table_data(srt_stat_table* rst, void* gui_data);
/** Register function to register dissectors that support SRT for GTK.
*
+ * @param key is unused
* @param data register_srt_t* representing dissetor SRT table
- * @param user_data is unused
+ * @param userdata is unused
*/
-void register_service_response_tables(gpointer data, gpointer user_data);
+gboolean register_service_response_tables(const void *key, void *value, void *userdata);
#endif /* __SERVICE_RESPONSE_TIME_TABLE_H__ */
diff --git a/ui/qt/response_time_delay_dialog.cpp b/ui/qt/response_time_delay_dialog.cpp
index 53a5d257d8..25f6deee78 100644
--- a/ui/qt/response_time_delay_dialog.cpp
+++ b/ui/qt/response_time_delay_dialog.cpp
@@ -48,9 +48,9 @@ rtd_init(const char *args, void*) {
}
}
-void register_response_time_delay_tables(gpointer data, gpointer)
+gboolean register_response_time_delay_tables(const void *, void *value, void*)
{
- register_rtd_t *rtd = (register_rtd_t*)data;
+ register_rtd_t *rtd = (register_rtd_t*)value;
const char* short_name = proto_get_protocol_short_name(find_protocol_by_id(get_rtd_proto_id(rtd)));
const char *cfg_abbr = rtd_table_get_tap_string(rtd);
@@ -61,6 +61,7 @@ void register_response_time_delay_tables(gpointer data, gpointer)
REGISTER_STAT_GROUP_RESPONSE_TIME,
rtd_init,
ResponseTimeDelayDialog::createRtdDialog);
+ return FALSE;
}
enum {
diff --git a/ui/qt/response_time_delay_dialog.h b/ui/qt/response_time_delay_dialog.h
index 0e5c6e56be..22d64027a2 100644
--- a/ui/qt/response_time_delay_dialog.h
+++ b/ui/qt/response_time_delay_dialog.h
@@ -60,6 +60,6 @@ private slots:
* @param data register_rtd_t* representing dissetor RTD table
* @param user_data is unused
*/
-void register_response_time_delay_tables(gpointer data, gpointer user_data);
+gboolean register_response_time_delay_tables(const void *key, void *value, void *userdata);
#endif // __RESPONSE_TIME_DELAY_DIALOG_H__
diff --git a/ui/qt/service_response_time_dialog.cpp b/ui/qt/service_response_time_dialog.cpp
index 0e89ef2044..6fbc279438 100644
--- a/ui/qt/service_response_time_dialog.cpp
+++ b/ui/qt/service_response_time_dialog.cpp
@@ -50,9 +50,9 @@ srt_init(const char *args, void*) {
}
}
-void register_service_response_tables(gpointer data, gpointer)
+gboolean register_service_response_tables(const void *, void *value, void*)
{
- register_srt_t *srt = (register_srt_t*)data;
+ register_srt_t *srt = (register_srt_t*)value;
const char* short_name = proto_get_protocol_short_name(find_protocol_by_id(get_srt_proto_id(srt)));
const char *cfg_abbr = srt_table_get_tap_string(srt);
tpdCreator tpd_creator = ServiceResponseTimeDialog::createSrtDialog;
@@ -74,6 +74,7 @@ void register_service_response_tables(gpointer data, gpointer)
REGISTER_STAT_GROUP_RESPONSE_TIME,
srt_init,
tpd_creator);
+ return FALSE;
}
enum {
diff --git a/ui/qt/service_response_time_dialog.h b/ui/qt/service_response_time_dialog.h
index b30a3e5e97..9722141d87 100644
--- a/ui/qt/service_response_time_dialog.h
+++ b/ui/qt/service_response_time_dialog.h
@@ -67,10 +67,11 @@ private slots:
/** Register function to register dissectors that support SRT.
*
- * @param data register_srt_t* representing dissetor SRT table
- * @param user_data is unused
+ * @param key is unused
+ * @param value register_srt_t* representing dissetor SRT table
+ * @param userdata is unused
*/
-void register_service_response_tables(gpointer data, gpointer user_data);
+gboolean register_service_response_tables(const void *key, void *value, void *userdata);
#endif // __SERVICE_RESPONSE_TIME_DIALOG_H__