Add another DL CRC error - Duplicate NonZero RV.
[obnox/wireshark/wip.git] / gtk / h225_counter.c
index 91cfe19b4bed2424c806dd6bc49e2691ad250164..68eb5891d0f7e6b23db9bea605484ef59e877962 100644 (file)
 #include <epan/packet_info.h>
 #include <epan/epan.h>
 #include <epan/value_string.h>
-
 #include <epan/tap.h>
-#include "../register.h"
 #include <epan/dissectors/packet-h225.h>
-#include "gui_stat_util.h"
-#include "compat_macros.h"
+
 #include "../simple_dialog.h"
-#include "dlg_utils.h"
 #include "../file.h"
-#include "../globals.h"
 #include "../stat_menu.h"
-#include "../tap_dfilter_dlg.h"
-#include "gui_utils.h"
 
+#include "gtk/gui_stat_util.h"
+#include "gtk/dlg_utils.h"
+#include "gtk/tap_param_dlg.h"
+#include "gtk/gui_utils.h"
+#include "gtk/main.h"
+
+#include "gtk/old-gtk-compat.h"
 
 static void gtk_h225counter_init(const char *optarg, void *userdata);
 
-static tap_dfilter_dlg h225_counter_dlg = {
+static tap_param h225_counter_params[] = {
+       { PARAM_FILTER, "Filter", NULL }
+};
+
+static tap_param_dlg h225_counter_dlg = {
        "H.225 Messages and Message Reasons",
        "h225,counter",
        gtk_h225counter_init,
-       -1
+       -1,
+       G_N_ELEMENTS(h225_counter_params),
+       h225_counter_params
 };
 
 /* following values represent the size of their valuestring arrays */
@@ -88,7 +94,7 @@ typedef struct _h225counter_t {
        GtkWidget *vbox;
        char *filter;
        GtkWidget *scrolled_window;
-       GtkCList *table;
+       GtkTreeView *table;
        guint32 ras_msg[RAS_MSG_TYPES + 1];
         guint32 cs_msg[CS_MSG_TYPES + 1];
         guint32 grj_reason[GRJ_REASONS + 1];
@@ -289,7 +295,6 @@ h225counter_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, c
 
        default:
                return 0;
-               break;
        }
 
        return 1;
@@ -300,132 +305,141 @@ h225counter_draw(void *phs)
 {
        h225counter_t *hs=(h225counter_t *)phs;
        int i,j;
-       char *str[2];
+       char str[256];
+       GtkListStore *store;
+       GtkTreeIter iter;
 
-       for(i=0;i<2;i++) {
-               str[i]=g_malloc(sizeof(char[256]));
-       }
        /* Now print Message and Reason Counter Table */
        /* clear list before printing */
-       gtk_clist_clear(hs->table);
+       store = GTK_LIST_STORE(gtk_tree_view_get_model(hs->table));
+       gtk_list_store_clear(store);
 
        for(i=0;i<=RAS_MSG_TYPES;i++) {
                if(hs->ras_msg[i]!=0) {
-                       g_snprintf(str[0], sizeof(char[256]), 
-                "%s", val_to_str(i,h225_RasMessage_vals,"unknown ras-messages  "));
-                       g_snprintf(str[1], sizeof(char[256]),
-                "%d", hs->ras_msg[i]);
-                       gtk_clist_append(hs->table, str);
+                       g_snprintf(str, 256, "%s", val_to_str(i,h225_RasMessage_vals,"unknown ras-messages"));
+                       gtk_list_store_append(store, &iter);
+                       gtk_list_store_set(store, &iter,
+                                  0, val_to_str(i,h225_RasMessage_vals,"unknown ras-messages"),
+                                  1, hs->ras_msg[i], -1);
 
                        /* reason counter */
                        switch(i) {
                        case 2: /* GRJ */
                                for(j=0;j<=GRJ_REASONS;j++) {
                                        if(hs->grj_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,GatekeeperRejectReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->grj_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,GatekeeperRejectReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->grj_reason[j], -1);
                                        }
                                }
                                break;
                        case 5: /* RRJ */
                                for(j=0;j<=RRJ_REASONS;j++) {
                                        if(hs->rrj_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,RegistrationRejectReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->rrj_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,RegistrationRejectReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->rrj_reason[j], -1);
                                        }
                                }
                                break;
                        case 6: /* URQ */
                                for(j=0;j<=URQ_REASONS;j++) {
                                        if(hs->urq_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,UnregRequestReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->urq_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,UnregRequestReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->urq_reason[j], -1);
                                        }
                                }
                                break;
                        case 8: /* URJ */
                                for(j=0;j<=URJ_REASONS;j++) {
                                        if(hs->urj_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,UnregRejectReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->urj_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,UnregRejectReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->urj_reason[j], -1);
                                        }
                                }
                                break;
                        case 11: /* ARJ */
                                for(j=0;j<=ARJ_REASONS;j++) {
                                        if(hs->arj_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,AdmissionRejectReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->arj_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,AdmissionRejectReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->arj_reason[j], -1);
                                        }
                                }
                                break;
                        case 14: /* BRJ */
                                for(j=0;j<=BRJ_REASONS;j++) {
                                        if(hs->brj_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,BandRejectReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->brj_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,BandRejectReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->brj_reason[j], -1);
                                        }
                                }
                                break;
                        case 15: /* DRQ */
                                for(j=0;j<=DRQ_REASONS;j++) {
                                        if(hs->drq_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,DisengageReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->drq_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,DisengageReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->drq_reason[j], -1);
                                        }
                                }
                                break;
                        case 17: /* DRJ */
                                for(j=0;j<=DRJ_REASONS;j++) {
                                        if(hs->drj_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,DisengageRejectReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->drj_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,DisengageRejectReason_vals,"unknown reason"));
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->drj_reason[j], -1);
                                        }
                                }
                                break;
                        case 20: /* LRJ */
                                for(j=0;j<=LRJ_REASONS;j++) {
                                        if(hs->lrj_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,LocationRejectReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->lrj_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,LocationRejectReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->lrj_reason[j], -1);
                                        }
                                }
                                break;
                        case 29: /* IRQNak */
                                for(j=0;j<=IRQNAK_REASONS;j++) {
                                        if(hs->irqnak_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,InfoRequestNakReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->irqnak_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,InfoRequestNakReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->irqnak_reason[j], -1);
                                        }
                                }
                                break;
