diff options
author | Gerald Combs <gerald@wireshark.org> | 2015-08-04 17:42:53 -0700 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2015-08-06 01:59:10 +0000 |
commit | b7f5eaa5243ab8f0f2912e406a7d0cb94ff0c9fb (patch) | |
tree | db50f364dccf576a4e48f8e14dce339903c12519 /ui/gtk/gsm_map_stat.c | |
parent | 05eb9b69b8011a581ecd2ca92e4abfa1af7bde6f (diff) | |
download | wireshark-b7f5eaa5243ab8f0f2912e406a7d0cb94ff0c9fb.tar.gz |
Convert the GSM MAP stats to new "generic stat API".
Convert both the MAP statistics and summary. As with the GSM A stats
this are mostly untested.
Change-Id: Ibd3a7346b09d1401e78724c0197ec2a38deb97a3
Reviewed-on: https://code.wireshark.org/review/9883
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'ui/gtk/gsm_map_stat.c')
-rw-r--r-- | ui/gtk/gsm_map_stat.c | 494 |
1 files changed, 0 insertions, 494 deletions
diff --git a/ui/gtk/gsm_map_stat.c b/ui/gtk/gsm_map_stat.c deleted file mode 100644 index af5102e033..0000000000 --- a/ui/gtk/gsm_map_stat.c +++ /dev/null @@ -1,494 +0,0 @@ -/* gsm_map_stat.c - * - * Copyright 2004, Michael Lum <mlum [AT] telostech.com> - * In association with Telos Technology Inc. - * - * MUCH code modified from service_response_time_table.c. - * - * 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 - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * This TAP provides statistics for GSM MAP Operations: - */ - -#include "config.h" - -#include <stdlib.h> -#include <string.h> - -#include <gtk/gtk.h> - -#include <epan/packet.h> -#include <epan/value_string.h> -#include <epan/stat_tap_ui.h> -#include <epan/tap.h> -#include <epan/asn1.h> -#include <epan/dissectors/packet-gsm_map.h> - -#include "ui/simple_dialog.h" - -#include "ui/gtk/gui_stat_menu.h" -#include "ui/gtk/dlg_utils.h" -#include "ui/gtk/gui_utils.h" -#include "ui/gtk/gsm_map_stat.h" - - -void register_tap_listener_gtkgsm_map_stat(void); - -enum -{ - ID_COLUMN, - OP_CODE_COLUMN, - INVOKES_COLUMN, - NUM_BYTES_FWD_COLUMN, - AVG_BYTES_FWD_COLUMN, - RET_RES_COLUMN, - NUM_BYTES_REV_COLUMN, - AVG_BYTES_REV_COLUMN, - TOT_BYTES_COLUMN, - AVG_BYTES_COLUMN, - N_COLUMN /* The number of columns */ -}; - -/* Create list */ -static -GtkWidget* create_list(void) -{ - - GtkListStore *list_store; - GtkWidget *list; - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - GtkTreeSortable *sortable; - GtkTreeView *list_view; - GtkTreeSelection *selection; - - /* Create the store */ - list_store = gtk_list_store_new(N_COLUMN, /* Total number of columns XXX*/ - G_TYPE_UINT, /* ID */ - G_TYPE_STRING, /* Operation Code */ - G_TYPE_INT, /* Invokes */ - G_TYPE_INT, /* Num Bytes */ - G_TYPE_FLOAT, /* Avg Bytes */ - G_TYPE_INT, /* RetResult */ - G_TYPE_INT, /* Num Bytes */ - G_TYPE_FLOAT, /* Avg Bytes */ - G_TYPE_INT, /* Total Bytes */ - G_TYPE_FLOAT); /* Avg Bytes */ - - /* Create a view */ - list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); - - list_view = GTK_TREE_VIEW(list); - sortable = GTK_TREE_SORTABLE(list_store); - - /* Speed up the list display */ - gtk_tree_view_set_fixed_height_mode(list_view, TRUE); - - /* Setup the sortable columns */ - gtk_tree_sortable_set_sort_column_id(sortable, ID_COLUMN, GTK_SORT_ASCENDING); - gtk_tree_view_set_headers_clickable(list_view, FALSE); - - /* The view now holds a reference. We can get rid of our own reference */ - g_object_unref (G_OBJECT (list_store)); - - /* - * Create the first column packet, associating the "text" attribute of the - * cell_renderer to the first column of the model - */ - /* 1:st column */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("ID", renderer, - "text", ID_COLUMN, - NULL); - - gtk_tree_view_column_set_sort_column_id(column, ID_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 40); - - /* Add the column to the view. */ - gtk_tree_view_append_column (list_view, column); - - /* 2:nd column..Operation Code. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Operation Code", renderer, - "text", OP_CODE_COLUMN, - NULL); - gtk_tree_view_column_set_sort_column_id(column, OP_CODE_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 210); - gtk_tree_view_append_column (list_view, column); - - /* 3:d column..Invokes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Invokes", renderer, - "text", INVOKES_COLUMN, - NULL); - gtk_tree_view_column_set_sort_column_id(column, INVOKES_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_append_column (list_view, column); - - /* 4:th column.. Num Bytes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Num Bytes", renderer, - "text", NUM_BYTES_FWD_COLUMN, - NULL); - - - gtk_tree_view_column_set_sort_column_id(column, NUM_BYTES_FWD_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 100); - gtk_tree_view_append_column (list_view, column); - - /* 5:th column.. Avg Bytes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Avg Bytes", renderer, - "text", AVG_BYTES_FWD_COLUMN, - NULL); - gtk_tree_view_column_set_cell_data_func(column, renderer, float_data_func, - GINT_TO_POINTER(AVG_BYTES_FWD_COLUMN), NULL); - - gtk_tree_view_column_set_sort_column_id(column, AVG_BYTES_FWD_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 80); - gtk_tree_view_append_column (list_view, column); - - /* 6:d column..Invokes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("ReturnResult", renderer, - "text", RET_RES_COLUMN, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RET_RES_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_append_column (list_view, column); - - /* 7:th column.. Num Bytes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Num Bytes", renderer, - "text", NUM_BYTES_REV_COLUMN, - NULL); - - - gtk_tree_view_column_set_sort_column_id(column, NUM_BYTES_FWD_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 100); - gtk_tree_view_append_column (list_view, column); - - /* 8:th column.. Avg Bytes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Avg Bytes", renderer, - "text", AVG_BYTES_REV_COLUMN, - NULL); - gtk_tree_view_column_set_cell_data_func(column, renderer, float_data_func, - GINT_TO_POINTER(AVG_BYTES_REV_COLUMN), NULL); - - - gtk_tree_view_column_set_sort_column_id(column, AVG_BYTES_REV_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 80); - gtk_tree_view_append_column (list_view, column); - - /* 9:th column.. Total Bytes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Total Bytes", renderer, - "text", TOT_BYTES_COLUMN, - NULL); - - - gtk_tree_view_column_set_sort_column_id(column, NUM_BYTES_FWD_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 100); - gtk_tree_view_append_column (list_view, column); - - /* 10:th column.. Avg Bytes. */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Avg Bytes", renderer, - "text", AVG_BYTES_COLUMN, - NULL); - gtk_tree_view_column_set_cell_data_func(column, renderer, float_data_func, - GINT_TO_POINTER(AVG_BYTES_COLUMN), NULL); - - gtk_tree_view_column_set_sort_column_id(column, AVG_BYTES_COLUMN); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_append_column (list_view, column); - - /* Now enable the sorting of each column */ - gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(list_view), TRUE); - gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(list_view), TRUE); - - /* Setup the selection handler */ - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); - gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); - - return list; - -} - -typedef struct _gsm_map_stat_dlg_t { - GtkWidget *win; - GtkWidget *scrolled_win; - GtkWidget *table; -} gsm_map_stat_dlg_t; - -static gsm_map_stat_dlg_t dlg; - -/* - * used by gsm_map_summary.c - */ -gsm_map_stat_t gsm_map_stat; - - -static void -gsm_map_stat_reset( - void *tapdata) -{ - gsm_map_stat_t *stat_p = (gsm_map_stat_t *)tapdata; - - memset(stat_p, 0, sizeof(gsm_map_stat_t)); -} - - -static gboolean -gsm_map_stat_packet( - void *tapdata, - packet_info *pinfo _U_, - epan_dissect_t *edt _U_, - const void *data) -{ - gsm_map_stat_t *stat_p = (gsm_map_stat_t *)tapdata; - const gsm_map_tap_rec_t *data_p = (const gsm_map_tap_rec_t *)data; - -#if 0 /* always false because message_type is 8 bit value */ - if (data_p->opr_code_idx > sizeof(stat_p->opr_code)) - { - /* - * unknown message type !!! - */ - return(FALSE); - } -#endif - - if (data_p->invoke) - { - stat_p->opr_code[data_p->opr_code_idx]++; - stat_p->size[data_p->opr_code_idx] += data_p->size; - } - else - { - stat_p->opr_code_rr[data_p->opr_code_idx]++; - stat_p->size_rr[data_p->opr_code_idx] += data_p->size; - } - - return(TRUE); -} - - -static void -gsm_map_stat_draw( - void *tapdata) -{ - gsm_map_stat_t *stat_p = (gsm_map_stat_t *)tapdata; - int i; - GtkListStore *list_store; - GtkTreeIter iter; - - if (dlg.win && tapdata) - { - list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (dlg.table))); /* Get store */ - - i = 0; - while (gsm_map_opr_code_strings[i].strptr){ - float avrage_bytes_fwd; - float avrage_bytes_rev; - float avrage_bytes_tot; - - if (stat_p->opr_code[i] >0){ - avrage_bytes_fwd =(float)stat_p->size[i]/(float)stat_p->opr_code[i]; - }else{ - avrage_bytes_fwd = 0; - } - if (stat_p->opr_code_rr[i] >0){ - avrage_bytes_rev = (float)stat_p->size_rr[i]/(float)stat_p->opr_code_rr[i]; - }else{ - avrage_bytes_rev = 0; - } - if ((stat_p->opr_code[i] + stat_p->opr_code_rr[i])>0){ - avrage_bytes_tot = (float)(stat_p->size[i] +stat_p->size_rr[i])/(float)(stat_p->opr_code[i] + stat_p->opr_code_rr[i]); - }else{ - avrage_bytes_tot = 0; - } - /* Creates a new row at position. iter will be changed to point to this new row. - * If position is larger than the number of rows on the list, then the new row will be appended to the list. - * The row will be filled with the values given to this function. - * : - * should generally be preferred when inserting rows in a sorted list store. - */ - gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT, - ID_COLUMN, gsm_map_opr_code_strings[i].value, - OP_CODE_COLUMN, (char*)gsm_map_opr_code_strings[i].strptr, - INVOKES_COLUMN, stat_p->opr_code[i], - NUM_BYTES_FWD_COLUMN, (gint)stat_p->size[i], - AVG_BYTES_FWD_COLUMN, avrage_bytes_fwd, - RET_RES_COLUMN, stat_p->opr_code_rr[i], - NUM_BYTES_REV_COLUMN, stat_p->size_rr[i], - AVG_BYTES_REV_COLUMN, avrage_bytes_rev, - TOT_BYTES_COLUMN, stat_p->size[i] + stat_p->size_rr[i], - AVG_BYTES_COLUMN, avrage_bytes_tot, - -1); - i++; - } - } -} - -static void -gsm_map_stat_gtk_win_destroy_cb( - GtkWindow *win _U_, - gpointer user_data) -{ - memset((void *) user_data, 0, sizeof(gsm_map_stat_dlg_t)); -} - - -static void -gsm_map_stat_gtk_win_create( - gsm_map_stat_dlg_t *dlg_p, - const char *title) -{ - GtkWidget *vbox; - GtkWidget *bt_close; - GtkWidget *bbox; - - - dlg_p->win = dlg_window_new(title); /* transient_for top_level */ - gtk_window_set_destroy_with_parent (GTK_WINDOW(dlg_p->win), TRUE); - gtk_window_set_default_size(GTK_WINDOW(dlg_p->win), 560, 390); - - vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE); - gtk_container_add(GTK_CONTAINER(dlg_p->win), vbox); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); - - dlg_p->scrolled_win = scrolled_window_new(NULL, NULL); - gtk_box_pack_start(GTK_BOX(vbox), dlg_p->scrolled_win, TRUE, TRUE, 0); - - dlg_p->table = create_list(); - gtk_widget_show(dlg_p->table); - - gtk_container_add(GTK_CONTAINER(dlg_p->scrolled_win), dlg_p->table); - - /* Button row. */ - bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); - gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); - - bt_close = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), GTK_STOCK_CLOSE); - window_set_cancel_button(dlg_p->win, bt_close, window_cancel_button_cb); - - g_signal_connect(dlg_p->win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); - g_signal_connect(dlg_p->win, "destroy", G_CALLBACK(gsm_map_stat_gtk_win_destroy_cb), dlg_p); - - gtk_widget_show_all(dlg_p->win); - window_present(dlg_p->win); -} - -void -gsm_map_stat_gtk_cb(GtkAction *action _U_, gpointer user_data _U_) -{ - - - /* - * if the window is already open, bring it to front - */ - if (dlg.win){ - gdk_window_raise(gtk_widget_get_window(dlg.win)); - return; - } - - gsm_map_stat_gtk_win_create(&dlg, "GSM MAP Operation Statistics"); - - gsm_map_stat_draw(&gsm_map_stat); -} - - -static void -gsm_map_stat_gtk_init(const char *opt_arg _U_, - void* userdata _U_) -{ - gsm_map_stat_gtk_cb(NULL, NULL); -} - - -static stat_tap_ui gsm_map_stat_ui = { - REGISTER_STAT_GROUP_GENERIC, - NULL, - "gsm_map", - gsm_map_stat_gtk_init, - 0, - NULL -}; - -void -register_tap_listener_gtkgsm_map_stat(void) -{ - GString *err_p; - - - memset((void *) &gsm_map_stat, 0, sizeof(gsm_map_stat_t)); - - err_p = - register_tap_listener("gsm_map", &gsm_map_stat, NULL, 0, - gsm_map_stat_reset, - gsm_map_stat_packet, - gsm_map_stat_draw); - - if (err_p != NULL) - { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_p->str); - g_string_free(err_p, TRUE); - - exit(1); - } - - register_stat_tap_ui(&gsm_map_stat_ui, NULL); -} - -/* - * Editor modelines - http://www.wireshark.org/tools/modelines.html - * - * Local variables: - * c-basic-offset: 4 - * tab-width: 8 - * indent-tabs-mode: nil - * End: - * - * vi: set shiftwidth=4 tabstop=8 expandtab: - * :indentSize=4:tabSize=8:noTabs=true: - */ |