diff options
-rw-r--r-- | epan/stats_tree.c | 20 | ||||
-rw-r--r-- | epan/stats_tree.h | 6 | ||||
-rw-r--r-- | epan/stats_tree_priv.h | 2 | ||||
-rw-r--r-- | plugins/stats_tree/http_stats_tree.c | 6 | ||||
-rw-r--r-- | plugins/stats_tree/pinfo_stats_tree.c | 8 |
5 files changed, 30 insertions, 12 deletions
diff --git a/epan/stats_tree.c b/epan/stats_tree.c index 22251d63cb..5bdafaf5ed 100644 --- a/epan/stats_tree.c +++ b/epan/stats_tree.c @@ -182,7 +182,10 @@ extern void stats_tree_free(stats_tree* st) { if (st->cfg->free_tree_pr) st->cfg->free_tree_pr(st); - + + if (st->cfg->cleanup) + st->cfg->cleanup(st); + g_free(st); } @@ -238,7 +241,8 @@ extern void stats_tree_register(guint8* tapname, guint8* abbr, guint8* name, stat_tree_packet_cb packet, - stat_tree_init_cb init ) { + stat_tree_init_cb init, + stat_tree_cleanup_cb cleanup) { stats_tree_cfg* cfg = g_malloc( sizeof(stats_tree_cfg) ); @@ -251,6 +255,7 @@ extern void stats_tree_register(guint8* tapname, cfg->packet = packet; cfg->init = init; + cfg->cleanup = cleanup; /* these have to be filled in by implementations */ cfg->setup_node_pr = NULL; @@ -356,7 +361,16 @@ extern void stats_tree_presentation(void (*registry_iterator)(gpointer,gpointer, void (*draw_tree)(stats_tree*), void (*reset_tree)(stats_tree*), void* data) { - struct _stats_tree_pres_cbs d = {setup_node_pr,free_node_pr,draw_node,reset_node,new_tree_pr,free_tree_pr,draw_tree,reset_tree}; + static struct _stats_tree_pres_cbs d; + + d.setup_node_pr = setup_node_pr; + d.new_tree_pr = new_tree_pr; + d.free_node_pr = free_node_pr; + d.free_tree_pr = free_tree_pr; + d.draw_node = draw_node; + d.draw_tree = draw_tree; + d.reset_node = reset_node; + d.reset_tree = reset_tree; if (registry) g_hash_table_foreach(registry,setup_tree_presentation,&d); diff --git a/epan/stats_tree.h b/epan/stats_tree.h index 557984b362..74869e836e 100644 --- a/epan/stats_tree.h +++ b/epan/stats_tree.h @@ -46,6 +46,9 @@ typedef int (*stat_tree_packet_cb)(stats_tree*, /* stats_tree initilaization callback */ typedef void (*stat_tree_init_cb)(stats_tree*); +/* stats_tree initilaization callback */ +typedef void (*stat_tree_cleanup_cb)(stats_tree*); + /* registers a new stats tree * abbr: protocol abbr * name: protocol name @@ -56,7 +59,8 @@ extern void stats_tree_register(guint8* tapname, guint8* abbr, guint8* name, stat_tree_packet_cb packet, - stat_tree_init_cb init ); + stat_tree_init_cb init, + stat_tree_cleanup_cb cleanup); extern int stats_tree_parent_id_by_name(stats_tree* st, const gchar* parent_name); diff --git a/epan/stats_tree_priv.h b/epan/stats_tree_priv.h index 0091302f4d..cbe40b30d6 100644 --- a/epan/stats_tree_priv.h +++ b/epan/stats_tree_priv.h @@ -115,7 +115,7 @@ struct _stats_tree_cfg { /* dissector defined callbacks */ stat_tree_packet_cb packet; stat_tree_init_cb init; - + stat_tree_cleanup_cb cleanup; /* * node presentation callbacks diff --git a/plugins/stats_tree/http_stats_tree.c b/plugins/stats_tree/http_stats_tree.c index 8f50453f25..694fe06824 100644 --- a/plugins/stats_tree/http_stats_tree.c +++ b/plugins/stats_tree/http_stats_tree.c @@ -256,8 +256,8 @@ static int http_stats_tree_packet(stats_tree* st, packet_info* pinfo _U_, epan_d /* register all http trees */ extern void register_http_stat_trees(void) { - stats_tree_register("http","http","HTTP/Packet Tree", http_stats_tree_packet, http_stats_tree_init ); - stats_tree_register("http","http_req","HTTP/Request Tree", http_req_stats_tree_packet, http_req_stats_tree_init ); - stats_tree_register("http","http_srv","HTTP/Server Tree",http_reqs_stats_tree_packet,http_reqs_stats_tree_init); + stats_tree_register("http","http","HTTP/Packet Tree", http_stats_tree_packet, http_stats_tree_init, NULL ); + stats_tree_register("http","http_req","HTTP/Request Tree", http_req_stats_tree_packet, http_req_stats_tree_init, NULL ); + stats_tree_register("http","http_srv","HTTP/Server Tree",http_reqs_stats_tree_packet,http_reqs_stats_tree_init, NULL ); } diff --git a/plugins/stats_tree/pinfo_stats_tree.c b/plugins/stats_tree/pinfo_stats_tree.c index a3cb17e70c..4a6a5570b0 100644 --- a/plugins/stats_tree/pinfo_stats_tree.c +++ b/plugins/stats_tree/pinfo_stats_tree.c @@ -140,9 +140,9 @@ extern int dsts_stats_tree_packet(stats_tree* st, packet_info* pinfo, epan_disse /* register all pinfo trees */ extern void register_pinfo_stat_trees(void) { - stats_tree_register("ip","ip_hosts",st_str_ip, ip_hosts_stats_tree_packet, ip_hosts_stats_tree_init ); - stats_tree_register("ip","ptype",st_str_ptype, ptype_stats_tree_packet, ptype_stats_tree_init ); - stats_tree_register("frame","plen",st_str_plen, plen_stats_tree_packet, plen_stats_tree_init ); - stats_tree_register("ip","dests",st_str_dsts, dsts_stats_tree_packet, dsts_stats_tree_init ); + stats_tree_register("ip","ip_hosts",st_str_ip, ip_hosts_stats_tree_packet, ip_hosts_stats_tree_init, NULL ); + stats_tree_register("ip","ptype",st_str_ptype, ptype_stats_tree_packet, ptype_stats_tree_init, NULL ); + stats_tree_register("frame","plen",st_str_plen, plen_stats_tree_packet, plen_stats_tree_init, NULL ); + stats_tree_register("ip","dests",st_str_dsts, dsts_stats_tree_packet, dsts_stats_tree_init, NULL ); } |