aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/stats_tree.c51
-rw-r--r--epan/stats_tree.h15
-rw-r--r--epan/stats_tree_priv.h1
-rw-r--r--gtk/stats_tree_stat.c19
-rw-r--r--tap-stats_tree.c9
5 files changed, 84 insertions, 11 deletions
diff --git a/epan/stats_tree.c b/epan/stats_tree.c
index 1d67a04b62..85cdcd4aa5 100644
--- a/epan/stats_tree.c
+++ b/epan/stats_tree.c
@@ -88,7 +88,7 @@ extern void stat_branch_to_str(const stat_node* node, GString* s, guint indent)
for ( i = 0 ; i<(indent-1); i++) indentation[i] = ' ';
indentation[i] = '\0';
- g_string_sprintfa(s,"%s%s = %s (%s/s) (%s)\n",
+ g_string_sprintfa(s,"%s%s\t%s\t%s\t%s\n",
indentation,node->name,value,rate,percent);
if (node->children) {
@@ -121,6 +121,7 @@ static void free_stat_node( stat_node* node ) {
extern void free_stats_tree(stats_tree* st) {
stat_node* child;
+ g_free(st->tapname);
g_free(st->abbr);
g_free(st->filter);
@@ -175,7 +176,8 @@ extern void reinit_stats_tree(void* p) {
}
/* register a new stats_tree */
-extern void register_stats_tree(guint8* abbr,
+extern void register_stats_tree(guint8* tapname,
+ guint8* abbr,
guint8* name,
stat_tree_packet_cb packet,
stat_tree_init_cb init ) {
@@ -183,8 +185,9 @@ extern void register_stats_tree(guint8* abbr,
stats_tree* st = g_malloc( sizeof(stats_tree) );
/* at the very least the abbrev and the packet function should be given */
- g_assert( abbr && packet );
+ g_assert( tapname && abbr && packet );
+ st->tapname = g_strdup(tapname);
st->abbr = g_strdup(abbr);
st->name = name ? g_strdup(name) : g_strdup(abbr);
st->filter = NULL;
@@ -424,6 +427,10 @@ extern guint8* manip_stat_node(manip_node_mode mode, stats_tree* st, const guint
extern guint8* get_st_abbr(const guint8* optarg) {
guint i;
+
+ /* XXX: this fails when tethereal is given any options
+ after the -z */
+ g_assert(optarg != NULL);
for (i=0; optarg[i] && optarg[i] != ','; i++);
@@ -540,3 +547,41 @@ extern int tick_range(stats_tree* st,
return node->id;
}
+
+extern int create_pivot_node(stats_tree* st,
+ const gchar* name,
+ int parent_id) {
+ stat_node* node = new_stat_node(st,name,parent_id,TRUE,TRUE);
+
+ if (node)
+ return node->id;
+ else
+ return 0;
+}
+
+extern int create_pivot_node_with_parent_name(stats_tree* st,
+ const gchar* name,
+ const gchar* parent_name) {
+ int parent_id = get_parent_id_by_name(st,parent_name);
+ stat_node* node;
+
+ node = new_stat_node(st,name,parent_id,TRUE,TRUE);
+
+ if (node)
+ return node->id;
+ else
+ return 0;
+}
+
+extern int tick_pivot(stats_tree* st,
+ int pivot_id,
+ const gchar* pivot_value) {
+
+ stat_node* parent = g_ptr_array_index(st->parents,pivot_id);
+
+ parent->counter++;
+ manip_stat_node( MN_INCREASE, st, pivot_value, pivot_id, FALSE, 1);
+
+ return pivot_id;
+}
+
diff --git a/epan/stats_tree.h b/epan/stats_tree.h
index 9b62ee3213..dbeb7c287b 100644
--- a/epan/stats_tree.h
+++ b/epan/stats_tree.h
@@ -52,7 +52,8 @@ typedef void (*stat_tree_init_cb)(stats_tree*);
* packet: per packet callback
* init: tree initialization callback
*/
-extern void register_stats_tree(guint8* abbr,
+extern void register_stats_tree(guint8* tapname,
+ guint8* abbr,
guint8* name,
stat_tree_packet_cb packet,
stat_tree_init_cb init );
@@ -101,6 +102,18 @@ extern int tick_range_with_parent_name(stats_tree* st,
const gchar* parent_name,
int value_in_range);
+/* */
+extern int create_pivot_node(stats_tree* st,
+ const gchar* name,
+ int parent_id);
+
+extern int create_pivot_node_with_parent_name(stats_tree* st,
+ const gchar* name,
+ const gchar* parent_name);
+
+extern int tick_pivot(stats_tree* st,
+ int pivot_id,
+ const gchar* pivot_value);
/*
* manipulates the value of the node whose name is given
diff --git a/epan/stats_tree_priv.h b/epan/stats_tree_priv.h
index b3813d5194..3c0904bf93 100644
--- a/epan/stats_tree_priv.h
+++ b/epan/stats_tree_priv.h
@@ -75,6 +75,7 @@ struct _stat_node {
struct _stats_tree {
guint8* abbr;
guint8* name;
+ guint8* tapname;
/* is this realy needed? */
char* filter;
diff --git a/gtk/stats_tree_stat.c b/gtk/stats_tree_stat.c
index 34c0d894b6..3431990fb9 100644
--- a/gtk/stats_tree_stat.c
+++ b/gtk/stats_tree_stat.c
@@ -23,6 +23,15 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+/*
+ TODO
+
+ - at reinitialization I have one of these for every node in the tree
+ Gtk-CRITICAL **: file gtktreestore.c: line 1044 (gtk_tree_store_set): assertion `VALID_ITER (iter, tree_store)' failed
+
+ - GTK1
+*/
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -193,11 +202,13 @@ static void init_gtk_tree(char* optarg) {
} else {
g_error("no such stats_tree (%s) found in stats_tree registry",abbr);
}
+ g_free(abbr);
+
} else {
g_error("could not obtain stats_tree abbr from optarg");
}
- window_name = g_strdup_printf("%s_stat", st->abbr);
+ window_name = g_strdup_printf("%s Stats Tree", st->abbr);
st->pr->win = window_new_with_geom(GTK_WINDOW_TOPLEVEL,window_name,window_name);
g_free(window_name);
@@ -262,7 +273,7 @@ static void init_gtk_tree(char* optarg) {
gtk_container_add( GTK_CONTAINER(st->pr->win), scr_win);
#endif
- error_string = register_tap_listener( st->abbr,
+ error_string = register_tap_listener( st->tapname,
st,
st->filter,
/* reinit_stats_tree*/ NULL,
@@ -294,7 +305,7 @@ static void register_gtk_stats_tree_tap (gpointer k _U_, gpointer v, gpointer p
stats_tree* st = v;
guint8* s;
- s = g_strdup_printf("%s,stat",st->abbr);
+ s = g_strdup_printf("%s,tree",st->abbr);
register_ethereal_tap(s, init_gtk_tree);
g_free(s);
@@ -313,7 +324,7 @@ static void register_gtk_stats_tree_tap (gpointer k _U_, gpointer v, gpointer p
st->pr->stat_dlg = g_malloc(sizeof(tap_dfilter_dlg));
st->pr->stat_dlg->win_title = g_strdup_printf("%s Packet Counter",st->name);
- st->pr->stat_dlg->init_string = g_strdup_printf("%s,stat",st->abbr);
+ st->pr->stat_dlg->init_string = g_strdup_printf("%s,tree",st->abbr);
st->pr->stat_dlg->tap_init_cb = init_gtk_tree;
st->pr->stat_dlg->index = -1;
diff --git a/tap-stats_tree.c b/tap-stats_tree.c
index 8150260eb2..a09bf637b1 100644
--- a/tap-stats_tree.c
+++ b/tap-stats_tree.c
@@ -79,11 +79,14 @@ static void init_stats_tree(char *optarg) {
} else {
g_error("no such stats_tree (%s) found in stats_tree registry",abbr);
}
+
+ g_free(abbr);
+
} else {
- g_error("could not obtain stats_tree abbr from optarg");
+ g_error("could not obtain stats_tree abbr (%s) from optarg '%s'",abbr,optarg);
}
- error_string = register_tap_listener( st->abbr,
+ error_string = register_tap_listener( st->tapname,
st,
st->filter,
reset_stats_tree,
@@ -102,7 +105,7 @@ void register_stats_tree_tap (gpointer k _U_, gpointer v, gpointer p _U_) {
stats_tree* st = v;
st->pr = g_malloc(sizeof(tree_pres));
- st->pr->init_string = g_strdup_printf("%s,stat",st->abbr);
+ st->pr->init_string = g_strdup_printf("%s,tree",st->abbr);
register_ethereal_tap(st->pr->init_string, init_stats_tree);