示例#1
0
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);
		}
	}

}
示例#2
0
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)));
	}

}
示例#3
0
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;
			}
		}

	}
}
示例#4
0
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));
}