diff options
author | Luis Ontanon <luis.ontanon@gmail.com> | 2005-02-24 22:02:31 +0000 |
---|---|---|
committer | Luis Ontanon <luis.ontanon@gmail.com> | 2005-02-24 22:02:31 +0000 |
commit | 00435bf3903ca63f3cc4185dffd2cc7d08c6b8c3 (patch) | |
tree | 6a7d408f0b018fbedabd2b8e7893535b769a536e /epan | |
parent | 2ed9ca813b9caa1797b4d57e3ee15ff9acd8aaf8 (diff) |
Update to the stats_tree tapping API
- change the tap init_string to %s,tree instead of %s,stat
- change the registration key (it used to be tapname, that disallowed to register more than one tap per protocol)
- add a "pivot" node for convenience
svn path=/trunk/; revision=13502
Diffstat (limited to 'epan')
-rw-r--r-- | epan/stats_tree.c | 51 | ||||
-rw-r--r-- | epan/stats_tree.h | 15 | ||||
-rw-r--r-- | epan/stats_tree_priv.h | 1 |
3 files changed, 63 insertions, 4 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; |