@@ -438,33 +452,34 @@ h225counter_draw(void *phs)
 
        for(i=0;i<=CS_MSG_TYPES;i++) {
                if(hs->cs_msg[i]!=0) {
-                       g_snprintf(str[0], sizeof(char[256]),
-                "%s", val_to_str(i,T_h323_message_body_vals,"unknown cs-messages   "));
-                       g_snprintf(str[1], sizeof(char[256]),
-                "%d", hs->cs_msg[i]);
-                       gtk_clist_append(hs->table, str);
+                       gtk_list_store_append(store, &iter);
+                       gtk_list_store_set(store, &iter,
+                                  0, val_to_str(i,T_h323_message_body_vals,"unknown cs-messages"),
+                                  1, hs->cs_msg[i], -1);
 
                        /* reason counter */
                        switch(i) {
                        case 5: /* ReleaseComplete */
                                for(j=0;j<=REL_CMP_REASONS;j++) {
                                        if(hs->rel_cmp_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,h225_ReleaseCompleteReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->rel_cmp_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,h225_ReleaseCompleteReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->rel_cmp_reason[j], -1);
                                        }
                                }
                                break;
                        case 6: /* Facility */
                                for(j=0;j<=FACILITY_REASONS;j++) {
                                        if(hs->facility_reason[j]!=0) {
-                                               g_snprintf(str[0], sizeof(char[256]),
-                            "    %s", val_to_str(j,FacilityReason_vals,"unknown reason   "));
-                                               g_snprintf(str[1], sizeof(char[256]),
-                            "%d", hs->facility_reason[j]);
-                                               gtk_clist_append(hs->table, str);
+                                               g_snprintf(str, 256,"    %s",
+                                                               val_to_str(j,FacilityReason_vals,"unknown reason"));
+                                               gtk_list_store_append(store, &iter);
+                                               gtk_list_store_set(store, &iter,
+                                                       0, str,
+                                                       1, hs->facility_reason[j], -1);
                                        }
                                }
                                break;
@@ -473,13 +488,8 @@ h225counter_draw(void *phs)
                        }
                }
        }
