Add the (still unfinished) tethereal side of the funnel.
authorlego <lego@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 24 Feb 2006 01:41:59 +0000 (01:41 +0000)
committerlego <lego@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 24 Feb 2006 01:41:59 +0000 (01:41 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@17396 f5534014-38df-0310-8fa8-9805f1628bb7

Makefile.common
tap-funnel.c [new file with mode: 0644]

index 1af16d74131558576fb2c715bb3a3c237cbbc2b6..eb21e630059aec39b88530a8fd3385e5a9fa2f7e 100644 (file)
@@ -96,6 +96,7 @@ TETHEREAL_TAP_SRC =   \
        tap-ansi_astat.c        \
        tap-bootpstat.c \
        tap-dcerpcstat.c        \
+       tap-funnel.c \
        tap-gsm_astat.c \
        tap-h225counter.c       \
        tap-h225rassrt.c        \
diff --git a/tap-funnel.c b/tap-funnel.c
new file mode 100644 (file)
index 0000000..96c9455
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ *  tap-funnel.c
+ *  
+ */
+
+
+#include <epan/funnel.h>
+#include <stdio.h>
+#include <epan/stat_cmd_args.h>
+
+
+struct _funnel_text_window_t {
+    gchar* title;
+    GString* text;
+};
+
+static GPtrArray* text_windows = NULL;
+
+static funnel_text_window_t* new_text_window(const gchar* title) {
+    funnel_text_window_t* tw = g_malloc(sizeof(funnel_text_window_t));
+    tw->title = g_strdup(title);
+    tw->text = g_string_new("");
+    
+    if (!text_windows)
+        text_windows = g_ptr_array_new();
+    
+    g_ptr_array_add(text_windows,tw);
+    
+    return tw;
+}
+
+static void text_window_clear(funnel_text_window_t*  tw) {
+    g_string_free(tw->text,TRUE);
+    tw->text = g_string_new("");    
+}
+
+static void text_window_append(funnel_text_window_t*  tw, const char *text ) {
+    g_string_append(tw->text,text);
+}
+
+static void text_window_set_text(funnel_text_window_t*  tw, const char* text) {
+    g_string_free(tw->text,TRUE);
+    tw->text = g_string_new(text);
+}
+
+static void text_window_prepend(funnel_text_window_t*  tw, const char *text) {
+    g_string_prepend(tw->text,text);    
+}
+
+static const gchar* text_window_get_text(funnel_text_window_t*  tw) {
+    return tw->text->str;
+}
+
+/* XXX: finish this */
+static void funnel_logger(const gchar *log_domain _U_,
+                          GLogLevelFlags log_level _U_,
+                          const gchar *message,
+                          gpointer user_data _U_) {
+    fputs(message,stderr);
+}
+
+
+
+static const funnel_ops_t funnel_ops = {
+    new_text_window,
+    text_window_set_text,
+    text_window_append,
+    text_window_prepend,
+    text_window_clear,
+    text_window_get_text,
+    NULL,
+    NULL,
+    /*...,*/
+    NULL,
+    funnel_logger
+};
+
+
+void initialize_funnel_ops(void) {
+    funnel_set_funnel_ops(&funnel_ops);
+}
+
+
+void funnel_dump_all_text_windows(void) {
+    guint i;
+    
+    if (!text_windows) return;
+    
+    for ( i = 0 ; i < text_windows->len; i++) {
+        funnel_text_window_t*  tw = g_ptr_array_index(text_windows,i);
+        printf("\n========================== %s "
+               "==========================\n%s\n",tw->title,tw->text->str);
+        
+        g_ptr_array_remove_index(text_windows,i);
+        g_free(tw->title);
+        g_string_free(tw->text,TRUE);
+        g_free(tw);        
+    }
+}
+
+#if 0
+
+GHashTable* menus = NULL;;
+typedef struct _menu_cb_t {
+    void (*callback)(gpointer);
+    void* callback_data;
+} menu_cb_t;
+
+
+static void  init_funnel_cmd(const char *optarg, void* data ) {
+    gchar** args = g_strsplit(optarg,",",0); 
+    gchar** arg;
+    menu_cb_t* mcb = data;
+    
+    for(arg = args; *arg ; arg++) {
+        g_strstrip(*arg);
+    }
+    
+    if (mcb->callback) {
+        mcb->callback(mcb->callback_data);
+    }
+    
+}
+
+static void register_menu_cb(const char *name,
+                             REGISTER_STAT_GROUP_E group _U_,
+                             void (*callback)(gpointer),
+                             gpointer callback_data,
+                             gboolean retap _U_) {
+    menu_cb_t* mcb = g_malloc(sizeof(menu_cb_t));
+    
+    mcb->callback = callback;
+    mcb->callback_data = callback_data;
+
+    if (!menus)
+        menus = g_hash_table_new(g_str_hash,g_str_equal);
+
+    g_hash_table_insert(menus,g_strdup(name),mcb);
+    
+    register_stat_cmd_arg(name,init_funnel_cmd,mcb);
+}
+
+void initialize_funnel_ops(void) {
+    funnel_set_funnel_ops(&funnel_ops);
+}
+
+#endif
+void
+register_tap_listener_gtkfunnel(void)
+{
+#if 0
+    funnel_register_all_menus(register_menu_cb);
+#endif
+}