diff options
-rw-r--r-- | gtk/sctp_assoc_analyse.c | 2 | ||||
-rw-r--r-- | gtk/sctp_byte_graph_dlg.c | 18 | ||||
-rw-r--r-- | gtk/sctp_graph_dlg.c | 22 | ||||
-rw-r--r-- | gtk/sctp_stat.c | 237 | ||||
-rw-r--r-- | gtk/sctp_stat_dlg.c | 126 |
5 files changed, 117 insertions, 288 deletions
diff --git a/gtk/sctp_assoc_analyse.c b/gtk/sctp_assoc_analyse.c index e5edececb2..ee1f136d7a 100644 --- a/gtk/sctp_assoc_analyse.c +++ b/gtk/sctp_assoc_analyse.c @@ -853,7 +853,7 @@ static void sctp_analyse_cb(struct sctp_analyse* u_data, gboolean ext) gchar filter_text[256]; sctp_assoc_info_t* assoc = NULL; int i; - guint32 *fn; //frame_number + guint32 *fn; strcpy(filter_text,"sctp"); if (!dfilter_compile(filter_text, &sfcode)) { diff --git a/gtk/sctp_byte_graph_dlg.c b/gtk/sctp_byte_graph_dlg.c index b5a192f72c..9473a2ed71 100644 --- a/gtk/sctp_byte_graph_dlg.c +++ b/gtk/sctp_byte_graph_dlg.c @@ -904,8 +904,8 @@ on_button_press (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_udata { gdk_draw_rectangle(u_data->io->pixmap,u_data->io->draw_area->style->white_gc, FALSE, - (gint)floor(MIN(u_data->io->x_old,u_data->io->x_new)), - (gint)floor(MIN(u_data->io->y_old,u_data->io->y_new)), + floor(MIN(u_data->io->x_old,u_data->io->x_new)), + floor(MIN(u_data->io->y_old,u_data->io->y_new)), (gint)abs((long)(u_data->io->x_new-u_data->io->x_old)), (gint)abs((long)(u_data->io->y_new-u_data->io->y_old))); ios=(sctp_graph_t *)OBJECT_GET_DATA(u_data->io->draw_area, "sctp_graph_t"); @@ -973,10 +973,10 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda if (abs((long)(event->x-u_data->io->x_old))>10 || abs((long)(event->y-u_data->io->y_old))>10) { - u_data->io->rect_x_min = (gint)floor(MIN(u_data->io->x_old,event->x)); - u_data->io->rect_x_max = (gint)ceil(MAX(u_data->io->x_old,event->x)); - u_data->io->rect_y_min = (gint)floor(MIN(u_data->io->y_old,event->y)); - u_data->io->rect_y_max = (gint)ceil(MAX(u_data->io->y_old,event->y)); + u_data->io->rect_x_min = floor(MIN(u_data->io->x_old,event->x)); + u_data->io->rect_x_max = ceil(MAX(u_data->io->x_old,event->x)); + u_data->io->rect_y_min = floor(MIN(u_data->io->y_old,event->y)); + u_data->io->rect_y_max = ceil(MAX(u_data->io->y_old,event->y)); gdk_draw_rectangle(u_data->io->pixmap,u_data->io->draw_area->style->black_gc, FALSE, u_data->io->rect_x_min, u_data->io->rect_y_min, @@ -996,8 +996,8 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda u_data->io->draw_area->allocation.width, u_data->io->draw_area->allocation.height); - x1_tmp=(unsigned int)floor(u_data->io->min_x+((u_data->io->x_old-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); - x2_tmp=(unsigned int)floor(u_data->io->min_x+((event->x-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); + x1_tmp=floor(u_data->io->min_x+((u_data->io->x_old-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); + x2_tmp=floor(u_data->io->min_x+((event->x-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); helpx=MIN(x1_tmp, x2_tmp); if (helpx==x2_tmp) { @@ -1062,7 +1062,7 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda x_value = ((event->x-LEFT_BORDER-u_data->io->offset) * ((u_data->io->x2_tmp_sec+u_data->io->x2_tmp_usec/1000000.0)-(u_data->io->x1_tmp_sec+u_data->io->x1_tmp_usec/1000000.0)) / (u_data->io->pixmap_width-LEFT_BORDER-u_data->io->offset))+u_data->io->x1_tmp_sec+u_data->io->x1_tmp_usec/1000000.0; y_value = floor((u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-event->y) * (max_tsn - min_tsn) / (u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset)) + min_tsn; text_color = u_data->io->draw_area->style->black_gc; - g_snprintf(label_string, 30, "(%.6lf, %u)", x_value, y_value); + g_snprintf(label_string, 30, "(%.6f, %u)", x_value, y_value); label_set = TRUE; gdk_draw_line(u_data->io->pixmap,text_color, event->x-2, event->y, event->x+2, event->y); diff --git a/gtk/sctp_graph_dlg.c b/gtk/sctp_graph_dlg.c index 698d116012..cfe547f039 100644 --- a/gtk/sctp_graph_dlg.c +++ b/gtk/sctp_graph_dlg.c @@ -946,10 +946,10 @@ on_button_press (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_udata { gdk_draw_rectangle(u_data->io->pixmap,u_data->io->draw_area->style->white_gc, FALSE, - (gint)floor(MIN(u_data->io->x_old,u_data->io->x_new)), - (gint)floor(MIN(u_data->io->y_old,u_data->io->y_new)), - (gint)floor(abs((long)(u_data->io->x_new-u_data->io->x_old))), - (gint)floor(abs((long)(u_data->io->y_new-u_data->io->y_old)))); + floor(MIN(u_data->io->x_old,u_data->io->x_new)), + floor(MIN(u_data->io->y_old,u_data->io->y_new)), + floor(abs((long)(u_data->io->x_new-u_data->io->x_old))), + floor(abs((long)(u_data->io->y_new-u_data->io->y_old)))); ios=(sctp_graph_t *)OBJECT_GET_DATA(u_data->io->draw_area, "sctp_graph_t"); if(!ios){ @@ -1014,10 +1014,10 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda event->x = LEFT_BORDER+u_data->io->offset; if (abs((long)(event->x-u_data->io->x_old))>10 || abs((long)(event->y-u_data->io->y_old))>10) { - u_data->io->rect_x_min = (gint)floor(MIN(u_data->io->x_old,event->x)); - u_data->io->rect_x_max = (gint)ceil(MAX(u_data->io->x_old,event->x)); - u_data->io->rect_y_min = (gint)floor(MIN(u_data->io->y_old,event->y)); - u_data->io->rect_y_max = (gint)ceil(MAX(u_data->io->y_old,event->y))+POINT_SIZE; + u_data->io->rect_x_min = floor(MIN(u_data->io->x_old,event->x)); + u_data->io->rect_x_max = ceil(MAX(u_data->io->x_old,event->x)); + u_data->io->rect_y_min = floor(MIN(u_data->io->y_old,event->y)); + u_data->io->rect_y_max = ceil(MAX(u_data->io->y_old,event->y))+POINT_SIZE; gdk_draw_rectangle(u_data->io->pixmap,u_data->io->draw_area->style->black_gc, FALSE, u_data->io->rect_x_min, u_data->io->rect_y_min, @@ -1037,8 +1037,8 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda u_data->io->draw_area->allocation.width, u_data->io->draw_area->allocation.height); - x1_tmp=(unsigned int)floor(u_data->io->min_x+((u_data->io->x_old-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); - x2_tmp=(unsigned int)floor(u_data->io->min_x+((event->x-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); + x1_tmp=floor(u_data->io->min_x+((u_data->io->x_old-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); + x2_tmp=floor(u_data->io->min_x+((event->x-LEFT_BORDER-u_data->io->offset)*u_data->io->tmp_width/u_data->io->axis_width)); helpx=MIN(x1_tmp, x2_tmp); if (helpx==x2_tmp) { @@ -1103,7 +1103,7 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda x_value = ((event->x-LEFT_BORDER-u_data->io->offset) * ((u_data->io->x2_tmp_sec+u_data->io->x2_tmp_usec/1000000.0)-(u_data->io->x1_tmp_sec+u_data->io->x1_tmp_usec/1000000.0)) / (u_data->io->pixmap_width-LEFT_BORDER-u_data->io->offset))+u_data->io->x1_tmp_sec+u_data->io->x1_tmp_usec/1000000.0; y_value = floor((u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-event->y) * (max_tsn - min_tsn) / (u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset)) + min_tsn; text_color = u_data->io->draw_area->style->black_gc; - g_snprintf(label_string, 30, "(%.6lf, %u)", x_value, y_value); + g_snprintf(label_string, 30, "(%.6f, %u)", x_value, y_value); label_set = TRUE; gdk_draw_line(u_data->io->pixmap,text_color, event->x-2, event->y, event->x+2, event->y); diff --git a/gtk/sctp_stat.c b/gtk/sctp_stat.c index ff0d5bebaf..e86dd812c7 100644 --- a/gtk/sctp_stat.c +++ b/gtk/sctp_stat.c @@ -307,7 +307,7 @@ static gint sctp_assoc_vtag_cmp(gconstpointer aa, gconstpointer bb) (a->port2 == b->port2) && (a->verification_tag1 == b->verification_tag1) && a->verification_tag1==0 && a->initiate_tag != 0 && (a->initiate_tag != b->initiate_tag )) - return(ASSOC_NOT_FOUND); //two INITs that belong to different assocs + return(ASSOC_NOT_FOUND); /* assoc known*/ if ((a->port1 == b->port1) && @@ -354,236 +354,6 @@ static gint sctp_assoc_vtag_cmp(gconstpointer aa, gconstpointer bb) return(ASSOC_NOT_FOUND); } -/* -static gint sctp_assoc_address_cmp(gconstpointer aa, gconstpointer bb) -{ - GList *srclist, *dstlist; - const struct _sctp_tmp_info* a = aa; - const struct _sctp_assoc_info* b = bb; - address *srcstore=NULL; - address *dststore=NULL; - address *src=NULL; - address *dst=NULL; - gboolean src_v4=FALSE; - gboolean src_v6=FALSE; - gboolean dst_v4=FALSE; - gboolean dst_v6=FALSE; - guint8* addr; - - src = g_malloc(sizeof(address)); - if (a->src.type == AT_IPv4) - { - src->type = AT_IPv4; - src->len = 4; - src_v4 = TRUE; - } - else if (a->src.type==AT_IPv6) - { - src->type = AT_IPv6; - src->len = 16; - src_v6 = TRUE; - } - addr = g_malloc(src->len); - memcpy(addr, a->src.data, src->len); - src->data = addr; - - dst = g_malloc(sizeof(address)); - if (a->dst.type == AT_IPv4) - { - dst->type = AT_IPv4; - dst->len = 4; - dst_v4 = TRUE; - } - else if (a->dst.type==AT_IPv6) - { - dst->type = AT_IPv6; - dst->len = 16; - dst_v6 = TRUE; - } - addr = g_malloc(dst->len); - memcpy(addr, a->dst.data, dst->len); - dst->data = addr; - - srclist = g_list_first(b->addr1); - while (srclist) - { - srcstore = (address *) (srclist->data); - if (srcstore->type==AT_IPv4 && src_v4==TRUE) - { - if (*src->data==*srcstore->data && a->port1 == b->port1) - { - dstlist = g_list_first(b->addr2); - while (dstlist) - { - dststore = (address *) (dstlist->data); - if ((dststore->type==AT_IPv4 && dst_v4==TRUE) ||(dststore->type==AT_IPv6 && dst_v6==TRUE) ) - { - if (*dst->data==*dststore->data && a->port2 == b->port2) - { - if ((a->verification_tag1 !=0)&& (b->verification_tag1 == 0)&& (b->verification_tag2 !=0)) - return ADDRESS_FORWARD_ADD_FORWARD_VTAG; - else - return ADDRESS_FORWARD_STREAM; - } - else - dstlist=g_list_next(dstlist); - } - else - dstlist=g_list_next(dstlist); - } - srclist=g_list_next(srclist); - } - else - srclist=g_list_next(srclist); - } - else if (srcstore->type==AT_IPv6 && src_v6==TRUE) - { - if (*src->data == *srcstore->data && a->port1 == b->port1) - { - dstlist = g_list_first(b->addr2); - while (dstlist) - { - dststore = (address *) (dstlist->data); - if ((dststore->type==AT_IPv4 && dst_v4==TRUE) || (dststore->type==AT_IPv6 && dst_v6==TRUE)) - { - if (*dst->data==*dststore->data && a->port2 == b->port2) - { - if ((a->verification_tag1 !=0)&& (b->verification_tag1 == 0)&& (b->verification_tag2 !=0)) - return ADDRESS_FORWARD_ADD_FORWARD_VTAG; - else - return ADDRESS_FORWARD_STREAM; - } - else - dstlist=g_list_next(dstlist); - } - else - dstlist=g_list_next(dstlist); - } - srclist=g_list_next(srclist); - } - else - srclist=g_list_next(srclist); - } - else - srclist=g_list_next(srclist); - } - - g_free(src); - g_free(dst); - - src = g_malloc(sizeof(address)); - if (a->dst.type == AT_IPv4) - { - src->type = AT_IPv4; - src->len = 4; - src_v4 = TRUE; - } - else if (a->dst.type==AT_IPv6) - { - src->type = AT_IPv6; - src->len = 16; - src_v6 = TRUE; - } - addr = g_malloc(src->len); - memcpy(addr, a->dst.data, src->len); - src->data = addr; - - dst = g_malloc(sizeof(address)); - if (a->src.type == AT_IPv4) - { - dst->type = AT_IPv4; - dst->len = 4; - dst_v4 = TRUE; - } - else if (a->src.type==AT_IPv6) - { - dst->type = AT_IPv6; - dst->len = 16; - dst_v6 = TRUE; - } - addr = g_malloc(dst->len); - memcpy(addr, a->src.data, dst->len); - dst->data = addr; - - srclist = g_list_first(b->addr1); - while (srclist) - { - srcstore = (address *) (srclist->data); - if (srcstore->type==AT_IPv4 && src_v4==TRUE) - { - if (*src->data==*srcstore->data && a->port2 == b->port1) - { - dstlist = g_list_first(b->addr2); - while (dstlist) - { - dststore = (address *) (dstlist->data); - if ((dststore->type==AT_IPv4 && src_v4==TRUE) || (dststore->type==AT_IPv6 && src_v6==TRUE)) - { - if (*dst->data==*dststore->data && a->port1 == b->port2) - { - if ((a->verification_tag1 ==b->verification_tag2)&& (b->verification_tag1 == 0)) - return ADDRESS_BACKWARD_ADD_FORWARD_VTAG; - else if ((a->verification_tag1 !=0) && (b->verification_tag1 != 0)&& (b->verification_tag2 == 0)) - return ADDRESS_BACKWARD_ADD_BACKWARD_VTAG; - else - return ADDRESS_BACKWARD_STREAM; - } - else - dstlist=g_list_next(dstlist); - } - else - dstlist=g_list_next(dstlist); - } - srclist=g_list_next(srclist); - } - else - srclist=g_list_next(srclist); - } - else if (srcstore->type==AT_IPv6 && src_v6==TRUE) - { - if (*src->data == *srcstore->data && a->port2 == b->port1) - { - dstlist = g_list_first(b->addr2); - while (dstlist) - { - dststore = (address *) (dstlist->data); - if ((dststore->type==AT_IPv4 && src_v4==TRUE) || (dststore->type==AT_IPv6 && src_v6==TRUE)) - { - if (*dst->data==*dststore->data && a->port1 == b->port2) - { - if ((a->verification_tag1 ==b->verification_tag2)&& (b->verification_tag1 == 0)) - return ADDRESS_BACKWARD_ADD_FORWARD_VTAG; - else if ((a->verification_tag1 !=0) && (b->verification_tag1 != 0)&& (b->verification_tag2 == 0)) - return ADDRESS_BACKWARD_ADD_BACKWARD_VTAG; - else - return ADDRESS_BACKWARD_STREAM; - } - else - dstlist=g_list_next(dstlist); - } - else - dstlist=g_list_next(dstlist); - } - srclist=g_list_next(srclist); - } - else - srclist=g_list_next(srclist); - } - else - srclist=g_list_next(srclist); - } - - - g_free(src); - g_free(dst); - return ASSOC_NOT_FOUND; -} -*/ - - - - - static sctp_assoc_info_t * find_assoc(sctp_tmp_info_t * needle) { sctp_allassocs_info_t *assoc_info; @@ -754,8 +524,8 @@ static sctp_assoc_info_t * add_address(address * vadd, sctp_assoc_info_t *info, if (direction == 1) info->addr1 = g_list_append(info->addr1, vadd); else if (direction==2) - info->addr2 = g_list_append(info->addr2, vadd); - + info->addr2 = g_list_append(info->addr2, vadd); + return info; } @@ -871,6 +641,7 @@ packet(void *tapdata _U_, packet_info *pinfo , epan_dissect_t *edt _U_ , const v info->n_tvbs = tmp_info.n_tvbs; info->init = FALSE; info->initack = FALSE; + info->check_address = FALSE; info->direction = 0; info = calc_checksum(sctp_info, info); info->n_packets = 1; diff --git a/gtk/sctp_stat_dlg.c b/gtk/sctp_stat_dlg.c index 435c86f5c1..c11407c929 100644 --- a/gtk/sctp_stat_dlg.c +++ b/gtk/sctp_stat_dlg.c @@ -50,12 +50,13 @@ static GtkWidget *sctp_stat_dlg=NULL; static GtkWidget *clist = NULL; static GList *last_list = NULL; static gchar *filter_string = NULL; -static sctp_assoc_info_t* selected_stream = NULL; /* current selection */ +static sctp_assoc_info_t* selected_stream=NULL; /* current selection */ static sctp_allassocs_info_t *sctp_assocs=NULL; static guint16 n_children=0; static GtkWidget *bt_afilter = NULL, *bt_unselect=NULL, *bt_analyse=NULL, *bt_filter=NULL; +static gboolean prevent_update = FALSE, filter_applied = FALSE; -#define NUM_COLS 7 +#define NUM_COLS 9 #define FRAME_LIMIT 8 typedef struct column_arrows { @@ -84,6 +85,8 @@ dlg_destroy(void) g_list_free(sctp_assocs->children); sctp_assocs->children = NULL; sctp_stat_dlg = NULL; + prevent_update = FALSE; + filter_applied = FALSE; } void @@ -127,6 +130,8 @@ static void add_to_clist(sctp_assoc_info_t* assinfo) g_snprintf(field[4], 20, "%u", assinfo->n_checksum_errors); g_snprintf(field[5], 20, "%u", assinfo->n_data_chunks); g_snprintf(field[6], 20, "%u", assinfo->n_data_bytes); + g_snprintf(field[7], 20, "0x%x", assinfo->verification_tag1); + g_snprintf(field[8], 20, "0x%x", assinfo->verification_tag2); added_row = gtk_clist_append(GTK_CLIST(clist), data); gtk_clist_set_row_data(GTK_CLIST(clist), added_row, assinfo); @@ -142,11 +147,14 @@ sctp_stat_on_unselect(GtkButton *button _U_, gpointer user_data _U_) selected_stream = NULL; gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), ""); + main_filter_packets(&cfile, "", FALSE); gtk_clist_unselect_all(GTK_CLIST(clist)); gtk_widget_set_sensitive(bt_unselect,FALSE); gtk_widget_set_sensitive(bt_filter,FALSE); gtk_widget_set_sensitive(bt_analyse,FALSE); gtk_widget_set_sensitive(bt_afilter,FALSE); + prevent_update = FALSE; + filter_applied = FALSE; } void sctp_stat_dlg_update(void) @@ -154,10 +162,9 @@ void sctp_stat_dlg_update(void) GList *list; list=(sctp_stat_get_info()->assoc_info_list); - if (sctp_stat_dlg != NULL) + if (sctp_stat_dlg != NULL && !prevent_update) { gtk_clist_clear(GTK_CLIST(clist)); - list = g_list_first(sctp_stat_get_info()->assoc_info_list); while (list) @@ -165,37 +172,38 @@ void sctp_stat_dlg_update(void) add_to_clist((sctp_assoc_info_t*)(list->data)); list = g_list_next(list); } - - sctp_stat_on_unselect(NULL, NULL); } last_list = list; } + static void sctp_stat_on_select_row(GtkCList *clist, gint row, gint column _U_, GdkEventButton *event _U_, gpointer user_data _U_) { gchar *text[1]; guint16 port1, port2; - guint32 checksum, data_chunks, data_bytes, packets; + guint32 checksum, data_chunks, data_bytes, packets, vtag1, vtag2; GList *list; sctp_assoc_info_t* assoc; + gboolean stream_found=FALSE; - selected_stream = gtk_clist_get_row_data(GTK_CLIST(clist), row); - + gtk_clist_get_row_data(GTK_CLIST(clist), row); gtk_clist_get_text(GTK_CLIST(clist), row, 0, text); port1=atoi(text[0]); gtk_clist_get_text(GTK_CLIST(clist), row, 1, text); port2=atoi(text[0]); - - gtk_clist_get_text(GTK_CLIST(clist), row, 4, text); + gtk_clist_get_text(GTK_CLIST(clist), row, 7, text); + sscanf(text[0],"0x%x",&vtag1); + gtk_clist_get_text(GTK_CLIST(clist), row, 8, text); + sscanf(text[0],"0x%x",&vtag2); + gtk_clist_get_text(GTK_CLIST(clist), row, 2, text); packets=atoi(text[0]); - gtk_clist_get_text(GTK_CLIST(clist), row, 5, text); + gtk_clist_get_text(GTK_CLIST(clist), row, 4, text); checksum=atoi(text[0]); - gtk_clist_get_text(GTK_CLIST(clist), row, 7, text); + gtk_clist_get_text(GTK_CLIST(clist), row, 5, text); data_chunks=atoi(text[0]); - - gtk_clist_get_text(GTK_CLIST(clist), row, 8, text); + gtk_clist_get_text(GTK_CLIST(clist), row, 6, text); data_bytes=atoi(text[0]); list = g_list_first(sctp_assocs->assoc_info_list); @@ -203,15 +211,20 @@ sctp_stat_on_select_row(GtkCList *clist, gint row, gint column _U_, while (list) { assoc = (sctp_assoc_info_t*)(list->data); - if (assoc->port1==port1 && assoc->port2==port2 && - assoc->n_packets==packets && assoc->n_checksum_errors==checksum - && assoc->n_data_chunks==data_chunks && assoc->n_data_bytes==data_bytes) + if (assoc->port1==port1 && assoc->port2==port2 + && assoc->n_packets==packets && assoc->n_data_chunks==data_chunks && assoc->n_data_bytes==data_bytes + && assoc->verification_tag1==vtag1 && assoc->verification_tag2==vtag2) { selected_stream=assoc; + stream_found=TRUE; break; } list=g_list_next(list); } + + if (!stream_found) + selected_stream = NULL; + gtk_widget_set_sensitive(bt_unselect,TRUE); gtk_widget_set_sensitive(bt_analyse,TRUE); gtk_widget_set_sensitive(bt_filter,TRUE); @@ -220,9 +233,39 @@ sctp_stat_on_select_row(GtkCList *clist, gint row, gint column _U_, static void sctp_stat_on_apply_filter (GtkButton *button _U_, gpointer user_data _U_) { + GList *list; + sctp_assoc_info_t* assoc; + guint16 port1, port2; + guint32 checksum, data_chunks, data_bytes, packets, vtag1, vtag2; + if (filter_string != NULL) { + port1 = selected_stream->port1; + port2 = selected_stream->port2; + checksum = selected_stream->n_checksum_errors; + data_chunks = selected_stream->n_data_chunks; + data_bytes = selected_stream->n_data_bytes; + packets = selected_stream->n_packets; + vtag1 = selected_stream->verification_tag1; + vtag2 = selected_stream->verification_tag2; main_filter_packets(&cfile, filter_string, FALSE); + list = g_list_first(sctp_assocs->assoc_info_list); + + while (list) + { + assoc = (sctp_assoc_info_t*)(list->data); + if (assoc->port1==port1 && assoc->port2==port2 + && assoc->n_packets==packets && assoc->n_data_chunks==data_chunks && assoc->n_data_bytes==data_bytes + && assoc->verification_tag1==vtag1 && assoc->verification_tag2==vtag2) + { + selected_stream=assoc; + break; + } + list=g_list_next(list); + } + gtk_widget_set_sensitive(bt_afilter,FALSE); + prevent_update=TRUE; + filter_applied = TRUE; } } @@ -246,28 +289,31 @@ sctp_stat_on_filter (GtkButton *button _U_, gpointer user_data _U_) { 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) || " - "(sctp.verification_tag==0x0 && sctp.initiate_tag==0x%x) || " - "(sctp.verification_tag==0x%x && (sctp.abort_t_bit==1 || sctp.shutdown_complete_t_bit==1)))) ||" - "(sctp.srcport==%u && sctp.dstport==%u && ((sctp.verification_tag==0x%x && sctp.verification_tag!=0x0) || " - "(sctp.verification_tag==0x0 && sctp.initiate_tag==0x%x) ||" - "(sctp.verification_tag==0x%x && (sctp.abort_t_bit==1 || sctp.shutdown_complete_t_bit==1)))))", + f_string = g_strdup_printf("((sctp.srcport==%u && sctp.dstport==%u && " + "((sctp.verification_tag==0x%x && sctp.verification_tag!=0x0) || " + "(sctp.verification_tag==0x0 && sctp.initiate_tag==0x%x) || " + "(sctp.verification_tag==0x%x && (sctp.abort_t_bit==1 || " + "sctp.shutdown_complete_t_bit==1)))) ||" + "(sctp.srcport==%u && sctp.dstport==%u && ((sctp.verification_tag==0x%x " + "&& sctp.verification_tag!=0x0) || " + "(sctp.verification_tag==0x0 && sctp.initiate_tag==0x%x) ||" + "(sctp.verification_tag==0x%x && (sctp.abort_t_bit==1 ||" + " sctp.shutdown_complete_t_bit==1)))))", 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; } else { + srclist = g_list_first(selected_stream->addr1); infosrc=(struct sockaddr_in *) (srclist->data); gstring = g_string_new(g_strdup_printf("((sctp.srcport==%u && sctp.dstport==%u && (ip.src==%s", @@ -281,7 +327,6 @@ sctp_stat_on_filter (GtkButton *button _U_, gpointer user_data _U_) g_string_append(gstring, str); srclist= g_list_next(srclist); } - dstlist = g_list_first(selected_stream->addr2); infodst=(struct sockaddr_in *) (dstlist->data); str = g_strdup_printf(") && (ip.dst==%s",ip_to_str((const guint8 *)&(infodst->sin_addr.s_addr))); @@ -294,7 +339,6 @@ sctp_stat_on_filter (GtkButton *button _U_, gpointer user_data _U_) g_string_append(gstring, str); dstlist= g_list_next(dstlist); } - srclist = g_list_first(selected_stream->addr1); infosrc=(struct sockaddr_in *) (srclist->data); str = g_strdup_printf(")) || (sctp.dstport==%u && sctp.srcport==%u && (ip.dst==%s", @@ -351,6 +395,9 @@ sctp_stat_on_filter (GtkButton *button _U_, gpointer user_data _U_) g_assert_not_reached(); } gtk_widget_set_sensitive(bt_afilter,TRUE); + gtk_widget_set_sensitive(bt_filter,FALSE); + prevent_update = TRUE; + filter_applied = FALSE; } @@ -359,6 +406,8 @@ sctp_stat_on_close (GtkButton *button _U_, gpointer user_data _U_) { gtk_grab_remove(sctp_stat_dlg); gtk_widget_destroy(sctp_stat_dlg); + prevent_update = FALSE; + filter_applied = FALSE; } static void @@ -366,10 +415,12 @@ sctp_stat_on_analyse (GtkButton *button _U_, gpointer user_data _U_) { if (selected_stream==NULL) return; - - if (selected_stream) + else assoc_analyse(selected_stream); gtk_widget_set_sensitive(bt_analyse,FALSE); + if (!filter_applied) + gtk_widget_set_sensitive(bt_filter,TRUE); + prevent_update = TRUE; } static gint @@ -381,7 +432,7 @@ clist_sort_column(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2) GtkCListRow *row1 = (GtkCListRow *) ptr1; GtkCListRow *row2 = (GtkCListRow *) ptr2; - + prevent_update = FALSE; text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text; text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text; @@ -408,6 +459,8 @@ clist_click_column_cb(GtkCList *list, gint column, gpointer data) { column_arrows *col_arrows = (column_arrows *) data; int i; + + prevent_update = FALSE; gtk_clist_freeze(list); for (i = 0; i < NUM_COLS; i++) { @@ -442,7 +495,7 @@ gtk_sctpstat_dlg(void) GtkWidget *hbuttonbox2; GtkWidget *bt_close; - const gchar *titles[NUM_COLS] = {"Port 1","Port 2", "No of Packets", "Checksum", "No of Errors", "Data Chunks", "Data Bytes"}; + const gchar *titles[NUM_COLS] = {"Port 1","Port 2","No of Packets", "Checksum", "No of Errors", "Data Chunks", "Data Bytes", "VTag 1","VTag 2"}; column_arrows *col_arrows; GdkBitmap *ascend_bm, *descend_bm; GdkPixmap *ascend_pm, *descend_pm; @@ -467,7 +520,7 @@ gtk_sctpstat_dlg(void) clist = gtk_clist_new (NUM_COLS); gtk_widget_show (clist); gtk_container_add (GTK_CONTAINER (scrolledwindow1), clist); - WIDGET_SET_SIZE(clist, 700, 200); + WIDGET_SET_SIZE(clist, 650, 200); gtk_clist_set_column_width (GTK_CLIST (clist), 0, 50); gtk_clist_set_column_width (GTK_CLIST (clist), 1, 50); @@ -476,6 +529,8 @@ gtk_sctpstat_dlg(void) gtk_clist_set_column_width (GTK_CLIST (clist), 4, 100); gtk_clist_set_column_width (GTK_CLIST (clist), 5, 100); gtk_clist_set_column_width (GTK_CLIST (clist), 6, 100); + gtk_clist_set_column_width (GTK_CLIST (clist), 7, 100); + gtk_clist_set_column_width (GTK_CLIST (clist), 8, 100); gtk_clist_set_column_justification(GTK_CLIST(clist), 0, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification(GTK_CLIST(clist), 1, GTK_JUSTIFY_CENTER); @@ -484,6 +539,8 @@ gtk_sctpstat_dlg(void) gtk_clist_set_column_justification(GTK_CLIST(clist), 4, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification(GTK_CLIST(clist), 5, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification(GTK_CLIST(clist), 6, GTK_JUSTIFY_CENTER); + gtk_clist_set_column_justification(GTK_CLIST(clist), 7, GTK_JUSTIFY_CENTER); + gtk_clist_set_column_justification(GTK_CLIST(clist), 8, GTK_JUSTIFY_CENTER); gtk_clist_column_titles_show (GTK_CLIST (clist)); gtk_clist_set_compare_func(GTK_CLIST(clist), clist_sort_column); @@ -592,7 +649,8 @@ static void sctp_stat_dlg_show(void) static void sctp_stat_start(GtkWidget *w _U_, gpointer data _U_) { - + prevent_update = FALSE; + filter_applied = FALSE; sctp_assocs = g_malloc(sizeof(sctp_allassocs_info_t)); sctp_assocs = (sctp_allassocs_info_t*)sctp_stat_get_info(); /* Register the tap listener */ |