From: Martin Mathieson
[obnox/wireshark/wip.git] / tap-funnel.c
1 /*
2  *  tap-funnel.c
3  *  
4  */
5
6
7 #include <epan/funnel.h>
8 #include <stdio.h>
9 #include <epan/stat_cmd_args.h>
10
11
12 struct _funnel_text_window_t {
13     gchar* title;
14     GString* text;
15 };
16
17 static GPtrArray* text_windows = NULL;
18
19 static funnel_text_window_t* new_text_window(const gchar* title) {
20     funnel_text_window_t* tw = g_malloc(sizeof(funnel_text_window_t));
21     tw->title = g_strdup(title);
22     tw->text = g_string_new("");
23     
24     if (!text_windows)
25         text_windows = g_ptr_array_new();
26     
27     g_ptr_array_add(text_windows,tw);
28     
29     return tw;
30 }
31
32 static void text_window_clear(funnel_text_window_t*  tw) {
33     g_string_free(tw->text,TRUE);
34     tw->text = g_string_new("");    
35 }
36
37 static void text_window_append(funnel_text_window_t*  tw, const char *text ) {
38     g_string_append(tw->text,text);
39 }
40
41 static void text_window_set_text(funnel_text_window_t*  tw, const char* text) {
42     g_string_free(tw->text,TRUE);
43     tw->text = g_string_new(text);
44 }
45
46 static void text_window_prepend(funnel_text_window_t*  tw, const char *text) {
47     g_string_prepend(tw->text,text);    
48 }
49
50 static const gchar* text_window_get_text(funnel_text_window_t*  tw) {
51     return tw->text->str;
52 }
53
54 /* XXX: finish this */
55 static void funnel_logger(const gchar *log_domain _U_,
56                           GLogLevelFlags log_level _U_,
57                           const gchar *message,
58                           gpointer user_data _U_) {
59     fputs(message,stderr);
60 }
61
62
63
64 static const funnel_ops_t funnel_ops = {
65     new_text_window,
66     text_window_set_text,
67     text_window_append,
68     text_window_prepend,
69     text_window_clear,
70     text_window_get_text,
71     NULL,
72     NULL,
73     NULL,
74         NULL,
75     /*...,*/
76     NULL,
77     funnel_logger,
78         NULL
79 };
80
81
82 void initialize_funnel_ops(void) {
83     funnel_set_funnel_ops(&funnel_ops);
84 }
85
86
87 void funnel_dump_all_text_windows(void) {
88     guint i;
89     
90     if (!text_windows) return;
91     
92     for ( i = 0 ; i < text_windows->len; i++) {
93         funnel_text_window_t*  tw = g_ptr_array_index(text_windows,i);
94         printf("\n========================== %s "
95                "==========================\n%s\n",tw->title,tw->text->str);
96         
97         g_ptr_array_remove_index(text_windows,i);
98         g_free(tw->title);
99         g_string_free(tw->text,TRUE);
100         g_free(tw);        
101     }
102 }
103
104 #if 0
105
106 GHashTable* menus = NULL;;
107 typedef struct _menu_cb_t {
108     void (*callback)(gpointer);
109     void* callback_data;
110 } menu_cb_t;
111
112
113 static void  init_funnel_cmd(const char *optarg, void* data ) {
114     gchar** args = g_strsplit(optarg,",",0); 
115     gchar** arg;
116     menu_cb_t* mcb = data;
117     
118     for(arg = args; *arg ; arg++) {
119         g_strstrip(*arg);
120     }
121     
122     if (mcb->callback) {
123         mcb->callback(mcb->callback_data);
124     }
125     
126 }
127
128 static void register_menu_cb(const char *name,
129                              REGISTER_STAT_GROUP_E group _U_,
130                              void (*callback)(gpointer),
131                              gpointer callback_data,
132                              gboolean retap _U_) {
133     menu_cb_t* mcb = g_malloc(sizeof(menu_cb_t));
134     
135     mcb->callback = callback;
136     mcb->callback_data = callback_data;
137
138     if (!menus)
139         menus = g_hash_table_new(g_str_hash,g_str_equal);
140
141     g_hash_table_insert(menus,g_strdup(name),mcb);
142     
143     register_stat_cmd_arg(name,init_funnel_cmd,mcb);
144 }
145
146 void initialize_funnel_ops(void) {
147     funnel_set_funnel_ops(&funnel_ops);
148 }
149
150 #endif
151 void
152 register_tap_listener_gtkfunnel(void)
153 {
154 #if 0
155     funnel_register_all_menus(register_menu_cb);
156 #endif
157 }