-/*
+/*
* Copyright 2004, Irene Ruengeler <i.ruengeler [AT] fh-muenster.de>
*
* $Id$
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
+
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <gtk/gtk.h>
-#include <string.h> /* for memmove */
-#include "globals.h"
-#include "simple_dialog.h"
+
#include <epan/epan_dissect.h>
#include "epan/filesystem.h"
-#include "register.h"
-#include "../stat_menu.h"
-#include "gui_stat_menu.h"
-#include "dlg_utils.h"
-#include "gui_utils.h"
-#include "main.h"
#include <epan/strutil.h>
-#include "sctp_stat.h"
-#include "gtkglobals.h"
+#include "../globals.h"
+#include "../simple_dialog.h"
+#include "../stat_menu.h"
+
+#include "gtk/gui_stat_menu.h"
+#include "gtk/dlg_utils.h"
+#include "gtk/gui_utils.h"
+#include "gtk/main.h"
+#include "gtk/sctp_stat.h"
+#include "gtk/gtkglobals.h"
static sctp_assoc_info_t static_assoc;
}
static void
-on_destroy(GtkObject *object _U_, gpointer user_data)
+on_destroy(GObject *object _U_, gpointer user_data)
{
struct sctp_analyse *u_data;
guint16 i, j;
g_list_free(u_data->children);
u_data->children = NULL;
}
-
+
g_free(u_data->analyse_nb->page2);
g_free(u_data->analyse_nb->page3);
g_free(u_data->analyse_nb);
sctp_assoc_info_t* assinfo = NULL;
int i;
- assinfo = g_malloc(sizeof(sctp_assoc_info_t));
assinfo = &static_assoc;
assinfo->addr_chunk_count = (static_assoc.addr_chunk_count);
for (i=0; i<NUM_CHUNKS; i++)
static void on_chunk1_dlg(GtkWidget *widget _U_, struct sctp_analyse* u_data)
{
sctp_assoc_info_t* assinfo = NULL;
-
- assinfo = g_malloc(sizeof(sctp_assoc_info_t));
+
assinfo = &static_assoc;
assinfo->addr_chunk_count = (static_assoc.addr_chunk_count);
u_data->assoc = assinfo;
{
sctp_assoc_info_t* assinfo=NULL;
- assinfo = g_malloc(sizeof(sctp_assoc_info_t));
assinfo = &static_assoc;
- assinfo->addr_chunk_count = (static_assoc.addr_chunk_count);
+ assinfo->addr_chunk_count = (static_assoc.addr_chunk_count);
u_data->assoc = assinfo;
sctp_chunk_stat_dlg_show(2, u_data);
}
update_analyse_dlg(struct sctp_analyse* u_data)
{
gchar label_txt[50];
- gchar *data[1];
gchar field[1][MAX_ADDRESS_LEN];
- gint added_row;
GList *list;
address *store = NULL;
+ GtkListStore *list_store = NULL;
+ GtkTreeIter iter;
if (u_data->assoc == NULL)
return;
if (u_data->window != NULL)
{
- gtk_clist_clear(GTK_CLIST(u_data->analyse_nb->page2->clist));
- gtk_clist_clear(GTK_CLIST(u_data->analyse_nb->page3->clist));
+ gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW
+ (u_data->analyse_nb->page2->clist))));
+ gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW
+ (u_data->analyse_nb->page3->clist))));
}
- g_snprintf(label_txt, 50,"Checksum Type: %s",u_data->assoc->checksum_type);
+ g_snprintf(label_txt, sizeof(label_txt),"Checksum Type: %s",u_data->assoc->checksum_type);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->checktype), label_txt);
- g_snprintf(label_txt, 50,"Checksum Errors: %u",u_data->assoc->n_checksum_errors);
+ g_snprintf(label_txt, sizeof(label_txt),"Checksum Errors: %u",u_data->assoc->n_checksum_errors);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->checksum), label_txt);
- g_snprintf(label_txt, 50,"Bundling Errors: %u",u_data->assoc->n_bundling_errors);
+ g_snprintf(label_txt, sizeof(label_txt),"Bundling Errors: %u",u_data->assoc->n_bundling_errors);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->bundling), label_txt);
- g_snprintf(label_txt, 50,"Padding Errors: %u",u_data->assoc->n_padding_errors);
+ g_snprintf(label_txt, sizeof(label_txt),"Padding Errors: %u",u_data->assoc->n_padding_errors);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->padding), label_txt);
- g_snprintf(label_txt, 50,"Length Errors: %u",u_data->assoc->n_length_errors);
+ g_snprintf(label_txt, sizeof(label_txt),"Length Errors: %u",u_data->assoc->n_length_errors);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->length), label_txt);
- g_snprintf(label_txt, 50,"Value Errors: %u",u_data->assoc->n_value_errors);
+ g_snprintf(label_txt, sizeof(label_txt),"Value Errors: %u",u_data->assoc->n_value_errors);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->value), label_txt);
- g_snprintf(label_txt, 50,"No of Data Chunks from EP1 to EP2: %u",u_data->assoc->n_data_chunks_ep1);
+ g_snprintf(label_txt, sizeof(label_txt),"No of Data Chunks from EP1 to EP2: %u",u_data->assoc->n_data_chunks_ep1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->chunks_ep1), label_txt);
- g_snprintf(label_txt, 50,"No of Data Bytes from EP1 to EP2: %u",u_data->assoc->n_data_bytes_ep1);
+ g_snprintf(label_txt, sizeof(label_txt),"No of Data Bytes from EP1 to EP2: %u",u_data->assoc->n_data_bytes_ep1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->bytes_ep1), label_txt);
- g_snprintf(label_txt, 50,"No of Data Chunks from EP2 to EP1: %u",u_data->assoc->n_data_chunks_ep2);
+ g_snprintf(label_txt, sizeof(label_txt),"No of Data Chunks from EP2 to EP1: %u",u_data->assoc->n_data_chunks_ep2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->chunks_ep2), label_txt);
- g_snprintf(label_txt, 50,"No of Data Bytes from EP2 to EP1: %u",u_data->assoc->n_data_bytes_ep2);
+ g_snprintf(label_txt, sizeof(label_txt),"No of Data Bytes from EP2 to EP1: %u",u_data->assoc->n_data_bytes_ep2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->bytes_ep2), label_txt);
if (u_data->assoc->init == TRUE)
list = g_list_first(u_data->assoc->addr1);
while (list)
{
- data[0] = &field[0][0];
store = (address *) (list->data);
if (store->type == AT_IPv4)
{
g_snprintf(field[0], 30, "%s", ip_to_str((const guint8 *)(store->data)));
}
else if (store->type == AT_IPv6)
- {
+ {
g_snprintf(field[0], 40, "%s", ip6_to_str((const struct e_in6_addr *)(store->data)));
}
- added_row = gtk_clist_append(GTK_CLIST(u_data->analyse_nb->page2->clist), data);
- gtk_clist_set_row_data(GTK_CLIST(u_data->analyse_nb->page2->clist), added_row, u_data->assoc);
+ list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (u_data->analyse_nb->page2->clist))); /* Get store */
+
+ gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT,
+ 0, field[0], -1);
list = g_list_next(list);
}
}
{
return;
}
- g_snprintf(label_txt, 50,"Port: %u",u_data->assoc->port1);
+ g_snprintf(label_txt, sizeof(label_txt),"Port: %u",u_data->assoc->port1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->port), label_txt);
- g_snprintf(label_txt, 50,"Sent Verification Tag: 0x%x",u_data->assoc->verification_tag1);
+ g_snprintf(label_txt, sizeof(label_txt),"Sent Verification Tag: 0x%x",u_data->assoc->verification_tag1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->veritag), label_txt);
if (u_data->assoc->init == TRUE || (u_data->assoc->initack == TRUE && u_data->assoc->initack_dir == 1))
{
- g_snprintf(label_txt, 50,"Requested Number of Inbound Streams: %u",u_data->assoc->instream1);
+ g_snprintf(label_txt, sizeof(label_txt),"Requested Number of Inbound Streams: %u",u_data->assoc->instream1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->max_in), label_txt);
- g_snprintf(label_txt, 50,"Minimum Number of Inbound Streams: %u",((u_data->assoc->instream1>u_data->assoc->outstream2)?u_data->assoc->outstream2:u_data->assoc->instream1));
+ g_snprintf(label_txt, sizeof(label_txt),"Minimum Number of Inbound Streams: %u",((u_data->assoc->instream1>u_data->assoc->outstream2)?u_data->assoc->outstream2:u_data->assoc->instream1));
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->min_in), label_txt);
- g_snprintf(label_txt, 50,"Provided Number of Outbound Streams: %u",u_data->assoc->outstream1);
+ g_snprintf(label_txt, sizeof(label_txt),"Provided Number of Outbound Streams: %u",u_data->assoc->outstream1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->max_out), label_txt);
- g_snprintf(label_txt, 50,"Minimum Number of Outbound Streams: %u",((u_data->assoc->outstream1>u_data->assoc->instream2)?u_data->assoc->instream2:u_data->assoc->outstream1));
+ g_snprintf(label_txt, sizeof(label_txt),"Minimum Number of Outbound Streams: %u",((u_data->assoc->outstream1>u_data->assoc->instream2)?u_data->assoc->instream2:u_data->assoc->outstream1));
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->max_out), label_txt);
}
else
{
- g_snprintf(label_txt, 50,"Used Number of Inbound Streams: %u",u_data->assoc->instream1);
+ g_snprintf(label_txt, sizeof(label_txt),"Used Number of Inbound Streams: %u",u_data->assoc->instream1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->max_in), label_txt);
- g_snprintf(label_txt, 50,"Used Number of Outbound Streams: %u",u_data->assoc->outstream1);
+ g_snprintf(label_txt, sizeof(label_txt),"Used Number of Outbound Streams: %u",u_data->assoc->outstream1);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->max_out), label_txt);
}
while (list)
{
- data[0] = &field[0][0];
store = (address *) (list->data);
if (store->type == AT_IPv4)
{
{
g_snprintf(field[0], 40, "%s", ip6_to_str((const struct e_in6_addr *)(store->data)));
}
- added_row = gtk_clist_append(GTK_CLIST(u_data->analyse_nb->page3->clist), data);
- gtk_clist_set_row_data(GTK_CLIST(u_data->analyse_nb->page3->clist), added_row, u_data->assoc);
+ list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (u_data->analyse_nb->page3->clist))); /* Get store */
+
+ gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT,
+ 0, field[0], -1);
list = g_list_next(list);
}
}
return;
}
- g_snprintf(label_txt, 50,"Port: %u",u_data->assoc->port2);
+ g_snprintf(label_txt, sizeof(label_txt),"Port: %u",u_data->assoc->port2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->port), label_txt);
- g_snprintf(label_txt, 50,"Sent Verification Tag: 0x%x",u_data->assoc->verification_tag2);
+ g_snprintf(label_txt, sizeof(label_txt),"Sent Verification Tag: 0x%x",u_data->assoc->verification_tag2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->veritag), label_txt);
if (u_data->assoc->initack == TRUE)
{
- g_snprintf(label_txt, 50,"Requested Number of Inbound Streams: %u",u_data->assoc->instream2);
+ g_snprintf(label_txt, sizeof(label_txt),"Requested Number of Inbound Streams: %u",u_data->assoc->instream2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->max_in), label_txt);
- g_snprintf(label_txt, 50,"Minimum Number of Inbound Streams: %u",((u_data->assoc->instream2>u_data->assoc->outstream1)?u_data->assoc->outstream1:u_data->assoc->instream2));
+ g_snprintf(label_txt, sizeof(label_txt),"Minimum Number of Inbound Streams: %u",((u_data->assoc->instream2>u_data->assoc->outstream1)?u_data->assoc->outstream1:u_data->assoc->instream2));
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->min_in), label_txt);
- g_snprintf(label_txt, 50,"Provided Number of Outbound Streams: %u",u_data->assoc->outstream2);
+ g_snprintf(label_txt, sizeof(label_txt),"Provided Number of Outbound Streams: %u",u_data->assoc->outstream2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->max_out), label_txt);
- g_snprintf(label_txt, 50,"Minimum Number of Outbound Streams: %u",((u_data->assoc->outstream2>u_data->assoc->instream1)?u_data->assoc->instream1:u_data->assoc->outstream2));
+ g_snprintf(label_txt, sizeof(label_txt),"Minimum Number of Outbound Streams: %u",((u_data->assoc->outstream2>u_data->assoc->instream1)?u_data->assoc->instream1:u_data->assoc->outstream2));
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->min_out), label_txt);
}
else
{
- g_snprintf(label_txt, 50,"Used Number of Inbound Streams: %u",u_data->assoc->instream2);
+ g_snprintf(label_txt, sizeof(label_txt),"Used Number of Inbound Streams: %u",u_data->assoc->instream2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->max_in), label_txt);
- g_snprintf(label_txt, 50,"Used Number of Outbound Streams: %u",u_data->assoc->outstream2);
+ g_snprintf(label_txt, sizeof(label_txt),"Used Number of Outbound Streams: %u",u_data->assoc->outstream2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->min_out), label_txt);
}
}
-void
+static void
sctp_set_filter (GtkButton *button _U_, struct sctp_analyse* u_data)
{
gchar *f_string = NULL;
sctp_assoc_info_t *selected_stream;
gchar *filter_string = NULL;
selected_stream=u_data->assoc;
-
+
if (selected_stream->check_address==FALSE)
{
f_string = g_strdup_printf("((sctp.srcport==%u && sctp.dstport==%u && ((sctp.verification_tag==0x%x && sctp.verification_tag!=0x0) || "
selected_stream->port1,
selected_stream->port2,
selected_stream->verification_tag1,
- /*selected_stream->verification_tag2,*/
selected_stream->initiate_tag,
selected_stream->verification_tag2,
selected_stream->port2,
selected_stream->port1,
selected_stream->verification_tag2,
- /*selected_stream->verification_tag1,*/
selected_stream->initiate_tag,
selected_stream->verification_tag1);
filter_string = f_string;
filter_string = gstring->str;
g_string_free(gstring,FALSE);
}
-
+
if (filter_string != NULL) {
gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string);
} else {
static void analyse_window_set_title(struct sctp_analyse *u_data)
{
char *title;
-
+
if(!u_data->window){
return;
}
g_free(title);
}
+static
+GtkWidget *create_list(void)
+{
+ GtkListStore *list_store;
+ GtkWidget * list;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeView *list_view;
+ list_store = gtk_list_store_new(1,
+ G_TYPE_STRING /* IP address */
+ );
+
+ /* Create a view */
+ list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
+
+ list_view = GTK_TREE_VIEW(list);
+
+ /* Speed up the list display */
+ gtk_tree_view_set_fixed_height_mode(list_view, TRUE);
+
+ /* 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
+ */
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes ("Address", renderer,
+ "text", 0,
+ NULL);
+
+ 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, 300);
+
+ /* Add the column to the view. */
+ gtk_tree_view_append_column (list_view, column);
+
+ gtk_tree_view_set_headers_visible(list_view, FALSE);
+ return list;
+}
+
static void create_analyse_window(struct sctp_analyse* u_data)
{
GtkWidget *window = NULL;
/* Container for each row of widgets */
main_vb = gtk_vbox_new(FALSE, 2);
- gtk_container_border_width(GTK_CONTAINER(main_vb), 2);
+ gtk_container_set_border_width(GTK_CONTAINER(main_vb), 2);
gtk_container_add(GTK_CONTAINER(window), main_vb);
gtk_widget_show(main_vb);
gtk_box_pack_start(GTK_BOX(page1), hbox, FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 10);
gtk_button_box_set_layout(GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_SPREAD);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX (hbox), 0);
- gtk_button_box_set_child_ipadding(GTK_BUTTON_BOX (hbox), 4, 0);
+ gtk_box_set_spacing(GTK_BOX (hbox), 0);
gtk_widget_show(hbox);
chunk_stat_bt = gtk_button_new_with_label ("Chunk Statistics");
gtk_container_add(GTK_CONTAINER(page2), u_data->analyse_nb->page2->addr_frame);
addr_hb = gtk_hbox_new(FALSE, 3);
- gtk_container_border_width(GTK_CONTAINER(addr_hb), 5);
+ gtk_container_set_border_width(GTK_CONTAINER(addr_hb), 5);
gtk_container_add(GTK_CONTAINER(u_data->analyse_nb->page2->addr_frame), addr_hb);
u_data->analyse_nb->page2->scrolled_window = scrolled_window_new(NULL, NULL);
gtk_widget_set_size_request(u_data->analyse_nb->page2->scrolled_window, 560, 100);
- u_data->analyse_nb->page2->clist = gtk_clist_new(1);
+ u_data->analyse_nb->page2->clist = create_list();
gtk_widget_show(u_data->analyse_nb->page2->clist);
- gtk_clist_set_column_width(GTK_CLIST(u_data->analyse_nb->page2->clist), 0, 200);
- gtk_clist_set_column_justification(GTK_CLIST(u_data->analyse_nb->page2->clist), 0, GTK_JUSTIFY_LEFT);
-
gtk_container_add(GTK_CONTAINER(u_data->analyse_nb->page2->scrolled_window), u_data->analyse_nb->page2->clist);
gtk_box_pack_start(GTK_BOX(addr_hb), u_data->analyse_nb->page2->scrolled_window, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(page2), stat_fr);
hbox = gtk_hbox_new(FALSE,3);
- gtk_container_border_width(GTK_CONTAINER(hbox), 5);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
gtk_container_add(GTK_CONTAINER(stat_fr), hbox);
vbox_l = gtk_vbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(page2), h_button_box, FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(h_button_box), 10);
gtk_button_box_set_layout(GTK_BUTTON_BOX (h_button_box), GTK_BUTTONBOX_SPREAD);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX (h_button_box), 0);
- gtk_button_box_set_child_ipadding(GTK_BUTTON_BOX (h_button_box), 4, 0);
+ gtk_box_set_spacing(GTK_BOX (h_button_box), 0);
gtk_widget_show(h_button_box);
-
+
chunk_bt1 = gtk_button_new_with_label("Chunk Statistics");
gtk_box_pack_start(GTK_BOX(h_button_box), chunk_bt1, FALSE, FALSE, 0);
gtk_widget_show(chunk_bt1);
gtk_container_add(GTK_CONTAINER(page3), u_data->analyse_nb->page3->addr_frame);
addr_hb = gtk_hbox_new(FALSE, 3);
- gtk_container_border_width(GTK_CONTAINER(addr_hb), 5);
+ gtk_container_set_border_width(GTK_CONTAINER(addr_hb), 5);
gtk_container_add(GTK_CONTAINER(u_data->analyse_nb->page3->addr_frame), addr_hb);
u_data->analyse_nb->page3->scrolled_window = scrolled_window_new(NULL, NULL);
gtk_widget_set_size_request(u_data->analyse_nb->page3->scrolled_window, 560, 100);
- u_data->analyse_nb->page3->clist = gtk_clist_new(1);
- gtk_widget_show(u_data->analyse_nb->page3->clist);
-
- gtk_clist_set_column_width(GTK_CLIST(u_data->analyse_nb->page3->clist), 0, 200);
- gtk_clist_set_column_justification(GTK_CLIST(u_data->analyse_nb->page3->clist), 0, GTK_JUSTIFY_LEFT);
+ u_data->analyse_nb->page3->clist = create_list();
+ gtk_widget_show(u_data->analyse_nb->page3->clist);
gtk_container_add(GTK_CONTAINER(u_data->analyse_nb->page3->scrolled_window),
u_data->analyse_nb->page3->clist);
gtk_container_add(GTK_CONTAINER(page3), stat_fr);
hbox = gtk_hbox_new(FALSE,3);
- gtk_container_border_width(GTK_CONTAINER(hbox), 5);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
gtk_container_add(GTK_CONTAINER(stat_fr), hbox);
vbox_l = gtk_vbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(hbox), vbox_l, TRUE, TRUE, 0);
-
+
hbox_l1 = gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(vbox_l), hbox_l1, TRUE, TRUE, 0);
gtk_misc_set_alignment (GTK_MISC(u_data->analyse_nb->page3->max_in),0,0);
u_data->analyse_nb->page3->min_in = gtk_label_new("");
gtk_box_pack_start(GTK_BOX(vbox_r), u_data->analyse_nb->page3->min_in, TRUE, TRUE, 0);
- gtk_misc_set_alignment (GTK_MISC(u_data->analyse_nb->page3->min_in),0,0);
+ gtk_misc_set_alignment (GTK_MISC(u_data->analyse_nb->page3->min_in),0,0);
u_data->analyse_nb->page3->max_out = gtk_label_new("");
gtk_box_pack_start(GTK_BOX(vbox_r), u_data->analyse_nb->page3->max_out, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(page3), h_button_box, FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(h_button_box), 10);
gtk_button_box_set_layout(GTK_BUTTON_BOX (h_button_box), GTK_BUTTONBOX_SPREAD);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX (h_button_box), 0);
- gtk_button_box_set_child_ipadding(GTK_BUTTON_BOX (h_button_box), 4, 0);
+ gtk_box_set_spacing(GTK_BOX (h_button_box), 0);
gtk_widget_show(h_button_box);
-
+
chunk_bt1 = gtk_button_new_with_label("Chunk Statistics");
gtk_box_pack_start(GTK_BOX(h_button_box), chunk_bt1, FALSE, FALSE, 0);
gtk_widget_show(chunk_bt1);
g_signal_connect(chunk_bt1, "clicked", G_CALLBACK(on_chunk2_dlg), u_data);
-
+
graph_bt1 = gtk_button_new_with_label("Graph TSN");
gtk_box_pack_start(GTK_BOX(h_button_box), graph_bt1, FALSE, FALSE, 0);
gtk_widget_show(graph_bt1);
static void sctp_analyse_cb(struct sctp_analyse* u_data, gboolean ext)
{
- guint8* ip_src;
- guint16 srcport;
- guint8* ip_dst;
- guint16 dstport;
GList *list, *framelist;
dfilter_t *sfcode;
capture_file *cf;
- epan_dissect_t *edt;
- gint err;
- gchar *err_info;
+ epan_dissect_t edt;
gboolean frame_matched, frame_found = FALSE;
frame_data *fdata;
gchar filter_text[256];
g_strlcpy(filter_text,"sctp",250);
if (!dfilter_compile(filter_text, &sfcode)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, dfilter_error_msg);
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", dfilter_error_msg);
return;
}
return; /* if we exit here it's an error */
/* dissect the current frame */
- if (!wtap_seek_read(cf->wth, fdata->file_off, &cf->pseudo_header,
- cf->pd, fdata->cap_len, &err, &err_info)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
- cf_read_error_message(err, err_info), cf->filename);
- return;
- }
+ if (!cf_read_frame(cf, fdata))
+ return; /* error reading the frame */
- edt = epan_dissect_new(TRUE, FALSE);
- epan_dissect_prime_dfilter(edt, sfcode);
- epan_dissect_run(edt, &cf->pseudo_header, cf->pd, fdata, NULL);
- frame_matched = dfilter_apply_edt(sfcode, edt);
+ epan_dissect_init(&edt, TRUE, FALSE);
+ epan_dissect_prime_dfilter(&edt, sfcode);
+ epan_dissect_run(&edt, &cf->pseudo_header, cf->pd, fdata, NULL);
+ frame_matched = dfilter_apply_edt(sfcode, &edt);
/* if it is not an sctp frame, show the dialog */
if (frame_matched != 1) {
- epan_dissect_free(edt);
+ epan_dissect_cleanup(&edt);
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
"Please choose an SCTP packet!");
return;
}
- ip_src = g_malloc(edt->pi.net_src.len);
- memcpy(ip_src, edt->pi.net_src.data, edt->pi.net_src.len);
- ip_dst = g_malloc(edt->pi.net_dst.len);
- memcpy(ip_dst, edt->pi.net_dst.data, edt->pi.net_dst.len);
- srcport = edt->pi.srcport;
- dstport = edt->pi.destport;
list = g_list_first(sctp_stat_get_info()->assoc_info_list);
while (list)
u_data->analyse_nb = NULL;
u_data->window = NULL;
u_data->num_children = 0;
- cf_retap_packets(&cfile, FALSE);
+ cf_retap_packets(&cfile);
sctp_analyse_cb(u_data, TRUE);
sctp_set_filter(NULL, u_data);
}
+#ifdef MAIN_MENU_USE_UIMANAGER
+void sctp_analyse_start(GtkAction *action _U_, gpointer user_data _U_)
+#else
void sctp_analyse_start(GtkWidget *w _U_, gpointer data _U_)
+#endif
{
struct sctp_analyse * u_data;
if (sctp_stat_get_info()->is_registered == FALSE)
register_tap_listener_sctp_stat();
/* (redissect all packets) */
-
+
sctp_stat_scan();
u_data = g_malloc(sizeof(struct sctp_analyse));
u_data->window = NULL;
u_data->num_children = 0;
- cf_retap_packets(&cfile, FALSE);
+ cf_retap_packets(&cfile);
sctp_analyse_cb(u_data, FALSE);
}
void
register_tap_listener_sctp_analyse(void)
{
- register_stat_menu_item("SCTP/Analyse this Association", REGISTER_STAT_GROUP_TELEPHONY,
+#ifdef MAIN_MENU_USE_UIMANAGER
+#else
+ register_stat_menu_item("S_CTP/Analyse this Association", REGISTER_STAT_GROUP_TELEPHONY,
sctp_analyse_start, NULL, NULL, NULL);
+#endif
}