-
-       gtk_widget_show(GTK_WIDGET(hs->table));
-
 }
 
-void protect_thread_critical_region(void);
-void unprotect_thread_critical_region(void);
 static void
 win_destroy_cb(GtkWindow *win _U_, gpointer data)
 {
@@ -496,47 +506,47 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
        g_free(hs);
 }
 
-
-static const gchar *titles[]={
-                       "Message Type or Reason",
-                       "Count" };
+static const stat_column titles[]={
+  {G_TYPE_STRING, LEFT, "Message Type or Reason"},
+  {G_TYPE_UINT, RIGHT, "Count" }
+};
 
 static void
 gtk_h225counter_init(const char *optarg, void *userdata _U_)
 {
        h225counter_t *hs;
-       const char *filter=NULL;
        GString *error_string;
        GtkWidget *bbox;
        GtkWidget *close_bt;
 
+       hs=g_malloc(sizeof(h225counter_t));
+
        if(strncmp(optarg,"h225,counter,",13) == 0){
-               filter=optarg+13;
+               hs->filter=g_strdup(optarg+13);
        } else {
-               filter="";
+               hs->filter=NULL;
        }
 
-       hs=g_malloc(sizeof(h225counter_t));
-       hs->filter=g_strdup(filter);
-
        h225counter_reset(hs);
 
-       hs->win=window_new(GTK_WINDOW_TOPLEVEL, "Wireshark: H.225 counters");
+       hs->win = dlg_window_new("Wireshark: H.225 counters");  /* transient_for top_level */
+       gtk_window_set_destroy_with_parent (GTK_WINDOW(hs->win), TRUE);
+
        gtk_window_set_default_size(GTK_WINDOW(hs->win), 400, 200);
 
        hs->vbox=gtk_vbox_new(FALSE, 3);
        gtk_container_set_border_width(GTK_CONTAINER(hs->vbox), 12);
 
-       init_main_stat_window(hs->win, hs->vbox, "H.225 Message and Message Reason Counter", filter);
+       init_main_stat_window(hs->win, hs->vbox, "H.225 Message and Message Reason Counter", hs->filter);
 
         /* init a scrolled window*/
        hs->scrolled_window = scrolled_window_new(NULL, NULL);
 
        hs->table = create_stat_table(hs->scrolled_window, hs->vbox, 2, titles);
 
-       error_string=register_tap_listener("h225", hs, filter, h225counter_reset, h225counter_packet, h225counter_draw);
+       error_string=register_tap_listener("h225", hs, hs->filter, 0, h225counter_reset, h225counter_packet, h225counter_draw);
        if(error_string){
-               simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, error_string->str);
+               simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str);
                g_string_free(error_string, TRUE);
                g_free(hs->filter);
                g_free(hs);
@@ -556,12 +566,20 @@ gtk_h225counter_init(const char *optarg, void *userdata _U_)
        gtk_widget_show_all(hs->win);
        window_present(hs->win);
 
-       cf_retap_packets(&cfile, FALSE);
+       cf_retap_packets(&cfile);
+       gdk_window_raise(gtk_widget_get_window(hs->win));
 }
 
 void
 register_tap_listener_gtk_h225counter(void)
 {
-       register_dfilter_stat(&h225_counter_dlg, "H.225",
+       register_dfilter_stat(&h225_counter_dlg, "_H.225",
            REGISTER_STAT_GROUP_TELEPHONY);
 }
+
+#ifdef MAIN_MENU_USE_UIMANAGER
+void h225_counter_cb(GtkAction *action, gpointer user_data _U_)
+{
+       tap_param_dlg_cb(action, &h225_counter_dlg);
+}
+#endif