aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2005-02-24 22:02:31 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2005-02-24 22:02:31 +0000
commit00435bf3903ca63f3cc4185dffd2cc7d08c6b8c3 (patch)
tree6a7d408f0b018fbedabd2b8e7893535b769a536e /epan
parent2ed9ca813b9caa1797b4d57e3ee15ff9acd8aaf8 (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.c51
-rw-r--r--epan/stats_tree.h15
-rw-r--r--epan/stats_tree_priv.h1
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;