aboutsummaryrefslogtreecommitdiffstats
path: root/epan/stats_tree.c
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2024-02-08 17:48:35 -0800
committerAndersBroman <a.broman58@gmail.com>2024-02-12 12:53:48 +0000
commit920d2774bf0294ec3345afee6e2e8e787b4dfbe6 (patch)
tree9d85ab9c49407da4459a92c9b7573cfcb19fc4b3 /epan/stats_tree.c
parenta90295135136a2287d6fd5ef8ed7e679deaa684c (diff)
stats_tree API updates
Add an opaque public type for stats_tree configurations. Get rid of stats_tree_register_with_group and add stats_tree_set_group. Add stats_tree_set_first_column_name. Convert some documentation to doxygen.
Diffstat (limited to 'epan/stats_tree.c')
-rw-r--r--epan/stats_tree.c68
1 files changed, 36 insertions, 32 deletions
diff --git a/epan/stats_tree.c b/epan/stats_tree.c
index 3569d06680..c6ac137408 100644
--- a/epan/stats_tree.c
+++ b/epan/stats_tree.c
@@ -255,21 +255,22 @@ stats_tree_reinit(void *p)
}
static void
-stats_tree_cfg_free(gpointer p)
+stats_tree_free_configuration(gpointer p)
{
stats_tree_cfg* cfg = (stats_tree_cfg*)p;
g_free(cfg->tapname);
g_free(cfg->abbr);
g_free(cfg->name);
+ g_free(cfg->first_column_name);
g_free(cfg);
}
/* register a new stats_tree */
-extern void
-stats_tree_register_with_group(const char *tapname, const char *abbr, const char *name,
+extern stats_tree_cfg *
+stats_tree_register(const char *tapname, const char *abbr, const char *name,
guint flags,
stat_tree_packet_cb packet, stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup, register_stat_group_t stat_group)
+ stat_tree_cleanup_cb cleanup)
{
stats_tree_cfg *cfg = g_new0(stats_tree_cfg, 1);
@@ -279,7 +280,7 @@ stats_tree_register_with_group(const char *tapname, const char *abbr, const char
cfg->tapname = g_strdup(tapname);
cfg->abbr = g_strdup(abbr);
cfg->name = name ? g_strdup(name) : g_strdup(abbr);
- cfg->stat_group = stat_group;
+ cfg->stat_group = REGISTER_PACKET_STAT_GROUP_UNSORTED;
cfg->packet = packet;
cfg->init = init;
@@ -288,39 +289,39 @@ stats_tree_register_with_group(const char *tapname, const char *abbr, const char
cfg->flags = flags&~ST_FLG_MASK;
cfg->st_flags = flags&ST_FLG_MASK;
- if (!registry) registry = g_hash_table_new_full(g_str_hash,g_str_equal,NULL,stats_tree_cfg_free);
+ if (!registry) registry = g_hash_table_new_full(g_str_hash,g_str_equal,NULL,stats_tree_free_configuration);
g_hash_table_insert(registry,cfg->abbr,cfg);
-}
-/* register a new stats_tree with default group REGISTER_PACKET_STAT_GROUP_UNSORTED */
-extern void
-stats_tree_register(const char *tapname, const char *abbr, const char *name,
- guint flags,
- stat_tree_packet_cb packet, stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup)
-{
- stats_tree_register_with_group(tapname, abbr, name,
- flags,
- packet, init,
- cleanup, REGISTER_PACKET_STAT_GROUP_UNSORTED);
+ return cfg;
}
/* register a new stat_tree with default group REGISTER_PACKET_STAT_GROUP_UNSORTED from a plugin */
-extern void
+extern stats_tree_cfg *
stats_tree_register_plugin(const char *tapname, const char *abbr, const char *name,
guint flags,
stat_tree_packet_cb packet, stat_tree_init_cb init,
stat_tree_cleanup_cb cleanup)
{
- stats_tree_cfg *cfg;
-
- stats_tree_register(tapname, abbr, name,
- flags,
- packet, init,
- cleanup);
- cfg = stats_tree_get_cfg_by_abbr(abbr);
+ stats_tree_cfg *cfg = stats_tree_register(tapname, abbr, name,
+ flags, packet, init, cleanup);
cfg->plugin = TRUE;
+
+ return cfg;
+}
+
+extern void
+stats_tree_set_group(stats_tree_cfg *st_config, register_stat_group_t stat_group) {
+ if (st_config) {
+ st_config->stat_group = stat_group;
+ }
+}
+
+extern void
+stats_tree_set_first_column_name(stats_tree_cfg *st_config, const char *column_name) {
+ if (st_config) {
+ st_config->first_column_name = g_strdup(column_name);
+ }
}
extern stats_tree*
@@ -1057,10 +1058,13 @@ stats_tree_is_default_sort_DESC (stats_tree *st)
}
extern const gchar*
-stats_tree_get_column_name (gint col_index)
+stats_tree_get_column_name (stats_tree_cfg *st_config, gint col_index)
{
switch (col_index) {
case COL_NAME:
+ if (st_config->first_column_name) {
+ return st_config->first_column_name;
+ }
return "Topic / Item";
case COL_COUNT:
return "Count";
@@ -1313,7 +1317,7 @@ stats_tree_format_as_str(const stats_tree* st, st_format_type format_type,
case ST_FORMAT_CSV:
s = g_string_new("\"level\",\"parent\",");
for (count = 0; count<st->num_columns; count++) {
- g_string_append_printf(s,"\"%s\",",stats_tree_get_column_name(count));
+ g_string_append_printf(s,"\"%s\",",stats_tree_get_column_name(st->cfg, count));
}
g_string_append (s,"\n");
break;
@@ -1334,10 +1338,10 @@ stats_tree_format_as_str(const stats_tree* st, st_format_type format_type,
g_string_append(s,separator);
g_string_append_printf(s,"\n%s:\n",st->cfg->name);
snprintf (fmt,sizeof(fmt),"%%-%us",maxnamelen);
- g_string_append_printf(s,fmt,stats_tree_get_column_name(0));
+ g_string_append_printf(s,fmt,stats_tree_get_column_name(st->cfg, 0));
for (count = 1; count<st->num_columns; count++) {
snprintf (fmt,sizeof(fmt)," %%-%us",stats_tree_get_column_size(count)+1);
- g_string_append_printf(s,fmt,stats_tree_get_column_name(count));
+ g_string_append_printf(s,fmt,stats_tree_get_column_name(st->cfg, count));
}
memset (separator, '-', sep_length);
g_string_append_printf(s,"\n%s\n",separator);
@@ -1414,7 +1418,7 @@ WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node,
for (count = 1; count<num_columns; count++) {
if (*values[count]) {
g_string_append_printf(s, fmt, "", indent?" ":"",
- stats_tree_get_column_name(count));
+ stats_tree_get_column_name(node->st->cfg, count));
g_string_append_printf(s, ": %s\n", values[count]);
}
}
@@ -1429,7 +1433,7 @@ WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node,
node->rng?" isrange=\"true\"":"");
g_free(itemname);
for (count = 1; count<num_columns; count++) {
- gchar *colname = g_strdup(stats_tree_get_column_name(count));
+ gchar *colname = g_strdup(stats_tree_get_column_name(node->st->cfg, count));
g_string_append_printf(s,"<%s>",clean_for_xml_tag(colname));
g_string_append_printf(s,"%s</%s>\n",values[count],colname);
g_free(colname);