diff options
author | Michael Tüxen <tuexen@fh-muenster.de> | 2005-03-22 10:25:07 +0000 |
---|---|---|
committer | Michael Tüxen <tuexen@fh-muenster.de> | 2005-03-22 10:25:07 +0000 |
commit | ab64f9503945489f3e1787adc57fbd48aa16f9cb (patch) | |
tree | 6ff4364ab5a8175086c3986b4adc3f95f551ebbc /gtk/sctp_assoc_analyse.c | |
parent | 29e060154407b885bbeadc51003794984a79065c (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.c | 312 |
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); } |