/* h225_counter.c
- * h225 message counter for ethereal
+ * H.225 message counter for Wireshark
* Copyright 2003 Lars Roland
*
- * $Id: h225_counter.c,v 1.20 2004/05/23 23:24:05 ulfl Exp $
+ * $Id$
*
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
#include <gtk/gtk.h>
+#include <epan/packet.h>
#include <epan/packet_info.h>
#include <epan/epan.h>
#include <epan/value_string.h>
+#include <epan/tap.h>
+#include <epan/dissectors/packet-h225.h>
-#include "tap_menu.h"
-#include "../tap.h"
-#include "../register.h"
-#include "../packet-h225.h"
-#include "gtk_stat_util.h"
-#include "compat_macros.h"
#include "../simple_dialog.h"
-#include "dlg_utils.h"
#include "../file.h"
-#include "../globals.h"
-#include "../tap_dfilter_dlg.h"
-#include "tap_dfilter_dlg.h"
-#include "ui_util.h"
+#include "../stat_menu.h"
+#include "gtk/gui_stat_util.h"
+#include "gtk/dlg_utils.h"
+#include "gtk/tap_dfilter_dlg.h"
+#include "gtk/gui_utils.h"
+#include "gtk/main.h"
-extern GtkWidget *main_display_filter_widget;
-static void gtk_h225counter_init(char *optarg);
+static void gtk_h225counter_init(const char *optarg, void *userdata);
static tap_dfilter_dlg h225_counter_dlg = {
"H.225 Messages and Message Reasons",
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];
}
static int
-h225counter_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, void *phi)
+h225counter_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *phi)
{
h225counter_t *hs=(h225counter_t *)phs;
- h225_packet_info *pi=phi;
+ const h225_packet_info *pi=phi;
switch (pi->msg_type) {
default:
return 0;
- break;
}
return 1;
{
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,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;
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,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,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;
}
}
}
-
- 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)
{
g_free(hs);
}
-
-static 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(char *optarg)
+gtk_h225counter_init(const char *optarg, void *userdata _U_)
{
h225counter_t *hs;
- char *filter=NULL;
GString *error_string;
- GtkWidget *bbox;
- GtkWidget *close_bt;
+ 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=g_malloc(1);
- *filter='\0';
+ hs->filter=NULL;
}
- hs=g_malloc(sizeof(h225counter_t));
- hs->filter=g_strdup(filter);
-
h225counter_reset(hs);
- hs->win=window_new(GTK_WINDOW_TOPLEVEL, "Ethereal: H225 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, "ITU-T 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);
- WIDGET_SET_SIZE(hs->scrolled_window, 400, 200);
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);
bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL);
gtk_box_pack_end(GTK_BOX(hs->vbox), bbox, FALSE, FALSE, 0);
- close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE);
- window_set_cancel_button(hs->win, close_bt, window_cancel_button_cb);
+ close_bt = g_object_get_data(G_OBJECT(bbox), GTK_STOCK_CLOSE);
+ window_set_cancel_button(hs->win, close_bt, window_cancel_button_cb);
- SIGNAL_CONNECT(hs->win, "delete_event", window_delete_event_cb, NULL);
- SIGNAL_CONNECT(hs->win, "destroy", win_destroy_cb, hs);
+ g_signal_connect(hs->win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
+ g_signal_connect(hs->win, "destroy", G_CALLBACK(win_destroy_cb), hs);
gtk_widget_show_all(hs->win);
- window_present(hs->win);
+ window_present(hs->win);
- /* XXX - shouldn't this be retap_packets? */
- redissect_packets(&cfile);
+ cf_retap_packets(&cfile);
+ gdk_window_raise(hs->win->window);
}
void
register_tap_listener_gtk_h225counter(void)
{
- register_ethereal_tap("h225,counter", gtk_h225counter_init);
-
- register_tap_menu_item("ITU-T H.225...", REGISTER_TAP_GROUP_NONE,
- gtk_tap_dfilter_dlg_cb, NULL, NULL, &(h225_counter_dlg));
+ register_dfilter_stat(&h225_counter_dlg, "_H.225",
+ REGISTER_STAT_GROUP_TELEPHONY);
}