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
This commit is contained in:
parent
2ed9ca813b
commit
00435bf390
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -75,6 +75,7 @@ struct _stat_node {
|
|||
struct _stats_tree {
|
||||
guint8* abbr;
|
||||
guint8* name;
|
||||
guint8* tapname;
|
||||
|
||||
/* is this realy needed? */
|
||||
char* filter;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue