aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/sctp_assoc_analyse.c
diff options
context:
space:
mode:
authorMichael Tüxen <tuexen@fh-muenster.de>2005-03-22 10:25:07 +0000
committerMichael Tüxen <tuexen@fh-muenster.de>2005-03-22 10:25:07 +0000
commitab64f9503945489f3e1787adc57fbd48aa16f9cb (patch)
tree6ff4364ab5a8175086c3986b4adc3f95f551ebbc /gtk/sctp_assoc_analyse.c
parent29e060154407b885bbeadc51003794984a79065c (diff)
From Irene Ruengeler: Bugfixes and support of chunk statistics per end point.
Some cleanups of the code. svn path=/trunk/; revision=13858
Diffstat (limited to 'gtk/sctp_assoc_analyse.c')
-rw-r--r--gtk/sctp_assoc_analyse.c312
1 files changed, 188 insertions, 124 deletions
diff --git a/gtk/sctp_assoc_analyse.c b/gtk/sctp_assoc_analyse.c
index 4b9047a10b..6a76e603fd 100644
--- a/gtk/sctp_assoc_analyse.c
+++ b/gtk/sctp_assoc_analyse.c
@@ -41,17 +41,7 @@
#include "sctp_stat.h"
-struct v4addr {
-address_type type;
-int len;
-guint32 addr;
-};
-
-struct v6addr {
-address_type type;
-int len;
-guint8 addr[16];
-};
+static sctp_assoc_info_t static_assoc;
void
decrease_childcount(struct sctp_analyse *parent)
@@ -79,14 +69,14 @@ remove_child(struct sctp_udata *child, struct sctp_analyse *parent)
}
static void
-on_destroy(GtkObject *object _U_, gpointer user_data)
+on_destroy(GtkObject *object _U_, gpointer user_data)
{
-struct sctp_analyse *u_data;
-guint16 i, j;
-GList *list;
-struct sctp_udata *child_data;
+ struct sctp_analyse *u_data;
+ guint16 i, j;
+ GList *list;
+ struct sctp_udata *child_data;
-u_data=(struct sctp_analyse*)user_data;
+ u_data=(struct sctp_analyse*)user_data;
if (u_data->window)
{
@@ -107,6 +97,7 @@ u_data=(struct sctp_analyse*)user_data;
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);
@@ -119,14 +110,26 @@ u_data=(struct sctp_analyse*)user_data;
}
static void
-on_notebook_switch_page(void)
+on_notebook_switch_page()
{
}
-static void on_error_bt(GtkWidget *widget _U_, struct sctp_analyse* u_data)
+static void on_chunk_stat_bt(GtkWidget *widget _U_, struct sctp_analyse* u_data)
{
+ sctp_assoc_info_t* assinfo=NULL;
+ int i;
- sctp_error_dlg_show(u_data->assoc);
+ 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++)
+ {
+ assinfo->chunk_count[i]=static_assoc.chunk_count[i];
+ assinfo->ep1_chunk_count[i]=static_assoc.ep1_chunk_count[i];
+ assinfo->ep2_chunk_count[i]=static_assoc.ep2_chunk_count[i];
+ }
+ u_data->assoc=assinfo;
+ sctp_chunk_dlg_show(u_data);
}
static void on_close_dlg(GtkWidget *widget _U_, struct sctp_analyse* u_data)
@@ -139,6 +142,28 @@ static void on_close_dlg(GtkWidget *widget _U_, struct sctp_analyse* u_data)
}
}
+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_chunk_stat_dlg_show(1, u_data);
+}
+
+static void on_chunk2_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_chunk_stat_dlg_show(2, u_data);
+}
+
static void on_graph1_dlg(GtkWidget *widget _U_, struct sctp_analyse* u_data)
{
create_graph(1, u_data);
@@ -162,17 +187,15 @@ static void on_graph_byte2_dlg(GtkWidget *widget _U_, struct sctp_analyse* u_dat
void
update_analyse_dlg(struct sctp_analyse* u_data)
{
-gchar label_txt[50];
-gchar *data[1];
-gchar field[1][32];
-gint added_row;
-GList *list;
-struct v4addr *v4=NULL;
-struct v6addr *v6=NULL;
-address *store=NULL;
-
-if (u_data->assoc==NULL)
- return;
+ gchar label_txt[50];
+ gchar *data[1];
+ gchar field[1][MAX_ADDRESS_LEN];
+ gint added_row;
+ GList *list;
+ address *store=NULL;
+
+ if (u_data->assoc==NULL)
+ return;
if (u_data->window != NULL)
{
@@ -203,7 +226,7 @@ if (u_data->assoc==NULL)
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->bytes_ep2), label_txt);
if (u_data->assoc->init==TRUE)
- gtk_frame_set_label(GTK_FRAME (u_data->analyse_nb->page2->addr_frame), "Complete list of IP-Addresses as provided in the INIT-Chunk");
+ gtk_frame_set_label(GTK_FRAME (u_data->analyse_nb->page2->addr_frame), "Complete list of IP-Addresses as provided in the INIT-Chunk");
else if (u_data->assoc->initack==TRUE && u_data->assoc->initack_dir==1)
gtk_frame_set_label(GTK_FRAME (u_data->analyse_nb->page2->addr_frame), "Complete list of IP-Addresses as provided in the INITACK-Chunk");
else
@@ -211,32 +234,30 @@ if (u_data->assoc==NULL)
- if (u_data->assoc->addr1!=NULL)
+ if (u_data->assoc->addr1!=NULL)
+ {
+ list = g_list_first(u_data->assoc->addr1);
+ while (list)
{
- list = g_list_first(u_data->assoc->addr1);
- while (list)
+ data[0]=&field[0][0];
+ store = (address *) (list->data);
+ if (store->type==AT_IPv4)
{
- data[0]=&field[0][0];
- store = (address *) (list->data);
- if (store->type==AT_IPv4)
- {
- v4 = (struct v4addr *)(list->data);
- g_snprintf(field[0], 30, "%s", ip_to_str((const guint8 *)&(v4->addr)));
- }
- else if (store->type==AT_IPv6)
- {
- v6 = (struct v6addr *)(list->data);
- g_snprintf(field[0], 30, "%s", ip6_to_str((const struct e_in6_addr *)&(v6->addr)));
- }
- 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 = g_list_next(list);
+ 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 = g_list_next(list);
}
- else
- {
+ }
+ else
+ {
return;
- }
+ }
g_snprintf(label_txt, 50,"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);
@@ -244,7 +265,7 @@ if (u_data->assoc==NULL)
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, 50,"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));
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->min_in), label_txt);
@@ -256,14 +277,14 @@ if (u_data->assoc==NULL)
}
else
{
- g_snprintf(label_txt, 50,"Used Number of Inbound Streams: %u",u_data->assoc->instream1);
+ g_snprintf(label_txt, 50,"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);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page2->max_out), label_txt);
}
if (u_data->assoc->initack==TRUE && u_data->assoc->initack_dir==2)
- gtk_frame_set_label(GTK_FRAME (u_data->analyse_nb->page3->addr_frame), "Complete list of IP-Addresses as provided in the INITACK-Chunk");
+ gtk_frame_set_label(GTK_FRAME (u_data->analyse_nb->page3->addr_frame), "Complete list of IP-Addresses as provided in the INITACK-Chunk");
else
gtk_frame_set_label(GTK_FRAME (u_data->analyse_nb->page3->addr_frame), "List of used IP-Addresses");
@@ -271,7 +292,7 @@ if (u_data->assoc==NULL)
if (u_data->assoc->addr2!=NULL)
{
- list = g_list_first(u_data->assoc->addr2);
+ list = g_list_first(u_data->assoc->addr2);
while (list)
{
@@ -279,14 +300,11 @@ if (u_data->assoc==NULL)
store = (address *) (list->data);
if (store->type==AT_IPv4)
{
-
- v4 = (struct v4addr *)(list->data);
- g_snprintf(field[0], 30, "%s", ip_to_str((const guint8 *)&(v4->addr)));
+ g_snprintf(field[0], 30, "%s", ip_to_str((const guint8 *)(store->data)));
}
else if (store->type==AT_IPv6)
{
- v6 = (struct v6addr *)(list->data);
- g_snprintf(field[0], 30, "%s", ip6_to_str((const struct e_in6_addr *)&(v6->addr)));
+ 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);
@@ -294,9 +312,9 @@ if (u_data->assoc==NULL)
}
}
else
- {
+ {
return;
- }
+ }
g_snprintf(label_txt, 50,"Port: %u",u_data->assoc->port2);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->port), label_txt);
@@ -305,7 +323,7 @@ if (u_data->assoc==NULL)
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, 50,"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));
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->min_in), label_txt);
@@ -317,7 +335,7 @@ if (u_data->assoc==NULL)
}
else
{
- g_snprintf(label_txt, 50,"Used Number of Inbound Streams: %u",u_data->assoc->instream2);
+ g_snprintf(label_txt, 50,"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);
gtk_label_set_text(GTK_LABEL(u_data->analyse_nb->page3->min_out), label_txt);
@@ -326,12 +344,13 @@ if (u_data->assoc==NULL)
static void analyse_window_set_title(struct sctp_analyse *u_data)
{
- char *title;
+ char *title;
+
if(!u_data->window){
return;
}
title = g_strdup_printf("SCTP Analyse Association: %s Port1 %u Port2 %u",
- cf_get_display_name(&cfile), u_data->assoc->port1, u_data->assoc->port2);
+ cf_get_display_name(&cfile), u_data->assoc->port1, u_data->assoc->port2);
gtk_window_set_title(GTK_WINDOW(u_data->window), title);
g_free(title);
}
@@ -342,7 +361,7 @@ void create_analyse_window(struct sctp_analyse* u_data)
GtkWidget *notebook;
GtkWidget *main_vb, *page1, *page2, *page3, *hbox, *vbox_l, *vbox_r, *addr_hb, *stat_fr;
GtkWidget *hbox_l1, *hbox_l2,*label, *h_button_box;
- GtkWidget *error_bt, *close_bt, *graph_bt1, *graph_bt2;
+ GtkWidget *chunk_stat_bt, *close_bt, *graph_bt1, *graph_bt2, *chunk_bt1;
u_data->analyse_nb = g_malloc(sizeof(struct notes));
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
@@ -411,10 +430,10 @@ void create_analyse_window(struct sctp_analyse* u_data)
gtk_button_box_set_child_ipadding(GTK_BUTTON_BOX (hbox), 4, 0);
gtk_widget_show(hbox);
- error_bt = gtk_button_new_with_label ("Show Errors");
- gtk_box_pack_start(GTK_BOX(hbox), error_bt, FALSE, FALSE, 0);
- gtk_widget_show(error_bt);
- SIGNAL_CONNECT(error_bt, "clicked", on_error_bt, u_data);
+ chunk_stat_bt = gtk_button_new_with_label ("Chunk Statistics");
+ gtk_box_pack_start(GTK_BOX(hbox), chunk_stat_bt, FALSE, FALSE, 0);
+ gtk_widget_show(chunk_stat_bt);
+ SIGNAL_CONNECT(chunk_stat_bt, "clicked", on_chunk_stat_bt, u_data);
close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE);
@@ -433,7 +452,7 @@ void create_analyse_window(struct sctp_analyse* u_data)
u_data->analyse_nb->page2 = g_malloc(sizeof(struct page));
- u_data->analyse_nb->page2->addr_frame = gtk_frame_new(NULL);
+ u_data->analyse_nb->page2->addr_frame = gtk_frame_new(NULL);
gtk_container_add(GTK_CONTAINER(page2), u_data->analyse_nb->page2->addr_frame);
addr_hb = gtk_hbox_new(FALSE, 3);
@@ -456,7 +475,7 @@ void create_analyse_window(struct sctp_analyse* u_data)
gtk_widget_show(u_data->analyse_nb->page2->scrolled_window);
stat_fr = gtk_frame_new(NULL);
- gtk_container_add(GTK_CONTAINER(page2), stat_fr);
+ gtk_container_add(GTK_CONTAINER(page2), stat_fr);
hbox = gtk_hbox_new(FALSE,3);
gtk_container_border_width(GTK_CONTAINER(hbox), 5);
@@ -465,6 +484,8 @@ void create_analyse_window(struct sctp_analyse* u_data)
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);
@@ -509,6 +530,11 @@ void create_analyse_window(struct sctp_analyse* u_data)
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_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);
+ SIGNAL_CONNECT(chunk_bt1, "clicked", on_chunk1_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);
@@ -528,7 +554,8 @@ void create_analyse_window(struct sctp_analyse* u_data)
label = gtk_label_new(" Endpoint 1 ");
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page2, label);
-/* same page for endpoint 2*/
+ /* same page for endpoint 2*/
+
page3 = gtk_vbox_new(FALSE, 8);
gtk_container_set_border_width(GTK_CONTAINER(page3), 8);
u_data->analyse_nb->page3 = g_malloc(sizeof(struct page));
@@ -542,10 +569,9 @@ void create_analyse_window(struct sctp_analyse* u_data)
u_data->analyse_nb->page3->scrolled_window = scrolled_window_new(NULL, NULL);
WIDGET_SET_SIZE(u_data->analyse_nb->page3->scrolled_window, 560, 100);
- u_data->analyse_nb->page3->scrolled_window = scrolled_window_new(NULL, NULL);
- WIDGET_SET_SIZE(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_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);
@@ -557,7 +583,7 @@ void create_analyse_window(struct sctp_analyse* u_data)
gtk_widget_show(u_data->analyse_nb->page3->scrolled_window);
stat_fr = gtk_frame_new(NULL);
- gtk_container_add(GTK_CONTAINER(page3), stat_fr);
+ gtk_container_add(GTK_CONTAINER(page3), stat_fr);
hbox = gtk_hbox_new(FALSE,3);
gtk_container_border_width(GTK_CONTAINER(hbox), 5);
@@ -565,7 +591,7 @@ void create_analyse_window(struct sctp_analyse* u_data)
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);
@@ -590,7 +616,7 @@ void create_analyse_window(struct sctp_analyse* u_data)
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);
@@ -608,7 +634,12 @@ void create_analyse_window(struct sctp_analyse* u_data)
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_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);
+ SIGNAL_CONNECT(chunk_bt1, "clicked", on_chunk2_dlg, u_data);
+
graph_bt1 = gtk_button_new_with_label("Graph");
gtk_box_pack_start(GTK_BOX(h_button_box), graph_bt1, FALSE, FALSE, 0);
gtk_widget_show(graph_bt1);
@@ -643,40 +674,52 @@ void create_analyse_window(struct sctp_analyse* u_data)
void assoc_analyse(sctp_assoc_info_t* assoc)
{
-struct sctp_analyse* u_data;
+ struct sctp_analyse* u_data;
+ int i;
u_data = g_malloc(sizeof(struct sctp_analyse));
u_data->assoc=assoc;
+ u_data->assoc->addr_chunk_count=assoc->addr_chunk_count;
u_data->window=NULL;
u_data->analyse_nb=NULL;
u_data->children=NULL;
u_data->num_children=0;
+ static_assoc.addr_chunk_count=assoc->addr_chunk_count;
+ static_assoc.port1=assoc->port1;
+ static_assoc.port2=assoc->port2;
+ for (i=0; i<NUM_CHUNKS; i++)
+ {
+ static_assoc.chunk_count[i]=assoc->chunk_count[i];
+ static_assoc.ep1_chunk_count[i]=assoc->ep1_chunk_count[i];
+ static_assoc.ep2_chunk_count[i]=assoc->ep2_chunk_count[i];
+ }
set_analyse_child(u_data);
increase_analyse_childcount();
-
+ static_assoc.addr_chunk_count=assoc->addr_chunk_count;
create_analyse_window(u_data);
}
void sctp_analyse_cb(struct sctp_analyse* u_data)
{
-guint32 ip_src;
-guint16 srcport;
-guint32 ip_dst;
-guint16 dstport;
-GList *list, *srclist, *dstlist;
-dfilter_t *sfcode;
-capture_file *cf;
-epan_dissect_t *edt;
-gint err;
-gchar *err_info;
-gboolean frame_matched;
-frame_data *fdata;
-gchar filter_text[256];
-sctp_assoc_info_t* assoc=NULL;
-struct v4addr *src, *dst;
-
- strcpy(filter_text,"sctp && ip");
+ guint8* ip_src;
+ guint16 srcport;
+ guint8* ip_dst;
+ guint16 dstport;
+ GList *list, *srclist, *dstlist;
+ dfilter_t *sfcode;
+ capture_file *cf;
+ epan_dissect_t *edt;
+ gint err;
+ gchar *err_info;
+ gboolean frame_matched;
+ frame_data *fdata;
+ gchar filter_text[256];
+ sctp_assoc_info_t* assoc=NULL;
+ address *src, *dst;
+ int i;
+
+ strcpy(filter_text,"sctp");
if (!dfilter_compile(filter_text, &sfcode)) {
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, dfilter_error_msg);
return;
@@ -711,8 +754,10 @@ struct v4addr *src, *dst;
return;
}
- g_memmove(&ip_src, edt->pi.src.data, 4);
- g_memmove(&ip_dst, edt->pi.dst.data, 4);
+ ip_src = malloc(edt->pi.src.len);
+ memcpy(ip_src, edt->pi.src.data, edt->pi.src.len);
+ ip_dst = malloc(edt->pi.dst.len);
+ memcpy(ip_dst, edt->pi.dst.data, edt->pi.dst.len);
srcport = edt->pi.srcport;
dstport = edt->pi.destport;
@@ -727,18 +772,28 @@ struct v4addr *src, *dst;
srclist = g_list_first(assoc->addr1);
while(srclist)
{
- src = (struct v4addr *)(srclist->data);
+ src = (address *)(srclist->data);
- if (src->addr == ip_src)
+ if (*src->data == *ip_src)
{
dstlist = g_list_first(assoc->addr2);
while(dstlist)
{
- dst = (struct v4addr *)(dstlist->data);
- if (dst->addr == ip_dst)
+ dst = (address *)(dstlist->data);
+ if (*dst->data == *ip_dst)
{
u_data->assoc=assoc;
- create_analyse_window(u_data);
+ u_data->assoc->addr_chunk_count=assoc->addr_chunk_count;
+ static_assoc.addr_chunk_count=assoc->addr_chunk_count;
+ static_assoc.port1=assoc->port1;
+ static_assoc.port2=assoc->port2;
+ for (i=0; i<NUM_CHUNKS; i++)
+ {
+ static_assoc.chunk_count[i]=assoc->chunk_count[i];
+ static_assoc.ep1_chunk_count[i]=assoc->ep1_chunk_count[i];
+ static_assoc.ep2_chunk_count[i]=assoc->ep2_chunk_count[i];
+ }
+ create_analyse_window(u_data);
return;
}
else
@@ -748,26 +803,35 @@ struct v4addr *src, *dst;
else
srclist = g_list_next(srclist);
}
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
- "Assoc not found!");
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Assoc not found!");
return;
}
else if (assoc->port2 == srcport && assoc->port1 == dstport)
- {
+ {
srclist = g_list_first(assoc->addr2);
while(srclist)
{
- src = (struct v4addr *)(srclist->data);
- if (src->addr == ip_src)
+ src = (address *)(srclist->data);
+ if (*src->data == *ip_src)
{
dstlist = g_list_first(assoc->addr1);
while(dstlist)
{
- dst = (struct v4addr *)(dstlist->data);
- if (dst->addr == ip_dst)
+ dst = (address *)(dstlist->data);
+ if (*dst->data == *ip_dst)
{
u_data->assoc=assoc;
- create_analyse_window(u_data);
+ u_data->assoc->addr_chunk_count=assoc->addr_chunk_count;
+ static_assoc.addr_chunk_count=assoc->addr_chunk_count;
+ static_assoc.port1=assoc->port1;
+ static_assoc.port2=assoc->port2;
+ for (i=0; i<NUM_CHUNKS; i++)
+ {
+ static_assoc.chunk_count[i]=assoc->chunk_count[i];
+ static_assoc.ep1_chunk_count[i]=assoc->ep1_chunk_count[i];
+ static_assoc.ep2_chunk_count[i]=assoc->ep2_chunk_count[i];
+ }
+ create_analyse_window(u_data);
return;
}
else
@@ -777,8 +841,7 @@ struct v4addr *src, *dst;
else
srclist = g_list_next(srclist);
}
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
- "Assoc not found!");
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Assoc not found!");
return;
}
else
@@ -790,14 +853,14 @@ struct v4addr *src, *dst;
void sctp_analyse_start(GtkWidget *w _U_, gpointer data _U_)
{
-struct sctp_analyse * u_data;
+ struct sctp_analyse * u_data;
/* Register the tap listener */
if (sctp_stat_get_info()->is_registered==FALSE)
- register_tap_listener_sctp_stat();
- /* (redissect all packets) */
+ register_tap_listener_sctp_stat();
+ /* (redissect all packets) */
- sctp_stat_scan();
+ sctp_stat_scan();
u_data = g_malloc(sizeof(struct sctp_analyse));
u_data->assoc=NULL;
@@ -805,6 +868,7 @@ struct sctp_analyse * u_data;
u_data->analyse_nb=NULL;
u_data->window=NULL;
u_data->num_children=0;
+
cf_retap_packets(&cfile);
sctp_analyse_cb(u_data);
}
@@ -814,5 +878,5 @@ void
register_tap_listener_sctp_analyse(void)
{
register_tap_menu_item("SCTP/Analyse Association", REGISTER_TAP_GROUP_NONE,
- sctp_analyse_start, NULL, NULL, NULL);
+ sctp_analyse_start, NULL, NULL, NULL);
}