aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorMichael Tüxen <tuexen@fh-muenster.de>2007-02-09 21:05:43 +0000
committerMichael Tüxen <tuexen@fh-muenster.de>2007-02-09 21:05:43 +0000
commit7e8098c520cf7d2241be5d38505f264156cfc0b1 (patch)
tree7b8e2cdf94f0085388b553872a9cb721dfcfce4a /gtk
parentf4fcbc9e140e8a176952c20758e96d3719a1f2b2 (diff)
A fix from Irene Ruengeler to keep assocs selected when
setting/applying filters. Remove some warnings. svn path=/trunk/; revision=20759
Diffstat (limited to 'gtk')
-rw-r--r--gtk/sctp_assoc_analyse.c2
-rw-r--r--gtk/sctp_byte_graph_dlg.c18
-rw-r--r--gtk/sctp_graph_dlg.c22
-rw-r--r--gtk/sctp_stat.c237
-rw-r--r--gtk/sctp_stat_dlg.c126
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 */