static void draw_tsn_graph(struct sctp_udata *u_data) { GPtrArray *array = NULL; guint32 i, size = 0, start, end; gint diff, width; cairo_t *cr; if (u_data->dir == 1) { array = u_data->assoc->sort_tsn1; size = u_data->assoc->n_data_chunks_ep1; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes1; } else { min_tsn = u_data->io->tmp_min_tsn1; max_tsn = u_data->io->tmp_max_tsn1; } } else if (u_data->dir == 2) { array = u_data->assoc->sort_tsn2; size = u_data->assoc->n_data_chunks_ep2; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes2; } else { min_tsn = u_data->io->tmp_min_tsn2; max_tsn = u_data->io->tmp_max_tsn2; } } width = u_data->io->max_x - u_data->io->min_x; for (i=0; i<size; i++) { if (u_data->io->uoff) diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs -u_data->io->min_x; else diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs*1000000 + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->usecs-u_data->io->min_x; start = ((struct tsn_sort*)(g_ptr_array_index(array, i)))->offset; end = start + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->length; if (start >= min_tsn && diff > 0 && diff <= width){ #if GTK_CHECK_VERSION(2,22,0) cr = cairo_create (u_data->io->surface); #else cr = gdk_cairo_create (u_data->io->pixmap); #endif cairo_set_line_width (cr, 1.0); cairo_move_to(cr, (LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff)+0.5, (u_data->io->surface_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(start,min_tsn))*u_data->io->y_interval))+0.5); cairo_line_to(cr, (LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff)+0.5, (u_data->io->surface_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end,min_tsn))*u_data->io->y_interval))+0.5); cairo_stroke(cr); cairo_destroy(cr); } } }
static void draw_tsn_graph(struct sctp_udata *u_data) { GPtrArray *array = NULL; guint32 i, size = 0, start, end; gint diff, width; if (u_data->dir == 1) { array = u_data->assoc->sort_tsn1; size = u_data->assoc->n_data_chunks_ep1; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes1; } else { min_tsn = u_data->io->tmp_min_tsn1; max_tsn = u_data->io->tmp_max_tsn1; } } else if (u_data->dir == 2) { array = u_data->assoc->sort_tsn2; size = u_data->assoc->n_data_chunks_ep2; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes2; } else { min_tsn = u_data->io->tmp_min_tsn2; max_tsn = u_data->io->tmp_max_tsn2; } } width = u_data->io->max_x - u_data->io->min_x; for (i=0; i<size; i++) { if (u_data->io->uoff) diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs -u_data->io->min_x; else diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs*1000000 + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->usecs-u_data->io->min_x; start = ((struct tsn_sort*)(g_ptr_array_index(array, i)))->offset; end = start + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->length; if (start >= min_tsn && diff > 0 && diff <= width) gdk_draw_line(u_data->io->pixmap, u_data->io->draw_area->style->black_gc, (guint32)(LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff), (guint32)(u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(start,min_tsn))*u_data->io->y_interval)), (guint32)(LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff), (guint32)(u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end,min_tsn))*u_data->io->y_interval))); } }
static void draw_sack_graph(struct sctp_udata *u_data) { GdkRGBA red_color = {1.0, 0.0, 0.0, 1.0}; GdkRGBA green_color = {0.0, 1.0, 0.0, 1.0}; gint diff; GPtrArray *array = NULL; guint32 i, size = 0, start=0, end; gboolean more = FALSE; gint width; cairo_t *cr; if (u_data->dir == 1) { array = u_data->assoc->sort_sack1; size=u_data->assoc->n_sack_chunks_ep1; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes1; } else { min_tsn = u_data->io->tmp_min_tsn1; max_tsn = u_data->io->tmp_max_tsn1; } } else if (u_data->dir == 2) { array = u_data->assoc->sort_sack2; size = u_data->assoc->n_sack_chunks_ep2; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes2; } else { min_tsn = u_data->io->tmp_min_tsn2; max_tsn = u_data->io->tmp_max_tsn2; } } width = u_data->io->max_x - u_data->io->min_x; for (i=0; i<size; i++) { if (u_data->io->uoff) diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs - u_data->io->min_x; else diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs * 1000000 + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->usecs - u_data->io->min_x; end = start + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->length; if (end>max_tsn) { end = max_tsn; more = TRUE; } if (start >= min_tsn && diff > 0 && diff <= width) { #if GTK_CHECK_VERSION(2,22,0) cr = cairo_create (u_data->io->surface); #else cr = gdk_cairo_create (u_data->io->pixmap); #endif gdk_cairo_set_source_rgba (cr, &red_color); cairo_set_line_width (cr, 1.0); cairo_move_to(cr, LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff+0.5, u_data->io->surface_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(start,min_tsn))*u_data->io->y_interval)+0.5); cairo_line_to(cr, LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff+0.5, u_data->io->surface_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end,min_tsn))*u_data->io->y_interval)+0.5); cairo_stroke(cr); cairo_destroy(cr); if (more == TRUE) { #if GTK_CHECK_VERSION(2,22,0) cr = cairo_create (u_data->io->surface); #else cr = gdk_cairo_create (u_data->io->pixmap); #endif gdk_cairo_set_source_rgba (cr, &green_color); cairo_set_line_width (cr, 1.0); cairo_move_to(cr, LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff+0.5, u_data->io->surface_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end,min_tsn))*u_data->io->y_interval)+0.5); cairo_line_to(cr, LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff, u_data->io->surface_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end+10,min_tsn))*u_data->io->y_interval)+0.5); cairo_stroke(cr); cairo_destroy(cr); more = FALSE; } } } }
static void draw_sack_graph(struct sctp_udata *u_data) { GdkColor red_color = {0, 65535, 0, 0}; GdkColor green_color = {0, 0, 65535, 0}; GdkGC *red_gc, *green_gc; gint diff; GPtrArray *array = NULL; guint32 i, size = 0, start=0, end; gboolean more = FALSE; gint width; red_gc = gdk_gc_new(u_data->io->draw_area->window); gdk_gc_set_rgb_fg_color(red_gc, &red_color); green_gc = gdk_gc_new(u_data->io->draw_area->window); gdk_gc_set_rgb_fg_color(green_gc, &green_color); if (u_data->dir == 1) { array = u_data->assoc->sort_sack1; size=u_data->assoc->n_sack_chunks_ep1; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes1; } else { min_tsn = u_data->io->tmp_min_tsn1; max_tsn = u_data->io->tmp_max_tsn1; } } else if (u_data->dir == 2) { array = u_data->assoc->sort_sack2; size = u_data->assoc->n_sack_chunks_ep2; if (u_data->io->tmp == FALSE) { min_tsn = 0; max_tsn = u_data->assoc->max_bytes2; } else { min_tsn = u_data->io->tmp_min_tsn2; max_tsn = u_data->io->tmp_max_tsn2; } } width = u_data->io->max_x - u_data->io->min_x; for (i=0; i<size; i++) { if (u_data->io->uoff) diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs - u_data->io->min_x; else diff = (gint)((struct tsn_sort*)(g_ptr_array_index(array, i)))->secs * 1000000 + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->usecs - u_data->io->min_x; end = start + ((struct tsn_sort*)(g_ptr_array_index(array, i)))->length; if (end>max_tsn) { end = max_tsn; more = TRUE; } if (start >= min_tsn && diff > 0 && diff <= width) { gdk_draw_line(u_data->io->pixmap,red_gc, (guint32)(LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff), (guint32)(u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(start,min_tsn))*u_data->io->y_interval)), (guint32)(LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff), (guint32)(u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end,min_tsn))*u_data->io->y_interval))); if (more == TRUE) { gdk_draw_line(u_data->io->pixmap,green_gc, (guint32)(LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff), (guint32)(u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end,min_tsn))*u_data->io->y_interval)), (guint32)(LEFT_BORDER+u_data->io->offset+u_data->io->x_interval*diff), (guint32)(u_data->io->pixmap_height-BOTTOM_BORDER-u_data->io->offset-((SUB_32(end+10,min_tsn))*u_data->io->y_interval))); more = FALSE; } } } g_object_unref(G_OBJECT(red_gc)); g_object_unref(G_OBJECT(green_gc)); }