diff options
author | Gerald Combs <gerald@wireshark.org> | 2013-08-27 18:13:20 +0000 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2013-08-27 18:13:20 +0000 |
commit | 6d731a3e79e2feb9abefe2c1238a1c159f34586b (patch) | |
tree | 1d09de0370a4f0efd6c6c7dd8572dfaa1394d36f /ui/gtk/tcp_graph.c | |
parent | 77f1ed0f9364adb75ad60c53618a3ccb9f4a6db0 (diff) |
Add TCP sequence number (Stevens-style) graphs.
Add the QCustomPlot widget. Thanks to Emanuel Eichhammer for granting a
license change. Move some common code from ui/gtk/tcp_graph.c to
ui/tap-tcp-stream.[ch]. Get rid of tcp_graph_selected_packet_enabled().
It was only used in the menu code and didn't match what we were doing
elsewhere.
Still quite a bit of work to do but it's a promising start.
svn path=/trunk/; revision=51538
Diffstat (limited to 'ui/gtk/tcp_graph.c')
-rw-r--r-- | ui/gtk/tcp_graph.c | 842 |
1 files changed, 268 insertions, 574 deletions
diff --git a/ui/gtk/tcp_graph.c b/ui/gtk/tcp_graph.c index d285116009..0897e91366 100644 --- a/ui/gtk/tcp_graph.c +++ b/ui/gtk/tcp_graph.c @@ -37,17 +37,16 @@ #endif #include <epan/packet.h> -#include <epan/ipproto.h> #include <epan/etypes.h> #include <epan/ppptypes.h> #include <epan/epan_dissect.h> #include <epan/dissectors/packet-tcp.h> #include <epan/address.h> -#include <epan/tap.h> -#include "../globals.h" -#include "ui/simple_dialog.h" -#include "../stat_menu.h" +#include "../../globals.h" +#include "../../stat_menu.h" + +#include "ui/tap-tcp-stream.h" #include "ui/gtk/gui_utils.h" #include "ui/gtk/dlg_utils.h" @@ -55,8 +54,6 @@ #include "ui/gtk/old-gtk-compat.h" -#include "frame_tvbuff.h" - #define TCP_SYN(flags) ( flags & TH_SYN ) #define TCP_ACK(flags) ( flags & TH_ACK ) #define TCP_FIN(flags) ( flags & TH_FIN ) @@ -64,11 +61,6 @@ #define TXT_WIDTH 850 #define TXT_HEIGHT 550 -/* for compare_headers() */ -/* segment went the same direction as the currently selected one */ -#define COMPARE_CURR_DIR 0 -#define COMPARE_ANY_DIR 1 - /* initialize_axis() */ #define AXIS_HORIZONTAL 0 #define AXIS_VERTICAL 1 @@ -79,29 +71,6 @@ #define MOUSE_BUTTON_MIDDLE 2 #define MOUSE_BUTTON_RIGHT 3 -struct segment { - struct segment *next; - guint32 num; - guint32 rel_secs; - guint32 rel_usecs; - guint32 abs_secs; - guint32 abs_usecs; - - guint32 th_seq; - guint32 th_ack; - guint16 th_flags; - guint32 th_win; /* make it 32 bits so we can handle some scaling */ - guint32 th_seglen; - guint16 th_sport; - guint16 th_dport; - address ip_src; - address ip_dst; - - guint8 num_sack_ranges; - guint32 sack_left_edge[MAX_TCP_SACK_RANGES]; - guint32 sack_right_edge[MAX_TCP_SACK_RANGES]; -}; - struct rect { double x, y, width, height; }; @@ -159,7 +128,7 @@ struct element_list { }; struct axis { - struct graph *g; /* which graph we belong to */ + struct gtk_graph *g; /* which graph we belong to */ GtkWidget *drawing_area; #if GTK_CHECK_VERSION(2,22,0) cairo_surface_t *surface[2]; @@ -280,7 +249,7 @@ struct magnify { struct ipoint offset; int width, height; struct zoom zoom; - struct graph *g; + struct gtk_graph *g; #define MAGZOOMS_SAME (1U << 0) #define MAGZOOMS_SAME_RATIO (1U << 1) #define MAGZOOMS_IGNORE (1U << 31) @@ -290,13 +259,7 @@ struct magnify { } widget; }; -struct graph { -#define GRAPH_TSEQ_STEVENS 0 -#define GRAPH_TSEQ_TCPTRACE 1 -#define GRAPH_THROUGHPUT 2 -#define GRAPH_RTT 3 -#define GRAPH_WSCALE 4 - int type; +struct gtk_graph { #define GRAPH_DESTROYED (1 << 0) #define GRAPH_INIT_ON_TYPE_CHANGE (1 << 1) int flags; @@ -350,13 +313,8 @@ struct graph { gboolean zoomrect_erase_needed; struct magnify magnify; struct axis *x_axis, *y_axis; - struct segment *segments; - /* The stream this graph will show */ - address src_address; - guint16 src_port; - address dst_address; - guint16 dst_port; + struct tcp_graph tg; struct element_list *elists; /* element lists */ union { @@ -389,23 +347,23 @@ static int debugging = 0; /*static int debugging = DBS_GRAPH_DRAWING;*/ /*static int debugging = DBS_TPUT_ELMTS;*/ -static void create_gui(struct graph * ); +static void create_gui(struct gtk_graph * ); #if 0 -static void create_text_widget(struct graph * ); -static void display_text(struct graph * ); +static void create_text_widget(struct gtk_graph * ); +static void display_text(struct gtk_graph * ); #endif -static void create_drawing_area(struct graph * ); -static void control_panel_create(struct graph * ); -static GtkWidget *control_panel_create_zoom_group(struct graph * ); -static GtkWidget *control_panel_create_magnify_group(struct graph * ); -static GtkWidget *control_panel_create_cross_group(struct graph * ); -static GtkWidget *control_panel_create_zoomlock_group(struct graph * ); -static GtkWidget *control_panel_create_graph_type_group(struct graph * ); -static void control_panel_add_zoom_page(struct graph * , GtkWidget * ); -static void control_panel_add_magnify_page(struct graph * , GtkWidget * ); -static void control_panel_add_origin_page(struct graph * , GtkWidget * ); -static void control_panel_add_cross_page(struct graph * , GtkWidget * ); -static void control_panel_add_graph_type_page(struct graph * , GtkWidget * ); +static void create_drawing_area(struct gtk_graph * ); +static void control_panel_create(struct gtk_graph * ); +static GtkWidget *control_panel_create_zoom_group(struct gtk_graph * ); +static GtkWidget *control_panel_create_magnify_group(struct gtk_graph * ); +static GtkWidget *control_panel_create_cross_group(struct gtk_graph * ); +static GtkWidget *control_panel_create_zoomlock_group(struct gtk_graph * ); +static GtkWidget *control_panel_create_graph_type_group(struct gtk_graph * ); +static void control_panel_add_zoom_page(struct gtk_graph * , GtkWidget * ); +static void control_panel_add_magnify_page(struct gtk_graph * , GtkWidget * ); +static void control_panel_add_origin_page(struct gtk_graph * , GtkWidget * ); +static void control_panel_add_cross_page(struct gtk_graph * , GtkWidget * ); +static void control_panel_add_graph_type_page(struct gtk_graph * , GtkWidget * ); static void callback_toplevel_destroy(GtkWidget * , gpointer ); static gboolean callback_delete_event(GtkWidget * , GdkEvent * , gpointer); static void callback_close(GtkWidget * , gpointer ); @@ -427,32 +385,28 @@ static void callback_graph_type(GtkWidget * , gpointer ); static void callback_graph_init_on_typechg(GtkWidget * , gpointer ); static void callback_create_help(GtkWidget * , gpointer ); static void get_mouse_position(GtkWidget *, int *pointer_x, int *pointer_y, GdkModifierType *mask); -static void update_zoom_spins(struct graph * ); -static struct tcpheader *select_tcpip_session(capture_file *, struct segment * ); -static int compare_headers(address *saddr1, address *daddr1, guint16 sport1, guint16 dport1, const address *saddr2, const address *daddr2, guint16 sport2, guint16 dport2, int dir); -static int get_num_dsegs(struct graph * ); -static int get_num_acks(struct graph *, int * ); -static void graph_type_dependent_initialize(struct graph * ); -static struct graph *graph_new(void); -static void graph_destroy(struct graph * ); -static void graph_initialize_values(struct graph * ); -static void graph_init_sequence(struct graph * ); -static void draw_element_line(struct graph * , struct element * , cairo_t *cr, GdkRGBA *new_color); -static void draw_element_ellipse(struct graph * , struct element * , cairo_t *cr); -static void graph_display(struct graph * ); -static void graph_pixmaps_create(struct graph * ); -static void graph_pixmaps_switch(struct graph * ); -static void graph_pixmap_draw(struct graph * ); -static void graph_pixmap_display(struct graph * ); -static void graph_element_lists_make(struct graph * ); -static void graph_element_lists_free(struct graph * ); -static void graph_element_lists_initialize(struct graph * ); -static void graph_title_pixmap_create(struct graph * ); -static void graph_title_pixmap_draw(struct graph * ); -static void graph_title_pixmap_display(struct graph * ); -static void graph_segment_list_get(struct graph *, gboolean stream_known ); -static void graph_segment_list_free(struct graph * ); -static void graph_select_segment(struct graph * , int , int ); +static void update_zoom_spins(struct gtk_graph * ); +static int get_num_dsegs(struct gtk_graph * ); +static int get_num_acks(struct gtk_graph *, int * ); +static void graph_type_dependent_initialize(struct gtk_graph * ); +static struct gtk_graph *graph_new(void); +static void graph_destroy(struct gtk_graph * ); +static void graph_initialize_values(struct gtk_graph * ); +static void graph_init_sequence(struct gtk_graph * ); +static void draw_element_line(struct gtk_graph * , struct element * , cairo_t *cr, GdkRGBA *new_color); +static void draw_element_ellipse(struct gtk_graph * , struct element * , cairo_t *cr); +static void graph_display(struct gtk_graph * ); +static void graph_pixmaps_create(struct gtk_graph * ); +static void graph_pixmaps_switch(struct gtk_graph * ); +static void graph_pixmap_draw(struct gtk_graph * ); +static void graph_pixmap_display(struct gtk_graph * ); +static void graph_element_lists_make(struct gtk_graph * ); +static void graph_element_lists_free(struct gtk_graph * ); +static void graph_element_lists_initialize(struct gtk_graph * ); +static void graph_title_pixmap_create(struct gtk_graph * ); +static void graph_title_pixmap_draw(struct gtk_graph * ); +static void graph_title_pixmap_display(struct gtk_graph * ); +static void graph_select_segment(struct gtk_graph * , int , int ); static int line_detect_collision(struct element * , int , int ); static int ellipse_detect_collision(struct element * , int , int ); static void axis_pixmaps_create(struct axis * ); @@ -467,19 +421,19 @@ static void axis_ticks_up(int * , int * ); static void axis_ticks_down(int * , int * ); static void axis_destroy(struct axis * ); static int get_label_dim(struct axis * , int , double ); -static void toggle_crosshairs(struct graph *g); -static void toggle_time_origin(struct graph * ); -static void toggle_seq_origin(struct graph * ); -static void restore_initial_graph_view(struct graph *g); -static void cross_draw(struct graph * , int , int ); -static void cross_erase(struct graph * ); -static void zoomrect_draw(struct graph * , int , int ); -static void zoomrect_erase(struct graph * ); -static void magnify_move(struct graph * , int , int ); -static void magnify_create(struct graph * , int , int ); -static void magnify_destroy(struct graph * ); -static void magnify_draw(struct graph * ); -static void magnify_get_geom(struct graph * , int , int ); +static void toggle_crosshairs(struct gtk_graph *g); +static void toggle_time_origin(struct gtk_graph * ); +static void toggle_seq_origin(struct gtk_graph * ); +static void restore_initial_graph_view(struct gtk_graph *g); +static void cross_draw(struct gtk_graph * , int , int ); +static void cross_erase(struct gtk_graph * ); +static void zoomrect_draw(struct gtk_graph * , int , int ); +static void zoomrect_erase(struct gtk_graph * ); +static void magnify_move(struct gtk_graph * , int , int ); +static void magnify_create(struct gtk_graph * , int , int ); +static void magnify_destroy(struct gtk_graph * ); +static void magnify_draw(struct gtk_graph * ); +static void magnify_get_geom(struct gtk_graph * , int , int ); static gboolean configure_event(GtkWidget * , GdkEventConfigure * , gpointer ); #if GTK_CHECK_VERSION(3,0,0) static gboolean draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data); @@ -493,31 +447,31 @@ static gboolean leave_notify_event(GtkWidget * , GdkEventCrossing * , gpointer ) static gboolean enter_notify_event(GtkWidget * , GdkEventCrossing * , gpointer ); static gboolean key_press_event(GtkWidget * , GdkEventKey * , gpointer ); static gboolean key_release_event(GtkWidget * , GdkEventKey * , gpointer ); -static void tseq_initialize(struct graph * ); -static void tseq_get_bounds(struct graph * ); -static void tseq_stevens_read_config(struct graph * ); -static void tseq_stevens_make_elmtlist(struct graph * ); -static void tseq_stevens_toggle_seq_origin(struct graph * ); -static void tseq_stevens_toggle_time_origin(struct graph * ); -static void tseq_tcptrace_read_config(struct graph * ); -static void tseq_tcptrace_make_elmtlist(struct graph * ); -static void tseq_tcptrace_toggle_seq_origin(struct graph * ); -static void tseq_tcptrace_toggle_time_origin(struct graph * ); -static void tput_initialize(struct graph * ); -static void tput_read_config(struct graph * ); -static void tput_make_elmtlist(struct graph * ); -static void tput_toggle_time_origin(struct graph * ); -static void rtt_read_config(struct graph * ); -static void rtt_initialize(struct graph * ); +static void tseq_initialize(struct gtk_graph * ); +static void tseq_get_bounds(struct gtk_graph * ); +static void tseq_stevens_read_config(struct gtk_graph * ); +static void tseq_stevens_make_elmtlist(struct gtk_graph * ); +static void tseq_stevens_toggle_seq_origin(struct gtk_graph * ); +static void tseq_stevens_toggle_time_origin(struct gtk_graph * ); +static void tseq_tcptrace_read_config(struct gtk_graph * ); +static void tseq_tcptrace_make_elmtlist(struct gtk_graph * ); +static void tseq_tcptrace_toggle_seq_origin(struct gtk_graph * ); +static void tseq_tcptrace_toggle_time_origin(struct gtk_graph * ); +static void tput_initialize(struct gtk_graph * ); +static void tput_read_config(struct gtk_graph * ); +static void tput_make_elmtlist(struct gtk_graph * ); +static void tput_toggle_time_origin(struct gtk_graph * ); +static void rtt_read_config(struct gtk_graph * ); +static void rtt_initialize(struct gtk_graph * ); static int rtt_is_retrans(struct unack * , unsigned int ); static struct unack *rtt_get_new_unack(double , unsigned int ); static void rtt_put_unack_on_list(struct unack ** , struct unack * ); static void rtt_delete_unack_from_list(struct unack ** , struct unack * ); -static void rtt_make_elmtlist(struct graph * ); -static void rtt_toggle_seq_origin(struct graph * ); -static void wscale_initialize(struct graph *); -static void wscale_read_config(struct graph *); -static void wscale_make_elmtlist(struct graph *); +static void rtt_make_elmtlist(struct gtk_graph * ); +static void rtt_toggle_seq_origin(struct gtk_graph * ); +static void wscale_initialize(struct gtk_graph *); +static void wscale_read_config(struct gtk_graph *); +static void wscale_make_elmtlist(struct gtk_graph *); #if defined(_WIN32) && !defined(__MINGW32__) static int rint(double ); /* compiler template for Windows */ #endif @@ -591,7 +545,7 @@ static char helptext[] = ; #if 0 -static void debug_coord(struct graph *g, const char *c) +static void debug_coord(struct gtk_graph *g, const char *c) { static guint count = 0; @@ -646,7 +600,7 @@ static void unset_busy_cursor(GdkWindow *w, gboolean cross) void tcp_graph_cb(GtkAction *action, gpointer user_data _U_) { struct segment current; - struct graph *g; + struct gtk_graph *g; const gchar *name; guint graph_type; @@ -677,9 +631,9 @@ void tcp_graph_cb(GtkAction *action, gpointer user_data _U_) refnum++; graph_initialize_values(g); - g->type = graph_type; + g->tg.type = graph_type; - graph_segment_list_get(g, FALSE); + graph_segment_list_get(&cfile, &g->tg, FALSE); create_gui(g); /* display_text(g); */ graph_init_sequence(g); @@ -689,7 +643,7 @@ void tcp_graph_cb(GtkAction *action, gpointer user_data _U_) void tcp_graph_known_stream_launch(address *src_address, guint16 src_port, address *dst_address, guint16 dst_port) { - struct graph *g; + struct gtk_graph *g; if (!(g = graph_new())) { return; @@ -699,23 +653,23 @@ void tcp_graph_known_stream_launch(address *src_address, guint16 src_port, graph_initialize_values(g); /* Can set stream info for graph now */ - COPY_ADDRESS(&g->src_address, src_address); - g->src_port = src_port; - COPY_ADDRESS(&g->dst_address, dst_address); - g->dst_port = dst_port; + COPY_ADDRESS(&g->tg.src_address, src_address); + g->tg.src_port = src_port; + COPY_ADDRESS(&g->tg.dst_address, dst_address); + g->tg.dst_port = dst_port; /* This graph type is arguably the most useful, so start there */ - g->type = GRAPH_TSEQ_TCPTRACE; + g->tg.type = GRAPH_TSEQ_TCPTRACE; /* Get our list of segments from the packet list */ - graph_segment_list_get(g, TRUE); + graph_segment_list_get(&cfile, &g->tg, TRUE); create_gui(g); graph_init_sequence(g); } -static void create_gui(struct graph *g) +static void create_gui(struct gtk_graph *g) { /* ToDo: Ensure that drawing area window doesn't * (completely) cover the contraol_panel window. @@ -728,7 +682,7 @@ static void create_gui(struct graph *g) -static void create_drawing_area(struct graph *g) +static void create_drawing_area(struct gtk_graph *g) { #if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context; @@ -749,10 +703,10 @@ static void create_drawing_area(struct graph *g) g_snprintf(window_title, WINDOW_TITLE_LENGTH, "TCP Graph %d: %s %s:%d -> %s:%d", refnum, display_name, - ep_address_to_str(&g->src_address), - g->src_port, - ep_address_to_str(&g->dst_address), - g->dst_port + ep_address_to_str(&g->tg.src_address), + g->tg.src_port, + ep_address_to_str(&g->tg.dst_address), + g->tg.dst_port ); g_free(display_name); g->toplevel = dlg_window_new("Tcp Graph"); @@ -868,15 +822,15 @@ static void create_drawing_area(struct graph *g) static void callback_toplevel_destroy(GtkWidget *widget _U_, gpointer data) { - struct graph *g = (struct graph *)data; + struct gtk_graph *g = (struct gtk_graph *)data; if (!(g->flags & GRAPH_DESTROYED)) { g->flags |= GRAPH_DESTROYED; - graph_destroy((struct graph *)data); + graph_destroy((struct gtk_graph *)data); } } -static void control_panel_create(struct graph *g) +static void control_panel_create(struct gtk_graph *g) { GtkWidget *toplevel, *notebook; GtkWidget *top_vb; @@ -924,7 +878,7 @@ static void control_panel_create(struct graph *g) g->gui.control_panel = toplevel; } -static void control_panel_add_zoom_page(struct graph *g, GtkWidget *n) +static void control_panel_add_zoom_page(struct gtk_graph *g, GtkWidget *n) { GtkWidget *zoom_frame; GtkWidget *zoom_lock_frame; @@ -943,7 +897,7 @@ static void control_panel_add_zoom_page(struct graph *g, GtkWidget *n) gtk_notebook_append_page(GTK_NOTEBOOK(n), box, label); } -static void control_panel_add_magnify_page(struct graph *g, GtkWidget *n) +static void control_panel_add_magnify_page(struct gtk_graph *g, GtkWidget *n) { GtkWidget *mag_frame, *label; @@ -953,7 +907,7 @@ static void control_panel_add_magnify_page(struct graph *g, GtkWidget *n) gtk_notebook_append_page(GTK_NOTEBOOK(n), mag_frame, label); } -static void control_panel_add_origin_page(struct graph *g, GtkWidget *n) +static void control_panel_add_origin_page(struct gtk_graph *g, GtkWidget *n) { GtkWidget *time_orig_cap, *time_orig_conn, *time_orig_box, *time_orig_frame; GtkWidget *seq_orig_isn, *seq_orig_zero, *seq_orig_box, *seq_orig_frame; @@ -1000,7 +954,7 @@ static void control_panel_add_origin_page(struct graph *g, GtkWidget *n) gtk_notebook_append_page(GTK_NOTEBOOK(n), box, label); } -static void control_panel_add_cross_page (struct graph *g, GtkWidget *n) +static void control_panel_add_cross_page (struct gtk_graph *g, GtkWidget *n) { GtkWidget *cross_frame, *label; @@ -1010,7 +964,7 @@ static void control_panel_add_cross_page (struct graph *g, GtkWidget *n) gtk_notebook_append_page(GTK_NOTEBOOK(n), cross_frame, label); } -static void control_panel_add_graph_type_page(struct graph *g, GtkWidget *n) +static void control_panel_add_graph_type_page(struct gtk_graph *g, GtkWidget *n) { GtkWidget *frame, *label; @@ -1031,11 +985,11 @@ callback_delete_event(GtkWidget *widget _U_, GdkEvent *event _U_, static void callback_close(GtkWidget *widget _U_, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; if (!(g->flags & GRAPH_DESTROYED)) { g->flags |= GRAPH_DESTROYED; - graph_destroy((struct graph * )data); + graph_destroy((struct gtk_graph * )data); } } @@ -1092,15 +1046,15 @@ static void get_mouse_position(GtkWidget *widget, int *pointer_x, int *pointer_y static void callback_time_origin(GtkWidget *toggle _U_, gpointer data) { - toggle_time_origin((struct graph * )data); + toggle_time_origin((struct gtk_graph * )data); } static void callback_seq_origin(GtkWidget *toggle _U_, gpointer data) { - toggle_seq_origin((struct graph * )data); + toggle_seq_origin((struct gtk_graph * )data); } -static GtkWidget *control_panel_create_zoom_group(struct graph *g) +static GtkWidget *control_panel_create_zoom_group(struct gtk_graph *g) { GtkWidget *zoom_in, *zoom_out, *zoom_box, *zoom_frame; GtkAdjustment *zoom_h_adj, *zoom_v_adj; @@ -1204,7 +1158,7 @@ static GtkWidget *control_panel_create_zoom_group(struct graph *g) static void callback_zoom_inout(GtkWidget *toggle, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) g->zoom.flags &= ~ZOOM_OUT; @@ -1214,7 +1168,7 @@ static void callback_zoom_inout(GtkWidget *toggle, gpointer data) static void callback_zoom_step(GtkWidget *spin, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; double value; int direction; double *zoom_this, *zoom_other; @@ -1259,7 +1213,7 @@ static void callback_zoom_step(GtkWidget *spin, gpointer data) static void callback_zoom_flags(GtkWidget *toggle, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; int flag = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toggle), "flag")); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) @@ -1268,7 +1222,7 @@ static void callback_zoom_flags(GtkWidget *toggle, gpointer data) g->zoom.flags &= ~flag; } -static void update_zoom_spins(struct graph *g) +static void update_zoom_spins(struct gtk_graph *g) { char s[32]; @@ -1278,7 +1232,7 @@ static void update_zoom_spins(struct graph *g) gtk_entry_set_text(g->zoom.widget.v_zoom, s); } -static GtkWidget *control_panel_create_magnify_group(struct graph *g) +static GtkWidget *control_panel_create_magnify_group(struct gtk_graph *g) { GtkWidget *mag_width_label, *mag_width; GtkWidget *mag_height_label, *mag_height; @@ -1382,35 +1336,35 @@ static GtkWidget *control_panel_create_magnify_group(struct graph *g) static void callback_mag_width(GtkWidget *spin, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; g->magnify.width = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); } static void callback_mag_height(GtkWidget *spin, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; g->magnify.height = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); } static void callback_mag_x(GtkWidget *spin, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; g->magnify.offset.x = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); } static void callback_mag_y(GtkWidget *spin, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; g->magnify.offset.y = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); } static void callback_mag_zoom(GtkWidget *spin, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; double value; int direction; double *zoom_this, *zoom_other; @@ -1465,7 +1419,7 @@ static void callback_mag_zoom(GtkWidget *spin, gpointer data) static void callback_mag_flags(GtkWidget *toggle, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; int flag = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toggle), "flag")); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) @@ -1474,7 +1428,7 @@ static void callback_mag_flags(GtkWidget *toggle, gpointer data) g->magnify.flags &= ~flag; } -static GtkWidget *control_panel_create_zoomlock_group(struct graph *g) +static GtkWidget *control_panel_create_zoomlock_group(struct gtk_graph *g) { GtkWidget *zoom_lock_h, *zoom_lock_v, *zoom_lock_none, *zoom_lock_box; GtkWidget *zoom_lock_frame; @@ -1502,7 +1456,7 @@ static GtkWidget *control_panel_create_zoomlock_group(struct graph *g) static void callback_zoomlock_h(GtkWidget *toggle, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) g->zoom.flags |= ZOOM_HLOCK; @@ -1512,7 +1466,7 @@ static void callback_zoomlock_h(GtkWidget *toggle, gpointer data) static void callback_zoomlock_v(GtkWidget *toggle, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) g->zoom.flags |= ZOOM_VLOCK; @@ -1520,7 +1474,7 @@ static void callback_zoomlock_v(GtkWidget *toggle, gpointer data) g->zoom.flags &= ~ZOOM_VLOCK; } -static GtkWidget *control_panel_create_cross_group(struct graph *g) +static GtkWidget *control_panel_create_cross_group(struct gtk_graph *g) { GtkWidget *on, *off, *box, *frame, *vbox, *label; @@ -1548,7 +1502,7 @@ static GtkWidget *control_panel_create_cross_group(struct graph *g) } static void callback_cross_on_off(GtkWidget *toggle, gpointer data) { - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) { int x, y; @@ -1563,7 +1517,7 @@ static void callback_cross_on_off(GtkWidget *toggle, gpointer data) } } -static GtkWidget *control_panel_create_graph_type_group(struct graph *g) +static GtkWidget *control_panel_create_graph_type_group(struct gtk_graph *g) { GtkWidget *graph_tseqttrace, *graph_tseqstevens; GtkWidget *graph_tput, *graph_rtt, *graph_sep, *graph_init, *graph_box; @@ -1584,7 +1538,7 @@ static GtkWidget *control_panel_create_graph_type_group(struct graph *g) gtk_radio_button_get_group(GTK_RADIO_BUTTON(graph_tput)), "Window Scaling"); - switch (g->type) { + switch (g->tg.type) { case GRAPH_TSEQ_STEVENS: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(graph_tseqstevens), TRUE); break; @@ -1644,15 +1598,15 @@ static GtkWidget *control_panel_create_graph_type_group(struct graph *g) static void callback_graph_type(GtkWidget *toggle, gpointer data) { int old_type, new_type; - struct graph *g = (struct graph * )data; + struct gtk_graph *g = (struct gtk_graph * )data; new_type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toggle), "new-graph-type")); if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) return; - old_type = g->type; - g->type = new_type; + old_type = g->tg.type; + g->tg.type = new_type; graph_element_lists_free(g); graph_element_lists_initialize(g); @@ -1660,8 +1614,8 @@ static void callback_graph_type(GtkWidget *toggle, gpointer data) if ((old_type == GRAPH_THROUGHPUT) || (new_type == GRAPH_THROUGHPUT)) { /* throughput graph uses differently constructed segment list so we * need to recreate it */ - graph_segment_list_free(g); - graph_segment_list_get(g, TRUE); + graph_segment_list_free(&g->tg); + graph_segment_list_get(&cfile, &g->tg, TRUE); } if (g->flags & GRAPH_INIT_ON_TYPE_CHANGE) { @@ -1678,14 +1632,14 @@ static void callback_graph_type(GtkWidget *toggle, gpointer data) static void callback_graph_init_on_typechg(GtkWidget *toggle _U_, gpointer data) { - ((struct graph * )data)->flags ^= GRAPH_INIT_ON_TYPE_CHANGE; + ((struct gtk_graph * )data)->flags ^= GRAPH_INIT_ON_TYPE_CHANGE; } -static struct graph *graph_new(void) +static struct gtk_graph *graph_new(void) { - struct graph *g; + struct gtk_graph *g; - g = (struct graph * )g_malloc0(sizeof(struct graph)); + g = (struct gtk_graph * )g_malloc0(sizeof(struct gtk_graph)); graph_element_lists_initialize(g); g->x_axis = (struct axis * )g_malloc0(sizeof(struct axis)); @@ -1709,7 +1663,7 @@ static struct graph *graph_new(void) return g; } -static void graph_initialize_values(struct graph *g) +static void graph_initialize_values(struct gtk_graph *g) { g->geom.width = g->wp.width = 750; g->geom.height = g->wp.height = 550; @@ -1729,7 +1683,7 @@ static void graph_initialize_values(struct graph *g) g->magnify.flags = 0; } -static void graph_init_sequence(struct graph *g) +static void graph_init_sequence(struct gtk_graph *g) { debug(DBS_FENTRY) puts("graph_init_sequence()"); @@ -1754,9 +1708,9 @@ static void graph_init_sequence(struct graph *g) axis_display(g->x_axis); } -static void graph_type_dependent_initialize(struct graph *g) +static void graph_type_dependent_initialize(struct gtk_graph *g) { - switch (g->type) { + switch (g->tg.type) { case GRAPH_TSEQ_STEVENS: case GRAPH_TSEQ_TCPTRACE: tseq_initialize(g); @@ -1775,7 +1729,7 @@ static void graph_type_dependent_initialize(struct graph *g) } } -static void graph_destroy(struct graph *g) +static void graph_destroy(struct gtk_graph *g) { debug(DBS_FENTRY) puts("graph_destroy()"); @@ -1802,280 +1756,22 @@ static void graph_destroy(struct graph *g) g_free(g->x_axis); g_free(g->y_axis); g_free((gpointer )(g->title)); - graph_segment_list_free(g); + graph_segment_list_free(&g->tg); graph_element_lists_free(g); g_free(g); } - -typedef struct _tcp_scan_t { - struct segment *current; - int direction; - struct graph *g; - struct segment *last; -} tcp_scan_t; - -static int -tapall_tcpip_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U_, const void *vip) -{ - tcp_scan_t *ts = (tcp_scan_t *)pct; - struct graph *g = ts->g; - const struct tcpheader *tcphdr = (const struct tcpheader *)vip; - - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, - &tcphdr->ip_src, &tcphdr->ip_dst, - tcphdr->th_sport, tcphdr->th_dport, - ts->direction)) - { - struct segment *segment = (struct segment *)g_malloc(sizeof(struct segment)); - segment->next = NULL; - segment->num = pinfo->fd->num; - segment->rel_secs = (guint32)pinfo->rel_ts.secs; - segment->rel_usecs = pinfo->rel_ts.nsecs/1000; - segment->abs_secs = (guint32)pinfo->fd->abs_ts.secs; - segment->abs_usecs = pinfo->fd->abs_ts.nsecs/1000; - segment->th_seq = tcphdr->th_seq; - segment->th_ack = tcphdr->th_ack; - segment->th_win = tcphdr->th_win; - segment->th_flags = tcphdr->th_flags; - segment->th_sport = tcphdr->th_sport; - segment->th_dport = tcphdr->th_dport; - segment->th_seglen = tcphdr->th_seglen; - COPY_ADDRESS(&segment->ip_src, &tcphdr->ip_src); - COPY_ADDRESS(&segment->ip_dst, &tcphdr->ip_dst); - - segment->num_sack_ranges = MIN(MAX_TCP_SACK_RANGES, tcphdr->num_sack_ranges); - if (segment->num_sack_ranges > 0) { - /* Copy entries in the order they happen */ - memcpy(&segment->sack_left_edge, &tcphdr->sack_left_edge, sizeof(segment->sack_left_edge)); - memcpy(&segment->sack_right_edge, &tcphdr->sack_right_edge, sizeof(segment->sack_right_edge)); - } - - if (ts->g->segments) { - ts->last->next = segment; - } else { - ts->g->segments = segment; - } - ts->last = segment; - } - - return 0; -} - - - -/* here we collect all the external data we will ever need */ -static void graph_segment_list_get(struct graph *g, gboolean stream_known) -{ - struct segment current; - GString *error_string; - tcp_scan_t ts; - - debug(DBS_FENTRY) puts("graph_segment_list_get()"); - - if (!stream_known) { - select_tcpip_session(&cfile, ¤t); - if (g->type == GRAPH_THROUGHPUT) - ts.direction = COMPARE_CURR_DIR; - else - ts.direction = COMPARE_ANY_DIR; - - /* Remember stream info in graph */ - COPY_ADDRESS(&g->src_address, ¤t.ip_src); - g->src_port = current.th_sport; - COPY_ADDRESS(&g->dst_address, ¤t.ip_dst); - g->dst_port = current.th_dport; - } - - /* rescan all the packets and pick up all interesting tcp headers. - * we only filter for TCP here for speed and do the actual compare - * in the tap listener - */ - ts.current = ¤t; - ts.g = g; - ts.last = NULL; - error_string = register_tap_listener("tcp", &ts, "tcp", 0, NULL, tapall_tcpip_packet, NULL); - if (error_string) { - fprintf(stderr, "wireshark: Couldn't register tcp_graph tap: %s\n", - error_string->str); - g_string_free(error_string, TRUE); - exit(1); /* XXX: fix this */ - } - cf_retap_packets(&cfile); - remove_tap_listener(&ts); -} - - -typedef struct _th_t { - int num_hdrs; - #define MAX_SUPPORTED_TCP_HEADERS 8 - struct tcpheader *tcphdrs[MAX_SUPPORTED_TCP_HEADERS]; -} th_t; - -static int -tap_tcpip_packet(void *pct, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *vip) -{ - int n; - gboolean is_unique = TRUE; - th_t *th = (th_t *)pct; - const struct tcpheader *header = (const struct tcpheader *)vip; - - /* Check new header details against any/all stored ones */ - for (n=0; n < th->num_hdrs; n++) { - struct tcpheader *stored = th->tcphdrs[n]; - - if (compare_headers(&stored->ip_src, &stored->ip_dst, - stored->th_sport, stored->th_dport, - &header->ip_src, &header->ip_dst, - header->th_sport, stored->th_dport, - COMPARE_CURR_DIR)) - { - is_unique = FALSE; - break; - } - } - - /* Add address if unique and have space for it */ - if (is_unique && (th->num_hdrs < MAX_SUPPORTED_TCP_HEADERS)) { - /* Need to take a deep copy of the tap struct, it may not be valid - to read after this function returns? */ - th->tcphdrs[th->num_hdrs] = (struct tcpheader *)g_malloc(sizeof(struct tcpheader)); - *(th->tcphdrs[th->num_hdrs]) = *header; - COPY_ADDRESS(&th->tcphdrs[th->num_hdrs]->ip_src, &header->ip_src); - COPY_ADDRESS(&th->tcphdrs[th->num_hdrs]->ip_dst, &header->ip_dst); - - th->num_hdrs++; - } - - return 0; -} - - - -/* XXX should be enhanced so that if we have multiple TCP layers in the trace - * then present the user with a dialog where the user can select WHICH tcp - * session to graph. - */ -static struct tcpheader *select_tcpip_session(capture_file *cf, struct segment *hdrs) -{ - frame_data *fdata; - epan_dissect_t edt; - dfilter_t *sfcode; - GString *error_string; - nstime_t rel_ts; - th_t th = {0, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}}; - - fdata = cf->current_frame; - - /* no real filter yet */ - if (!dfilter_compile("tcp", &sfcode)) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", dfilter_error_msg); - return NULL; - } - - /* dissect the current frame */ - if (!cf_read_frame(cf, fdata)) - return NULL; /* error reading the frame */ - - - error_string=register_tap_listener("tcp", &th, NULL, 0, NULL, tap_tcpip_packet, NULL); - if (error_string) { - fprintf(stderr, "wireshark: Couldn't register tcp_graph tap: %s\n", - error_string->str); - g_string_free(error_string, TRUE); - exit(1); - } - - epan_dissect_init(&edt, cf->epan, TRUE, FALSE); - epan_dissect_prime_dfilter(&edt, sfcode); - epan_dissect_run_with_taps(&edt, &cf->phdr, frame_tvbuff_new_buffer(fdata, &cf->buf), fdata, NULL); - rel_ts = edt.pi.rel_ts; - epan_dissect_cleanup(&edt); - remove_tap_listener(&th); - - if (th.num_hdrs == 0) { - /* This "shouldn't happen", as our menu items shouldn't - * even be enabled if the selected packet isn't a TCP - * segment, as tcp_graph_selected_packet_enabled() is used - * to determine whether to enable any of our menu items. */ - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, - "Selected packet isn't a TCP segment"); - return NULL; - } - /* XXX fix this later, we should show a dialog allowing the user - to select which session he wants here - */ - if (th.num_hdrs > 1) { - /* can only handle a single tcp layer yet */ - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, - "The selected packet has more than one TCP unique conversation " - "in it."); - return NULL; - } - - /* For now, still always choose the first/only one */ - hdrs->num = fdata->num; - hdrs->rel_secs = (guint32) rel_ts.secs; - hdrs->rel_usecs = rel_ts.nsecs/1000; - hdrs->abs_secs = (guint32) fdata->abs_ts.secs; - hdrs->abs_usecs = fdata->abs_ts.nsecs/1000; - hdrs->th_seq = th.tcphdrs[0]->th_seq; - hdrs->th_ack = th.tcphdrs[0]->th_ack; - hdrs->th_win = th.tcphdrs[0]->th_win; - hdrs->th_flags = th.tcphdrs[0]->th_flags; - hdrs->th_sport = th.tcphdrs[0]->th_sport; - hdrs->th_dport = th.tcphdrs[0]->th_dport; - hdrs->th_seglen = th.tcphdrs[0]->th_seglen; - COPY_ADDRESS(&hdrs->ip_src, &th.tcphdrs[0]->ip_src); - COPY_ADDRESS(&hdrs->ip_dst, &th.tcphdrs[0]->ip_dst); - return th.tcphdrs[0]; - -} - -static int compare_headers(address *saddr1, address *daddr1, guint16 sport1, guint16 dport1, const address *saddr2, const address *daddr2, guint16 sport2, guint16 dport2, int dir) -{ - int dir1, dir2; - - dir1 = ((!(CMP_ADDRESS(saddr1, saddr2))) && - (!(CMP_ADDRESS(daddr1, daddr2))) && - (sport1==sport2) && - (dport1==dport2)); - - if (dir == COMPARE_CURR_DIR) { - return dir1; - } else { - dir2 = ((!(CMP_ADDRESS(saddr1, daddr2))) && - (!(CMP_ADDRESS(daddr1, saddr2))) && - (sport1 == dport2) && - (dport1 == sport2)); - return dir1 || dir2; - } -} - -static void graph_segment_list_free(struct graph *g) -{ - struct segment *segment; - - while (g->segments) { - segment = g->segments->next; - g_free(g->segments); - g->segments = segment; - } - g->segments = NULL; -} - -static void graph_element_lists_initialize(struct graph *g) +static void graph_element_lists_initialize(struct gtk_graph *g) { g->elists = (struct element_list *)g_malloc0(sizeof(struct element_list)); } -static void graph_element_lists_make(struct graph *g) +static void graph_element_lists_make(struct gtk_graph *g) { debug(DBS_FENTRY) puts("graph_element_lists_make()"); - switch (g->type) { + switch (g->tg.type) { case GRAPH_TSEQ_STEVENS: tseq_stevens_make_elmtlist(g); break; @@ -2092,12 +1788,12 @@ static void graph_element_lists_make(struct graph *g) wscale_make_elmtlist(g); break; default: - printf("graph_element_lists_make: unknown graph type: %d\n", g->type); + printf("graph_element_lists_make: unknown graph type: %d\n", g->tg.type); break; } } -static void graph_element_lists_free(struct graph *g) +static void graph_element_lists_free(struct gtk_graph *g) { struct element_list *list, *next_list; @@ -2109,7 +1805,7 @@ static void graph_element_lists_free(struct graph *g) g->elists = NULL; /* just to make debugging easier */ } -static void graph_title_pixmap_create(struct graph *g) +static void graph_title_pixmap_create(struct gtk_graph *g) { #if GTK_CHECK_VERSION(2,22,0) if (g->title_surface) { @@ -2131,7 +1827,7 @@ static void graph_title_pixmap_create(struct graph *g) #endif } -static void graph_title_pixmap_draw(struct graph *g) +static void graph_title_pixmap_draw(struct gtk_graph *g) { int i; cairo_t *cr; @@ -2159,7 +1855,7 @@ static void graph_title_pixmap_draw(struct graph *g) cairo_destroy(cr); } -static void graph_title_pixmap_display(struct graph *g) +static void graph_title_pixmap_display(struct gtk_graph *g) { cairo_t *cr; @@ -2174,7 +1870,7 @@ static void graph_title_pixmap_display(struct graph *g) cairo_destroy(cr); } -static void graph_pixmaps_create(struct graph *g) +static void graph_pixmaps_create(struct gtk_graph *g) { debug(DBS_FENTRY) puts("graph_pixmaps_create()"); #if GTK_CHECK_VERSION(2,22,0) @@ -2214,7 +1910,7 @@ static void graph_pixmaps_create(struct graph *g) #endif /* GTK_CHECK_VERSION(2,22,0) */ } -static void graph_display(struct graph *g) +static void graph_display(struct gtk_graph *g) { set_busy_cursor(gtk_widget_get_window(g->drawing_area)); graph_pixmap_draw(g); @@ -2223,7 +1919,7 @@ static void graph_display(struct graph *g) graph_pixmap_display(g); } -static void graph_pixmap_display(struct graph *g) +static void graph_pixmap_display(struct gtk_graph *g) { cairo_t *cr; @@ -2241,12 +1937,12 @@ static void graph_pixmap_display(struct graph *g) } } -static void graph_pixmaps_switch(struct graph *g) +static void graph_pixmaps_switch(struct gtk_graph *g) { g->displayed = 1 ^ g->displayed; } -static void graph_pixmap_draw(struct graph *g) +static void graph_pixmap_draw(struct gtk_graph *g) { struct element_list *list; struct element *e; @@ -2315,7 +2011,7 @@ static void graph_pixmap_draw(struct graph *g) cairo_destroy(cr); } -static void draw_element_line(struct graph *g, struct element *e, cairo_t *cr, +static void draw_element_line(struct gtk_graph *g, struct element *e, cairo_t *cr, GdkRGBA *new_color) { int xx1, xx2, yy1, yy2; @@ -2355,7 +2051,7 @@ static void draw_element_line(struct graph *g, struct element *e, cairo_t *cr, cairo_line_to(cr, xx2+0.5, yy2+0.5); } -static void draw_element_ellipse(struct graph *g, struct element *e, cairo_t *cr) +static void draw_element_ellipse(struct gtk_graph *g, struct element *e, cairo_t *cr) { gdouble w = e->p.ellipse.dim.width; gdouble h = e->p.ellipse.dim.height; @@ -2441,7 +2137,7 @@ static void axis_display(struct axis *axis) static void v_axis_pixmap_draw(struct axis *axis) { - struct graph *g = axis->g; + struct gtk_graph *g = axis->g; int i; double major_tick; int not_disp, rdigits, offset, imin, imax; @@ -2543,7 +2239,7 @@ static void v_axis_pixmap_draw(struct axis *axis) static void h_axis_pixmap_draw(struct axis *axis) { - struct graph *g = axis->g; + struct gtk_graph *g = axis->g; int i; double major_tick, minor_tick; int not_disp, rdigits, offset, imin, imax; @@ -2815,7 +2511,7 @@ static double axis_zoom_get(struct axis *axis, int dir) } } -static void graph_select_segment(struct graph *g, int x, int y) +static void graph_select_segment(struct gtk_graph *g, int x, int y) { struct element_list *list; struct element *e; @@ -2900,7 +2596,7 @@ static int ellipse_detect_collision(struct element *e, int x, int y) return FALSE; } -static void cross_draw(struct graph *g, int x, int y) +static void cross_draw(struct gtk_graph *g, int x, int y) { /* Shouldn't draw twice onto the same position if haven't erased in the meantime! */ @@ -2932,7 +2628,7 @@ static void cross_draw(struct graph *g, int x, int y) g->cross.erase_needed = TRUE; } -static void zoomrect_draw(struct graph *g, int x, int y) +static void zoomrect_draw(struct gtk_graph *g, int x, int y) { if ((x > g->wp.x + 0.5) && (x < g->wp.x+g->wp.width) && (y > g->wp.y) && (y < g->wp.y+g->wp.height)) { @@ -2950,14 +2646,14 @@ static void zoomrect_draw(struct graph *g, int x, int y) g->zoomrect_erase_needed = TRUE; } -static void zoomrect_erase(struct graph *g) +static void zoomrect_erase(struct gtk_graph *g) { /* Just redraw what is in the pixmap buffer */ graph_pixmap_display(g); g->zoomrect_erase_needed = FALSE; } -static void cross_erase(struct graph *g) +static void cross_erase(struct gtk_graph *g) { int x = g->cross.x; int y = g->cross.y; @@ -2972,7 +2668,7 @@ static void cross_erase(struct graph *g) } } -static void magnify_move(struct graph *g, int x, int y) +static void magnify_move(struct gtk_graph *g, int x, int y) { struct ipoint pos, offsetpos; @@ -2987,15 +2683,15 @@ static void magnify_move(struct graph *g, int x, int y) magnify_draw(g); } -static void magnify_create(struct graph *g, int x, int y) +static void magnify_create(struct gtk_graph *g, int x, int y) { - struct graph *mg; + struct gtk_graph *mg; struct ipoint pos, offsetpos; GdkEvent *e = NULL; struct element_list *list, *new_list; - mg = g->magnify.g = (struct graph * )g_malloc(sizeof(struct graph)); - memcpy((void * )mg, (void * )g, sizeof(struct graph)); + mg = g->magnify.g = (struct gtk_graph * )g_malloc(sizeof(struct gtk_graph)); + memcpy((void * )mg, (void * )g, sizeof(struct gtk_graph)); mg->toplevel = dlg_window_new("tcp graph magnify"); mg->drawing_area = mg->toplevel; @@ -3061,10 +2757,10 @@ static void magnify_create(struct graph *g, int x, int y) g->magnify.active = 1; } -static void magnify_destroy(struct graph *g) +static void magnify_destroy(struct gtk_graph *g) { struct element_list *list; - struct graph *mg = g->magnify.g; + struct gtk_graph *mg = g->magnify.g; window_destroy(GTK_WIDGET(mg->drawing_area)); @@ -3093,7 +2789,7 @@ static void magnify_destroy(struct graph *g) g->magnify.active = 0; } -static void magnify_get_geom(struct graph *g, int x, int y) +static void magnify_get_geom(struct gtk_graph *g, int x, int y) { int posx, posy; @@ -3113,7 +2809,7 @@ static void magnify_get_geom(struct graph *g, int x, int y) g->magnify.g->geom.y -= (g->magnify.y - posy); } -static void magnify_draw(struct graph *g) +static void magnify_draw(struct gtk_graph *g) { cairo_t *cr; int not_disp = 1 ^ g->magnify.g->displayed; @@ -3150,7 +2846,7 @@ static void magnify_draw(struct graph *g) static gboolean configure_event(GtkWidget *widget _U_, GdkEventConfigure *event, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; struct { double x, y; } zoom; @@ -3210,7 +2906,7 @@ static gboolean configure_event(GtkWidget *widget _U_, GdkEventConfigure *event, static gboolean draw_event(GtkWidget *widget _U_, cairo_t *cr, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; debug(DBS_FENTRY) puts("draw_event()"); @@ -3234,7 +2930,7 @@ draw_event(GtkWidget *widget _U_, cairo_t *cr, gpointer user_data) #else static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; cairo_t *cr; debug(DBS_FENTRY) puts("expose_event()"); @@ -3270,7 +2966,7 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer #define ZOOM_REDRAW 1 #define ZOOM_NOREDRAW 0 static void -perform_zoom(struct graph *g, struct zoomfactor *zf, +perform_zoom(struct gtk_graph *g, struct zoomfactor *zf, int origin_x, int origin_y, int redraw) { int cur_width = g->geom.width, cur_height = g->geom.height; @@ -3328,7 +3024,7 @@ perform_zoom(struct graph *g, struct zoomfactor *zf, } static void -get_zoomfactor(struct graph *g, struct zoomfactor *zf, double step_x, +get_zoomfactor(struct gtk_graph *g, struct zoomfactor *zf, double step_x, double step_y) { if (g->zoom.flags & ZOOM_OUT) { @@ -3363,7 +3059,7 @@ get_zoomfactor(struct graph *g, struct zoomfactor *zf, double step_x, } static void -do_zoom_rectangle(struct graph *g, struct irect lcl_zoomrect) +do_zoom_rectangle(struct gtk_graph *g, struct irect lcl_zoomrect) { int cur_width = g->wp.width, cur_height = g->wp.height; struct irect geom1 = g->geom; @@ -3455,7 +3151,7 @@ do_zoom_rectangle(struct graph *g, struct irect lcl_zoomrect) -static void do_zoom_mouse(struct graph *g, GdkEventButton *event) +static void do_zoom_mouse(struct gtk_graph *g, GdkEventButton *event) { struct zoomfactor factor; @@ -3463,7 +3159,7 @@ static void do_zoom_mouse(struct graph *g, GdkEventButton *event) perform_zoom(g, &factor, (int)event->x, (int)event->y, ZOOM_REDRAW); } -static void do_zoom_keyboard(struct graph *g) +static void do_zoom_keyboard(struct gtk_graph *g) { int pointer_x, pointer_y; struct zoomfactor factor; @@ -3473,20 +3169,20 @@ static void do_zoom_keyboard(struct graph *g) perform_zoom(g, &factor, pointer_x, pointer_y, ZOOM_REDRAW); } -static void do_zoom_in_keyboard(struct graph *g) +static void do_zoom_in_keyboard(struct gtk_graph *g) { gtk_toggle_button_set_active(g->zoom.widget.in_toggle, TRUE); do_zoom_keyboard(g); } -static void do_zoom_out_keyboard(struct graph *g) +static void do_zoom_out_keyboard(struct gtk_graph *g) { gtk_toggle_button_set_active(g->zoom.widget.out_toggle, TRUE); do_zoom_keyboard(g); gtk_toggle_button_set_active(g->zoom.widget.in_toggle, TRUE); } -static void do_select_segment(struct graph *g) +static void do_select_segment(struct gtk_graph *g) { int pointer_x, pointer_y; @@ -3494,32 +3190,32 @@ static void do_select_segment(struct graph *g) graph_select_segment(g, pointer_x, pointer_y); } -static void do_wscale_graph(struct graph *g) +static void do_wscale_graph(struct gtk_graph *g) { gtk_toggle_button_set_active(g->gt.graph_wscale, TRUE); } -static void do_rtt_graph(struct graph *g) +static void do_rtt_graph(struct gtk_graph *g) { gtk_toggle_button_set_active(g->gt.graph_rtt, TRUE); } -static void do_throughput_graph(struct graph *g) +static void do_throughput_graph(struct gtk_graph *g) { gtk_toggle_button_set_active(g->gt.graph_tput, TRUE); } -static void do_ts_graph_stevens(struct graph *g) +static void do_ts_graph_stevens(struct gtk_graph *g) { gtk_toggle_button_set_active(g->gt.graph_tseqstevens, TRUE); } -static void do_ts_graph_tcptrace(struct graph *g) +static void do_ts_graph_tcptrace(struct gtk_graph *g) { gtk_toggle_button_set_active(g->gt.graph_tseqttrace, TRUE); } -static void do_magnify_create(struct graph *g) +static void do_magnify_create(struct gtk_graph *g) { int pointer_x, pointer_y; @@ -3527,7 +3223,7 @@ static void do_magnify_create(struct graph *g) magnify_create(g, (int )rint(pointer_x), (int )rint(pointer_y)); } -static void do_key_motion(struct graph *g) +static void do_key_motion(struct gtk_graph *g) { if (g->geom.x > g->wp.x) g->geom.x = g->wp.x; @@ -3550,25 +3246,25 @@ static void do_key_motion(struct graph *g) } } -static void do_key_motion_up(struct graph *g, int step) +static void do_key_motion_up(struct gtk_graph *g, int step) { g->geom.y += step; do_key_motion(g); } -static void do_key_motion_down(struct graph *g, int step) +static void do_key_motion_down(struct gtk_graph *g, int step) { g->geom.y -= step; do_key_motion(g); } -static void do_key_motion_left(struct graph *g, int step) +static void do_key_motion_left(struct gtk_graph *g, int step) { g->geom.x += step; do_key_motion(g); } -static void do_key_motion_right(struct graph *g, int step) +static void do_key_motion_right(struct gtk_graph *g, int step) { g->geom.x -= step; do_key_motion(g); @@ -3576,7 +3272,7 @@ static void do_key_motion_right(struct graph *g, int step) static gboolean button_press_event(GtkWidget *widget _U_, GdkEventButton *event, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; debug(DBS_FENTRY) puts("button_press_event()"); @@ -3625,7 +3321,7 @@ static gboolean button_press_event(GtkWidget *widget _U_, GdkEventButton *event, static gboolean motion_notify_event(GtkWidget *widget _U_, GdkEventMotion *event, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; int x, y; GdkModifierType state; @@ -3694,7 +3390,7 @@ static gboolean motion_notify_event(GtkWidget *widget _U_, GdkEventMotion *event static gboolean button_release_event(GtkWidget *widget _U_, GdkEventButton *event, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; debug(DBS_FENTRY) puts("button_release_event()"); @@ -3733,7 +3429,7 @@ static gboolean button_release_event(GtkWidget *widget _U_, GdkEventButton *even static gboolean key_press_event(GtkWidget *widget _U_, GdkEventKey *event, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; int step; debug(DBS_FENTRY) puts("key_press_event()"); @@ -3814,7 +3510,7 @@ static gboolean key_press_event(GtkWidget *widget _U_, GdkEventKey *event, gpoin static gboolean key_release_event(GtkWidget *widget _U_, GdkEventKey *event, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; debug(DBS_FENTRY) puts("key_release_event()"); @@ -3828,7 +3524,7 @@ static gboolean key_release_event(GtkWidget *widget _U_, GdkEventKey *event, gpo static gboolean leave_notify_event(GtkWidget *widget _U_, GdkEventCrossing *event _U_, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; if (g->cross.erase_needed) cross_erase(g); @@ -3838,7 +3534,7 @@ static gboolean leave_notify_event(GtkWidget *widget _U_, GdkEventCrossing *even static gboolean enter_notify_event(GtkWidget *widget, GdkEventCrossing *event _U_, gpointer user_data) { - struct graph *g = (struct graph *)user_data; + struct gtk_graph *g = (struct gtk_graph *)user_data; graph_pixmap_display(g); if (g->cross.draw) { @@ -3849,7 +3545,7 @@ static gboolean enter_notify_event(GtkWidget *widget, GdkEventCrossing *event _U return TRUE; } -static void toggle_crosshairs(struct graph *g) +static void toggle_crosshairs(struct gtk_graph *g) { g->cross.draw ^= 1; if (g->cross.draw) { @@ -3867,9 +3563,9 @@ static void toggle_crosshairs(struct graph *g) gtk_toggle_button_set_active(g->cross.off_toggle, TRUE); } -static void toggle_time_origin(struct graph *g) +static void toggle_time_origin(struct gtk_graph *g) { - switch (g->type) { + switch (g->tg.type) { case GRAPH_TSEQ_STEVENS: tseq_stevens_toggle_time_origin(g); break; @@ -3885,9 +3581,9 @@ static void toggle_time_origin(struct graph *g) axis_display(g->x_axis); } -static void toggle_seq_origin(struct graph *g) +static void toggle_seq_origin(struct gtk_graph *g) { - switch (g->type) { + switch (g->tg.type) { case GRAPH_TSEQ_STEVENS: tseq_stevens_toggle_seq_origin(g); axis_display(g->y_axis); @@ -3905,7 +3601,7 @@ static void toggle_seq_origin(struct graph *g) } } -static void restore_initial_graph_view(struct graph *g) +static void restore_initial_graph_view(struct gtk_graph *g) { g->geom.width = g->wp.width; g->geom.height = g->wp.height; @@ -3918,14 +3614,14 @@ static void restore_initial_graph_view(struct graph *g) } } -static int get_num_dsegs(struct graph *g) +static int get_num_dsegs(struct gtk_graph *g) { int count; struct segment *tmp; - for (tmp=g->segments, count=0; tmp; tmp=tmp->next) { - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + for (tmp=g->tg.segments, count=0; tmp; tmp=tmp->next) { + if (compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &tmp->ip_src, &tmp->ip_dst, tmp->th_sport, tmp->th_dport, COMPARE_CURR_DIR)) { @@ -3935,14 +3631,14 @@ static int get_num_dsegs(struct graph *g) return count; } -static int get_num_acks(struct graph *g, int *num_sack_ranges) +static int get_num_acks(struct gtk_graph *g, int *num_sack_ranges) { int count; struct segment *tmp; - for (tmp = g->segments, count=0; tmp; tmp = tmp->next) { - if (!compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + for (tmp = g->tg.segments, count=0; tmp; tmp = tmp->next) { + if (!compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &tmp->ip_src, &tmp->ip_dst, tmp->th_sport, tmp->th_dport, COMPARE_CURR_DIR)) { @@ -3957,7 +3653,7 @@ static int get_num_acks(struct graph *g, int *num_sack_ranges) * Stevens-style time-sequence grapH */ -static void tseq_stevens_read_config(struct graph *g) +static void tseq_stevens_read_config(struct gtk_graph *g) { debug(DBS_FENTRY) puts("tseq_stevens_read_config()"); @@ -3978,7 +3674,7 @@ static void tseq_stevens_read_config(struct graph *g) } /* Used by both 'stevens' and 'tcptrace' */ -static void tseq_initialize(struct graph *g) +static void tseq_initialize(struct gtk_graph *g) { debug(DBS_FENTRY) puts("tseq_initialize()"); tseq_get_bounds(g); @@ -3986,13 +3682,15 @@ static void tseq_initialize(struct graph *g) g->x_axis->min = 0; g->y_axis->min = 0; - switch (g->type) { + switch (g->tg.type) { case GRAPH_TSEQ_STEVENS: tseq_stevens_read_config(g); break; case GRAPH_TSEQ_TCPTRACE: tseq_tcptrace_read_config(g); break; + default: + break; } } @@ -4007,7 +3705,7 @@ static void tseq_initialize(struct graph *g) /* ToDo: worry about handling cases such as trying to plot seq of just 1 frame */ -static void tseq_get_bounds(struct graph *g) +static void tseq_get_bounds(struct gtk_graph *g) { struct segment *tmp; double tim; @@ -4027,9 +3725,9 @@ static void tseq_get_bounds(struct graph *g) guint32 win_seq_high = 0; /* go thru all segments to determine "bounds" */ - for (tmp=g->segments; tmp; tmp=tmp->next) { - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + for (tmp=g->tg.segments; tmp; tmp=tmp->next) { + if (compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &tmp->ip_src, &tmp->ip_dst, tmp->th_sport, tmp->th_dport, COMPARE_CURR_DIR)) { @@ -4071,7 +3769,7 @@ static void tseq_get_bounds(struct graph *g) /* if 'stevens': use only data segments to determine bounds */ /* if 'tcptrace': use both data and ack segments to determine bounds */ - switch (g->type) { + switch (g->tg.type) { case GRAPH_TSEQ_STEVENS: g->bounds.x0 = data_tim_low; g->bounds.width = data_tim_high - data_tim_low; @@ -4092,6 +3790,8 @@ static void tseq_get_bounds(struct graph *g) g->bounds.height = ((((data_seq_high >= win_seq_high) && data_frame_seen) || (! ack_frame_seen)) ? data_seq_high : win_seq_high) - g->bounds.y0; break; + default: + break; } g->zoom.x = (g->geom.width - 1) / g->bounds.width; @@ -4099,7 +3799,7 @@ static void tseq_get_bounds(struct graph *g) } -static void tseq_stevens_make_elmtlist(struct graph *g) +static void tseq_stevens_make_elmtlist(struct gtk_graph *g) { struct segment *tmp; struct element *elements, *e; @@ -4114,11 +3814,11 @@ static void tseq_stevens_make_elmtlist(struct graph *g) } else e = elements = g->elists->elements; - for (tmp = g->segments; tmp; tmp = tmp->next) { + for (tmp = g->tg.segments; tmp; tmp = tmp->next) { double secs, seqno; - if (!compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + if (!compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &tmp->ip_src, &tmp->ip_dst, tmp->th_sport, tmp->th_dport, COMPARE_CURR_DIR)) { @@ -4141,7 +3841,7 @@ static void tseq_stevens_make_elmtlist(struct graph *g) g->elists->elements = elements; } -static void tseq_stevens_toggle_seq_origin(struct graph *g) +static void tseq_stevens_toggle_seq_origin(struct gtk_graph *g) { g->s.tseq_stevens.flags ^= SEQ_ORIGIN; @@ -4151,7 +3851,7 @@ static void tseq_stevens_toggle_seq_origin(struct graph *g) g->y_axis->min = 0; } -static void tseq_stevens_toggle_time_origin(struct graph *g) +static void tseq_stevens_toggle_time_origin(struct gtk_graph *g) { g->s.tseq_stevens.flags ^= TIME_ORIGIN; @@ -4165,7 +3865,7 @@ static void tseq_stevens_toggle_time_origin(struct graph *g) * tcptrace-style time-sequence graph */ -static void tseq_tcptrace_read_config(struct graph *g) +static void tseq_tcptrace_read_config(struct gtk_graph *g) { /* Black */ g->s.tseq_tcptrace.seq_color.red = (double)0 / 65535.0; @@ -4217,7 +3917,7 @@ static void tseq_tcptrace_read_config(struct graph *g) g->x_axis->label[1] = NULL; } -static void tseq_tcptrace_make_elmtlist(struct graph *g) +static void tseq_tcptrace_make_elmtlist(struct gtk_graph *g) { struct segment *tmp; struct element *elements0, *e0; /* list of elmts with prio 0 */ @@ -4256,15 +3956,15 @@ static void tseq_tcptrace_make_elmtlist(struct graph *g) yy0 = g->bounds.y0; seq_base = (guint32) yy0; - for (tmp = g->segments; tmp; tmp = tmp->next) { + for (tmp = g->tg.segments; tmp; tmp = tmp->next) { double secs, data; double x; secs = tmp->rel_secs + tmp->rel_usecs / 1000000.0; x = secs - xx0; x *= g->zoom.x; - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + if (compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &tmp->ip_src, &tmp->ip_dst, tmp->th_sport, tmp->th_dport, COMPARE_CURR_DIR)) { @@ -4406,7 +4106,7 @@ static void tseq_tcptrace_make_elmtlist(struct graph *g) g->elists->next->next = NULL; } -static void tseq_tcptrace_toggle_seq_origin(struct graph *g) +static void tseq_tcptrace_toggle_seq_origin(struct gtk_graph *g) { g->s.tseq_tcptrace.flags ^= SEQ_ORIGIN; @@ -4416,7 +4116,7 @@ static void tseq_tcptrace_toggle_seq_origin(struct graph *g) g->y_axis->min = 0; } -static void tseq_tcptrace_toggle_time_origin(struct graph *g) +static void tseq_tcptrace_toggle_time_origin(struct gtk_graph *g) { g->s.tseq_tcptrace.flags ^= TIME_ORIGIN; @@ -4430,7 +4130,7 @@ static void tseq_tcptrace_toggle_time_origin(struct graph *g) * throughput graph */ -static void tput_make_elmtlist(struct graph *g) +static void tput_make_elmtlist(struct gtk_graph *g) { struct segment *tmp, *oldest; struct element *elements, *e; @@ -4444,7 +4144,7 @@ static void tput_make_elmtlist(struct graph *g) } else e = elements = g->elists->elements; - for (oldest=g->segments, tmp=g->segments->next, i=0; tmp; tmp=tmp->next, i++) { + for (oldest=g->tg.segments, tmp=g->tg.segments->next, i=0; tmp; tmp=tmp->next, i++) { double time_val = tmp->rel_secs + tmp->rel_usecs/1000000.0; dtime = time_val - (oldest->rel_secs + oldest->rel_usecs/1000000.0); if (i>g->s.tput.nsegs) { @@ -4470,7 +4170,7 @@ static void tput_make_elmtlist(struct graph *g) /* Purpose of <graph_type>_initialize functions: * - find maximum and minimum for both axes * - call setup routine for style struct */ -static void tput_initialize(struct graph *g) +static void tput_initialize(struct gtk_graph *g) { struct segment *tmp, *oldest/*, *last*/; int i, sum = 0; @@ -4482,9 +4182,9 @@ static void tput_initialize(struct graph *g) tput_read_config(g); #if 0 - for (last=g->segments; last->next; last=last->next); /* XXX: does nothing useful ? */ + for (last=g->tg.segments; last->next; last=last->next); /* XXX: does nothing useful ? */ #endif - for (oldest=g->segments, tmp=g->segments->next, i=0; tmp; tmp=tmp->next, i++) { + for (oldest=g->tg.segments, tmp=g->tg.segments->next, i=0; tmp; tmp=tmp->next, i++) { dtime = tmp->rel_secs + tmp->rel_usecs/1000000.0 - (oldest->rel_secs + oldest->rel_usecs/1000000.0); if (i > g->s.tput.nsegs) { @@ -4501,7 +4201,7 @@ static void tput_initialize(struct graph *g) tmax = t; } - t0 = g->segments->rel_secs + g->segments->rel_usecs / 1000000.0; + t0 = g->tg.segments->rel_secs + g->tg.segments->rel_usecs / 1000000.0; yy0 = 0; ymax = tputmax; @@ -4513,7 +4213,7 @@ static void tput_initialize(struct graph *g) g->zoom.y = (g->geom.height -1) / g->bounds.height; } -static void tput_read_config(struct graph *g) +static void tput_read_config(struct gtk_graph *g) { debug(DBS_FENTRY) puts("tput_read_config()"); @@ -4534,7 +4234,7 @@ static void tput_read_config(struct graph *g) g->s.tput.flags = 0; } -static void tput_toggle_time_origin(struct graph *g) +static void tput_toggle_time_origin(struct gtk_graph *g) { g->s.tput.flags ^= TIME_ORIGIN; @@ -4546,7 +4246,7 @@ static void tput_toggle_time_origin(struct graph *g) /* RTT graph */ -static void rtt_read_config(struct graph *g) +static void rtt_read_config(struct gtk_graph *g) { debug(DBS_FENTRY) puts("rtt_read_config()"); @@ -4565,7 +4265,7 @@ static void rtt_read_config(struct graph *g) g->x_axis->label[1] = NULL; } -static void rtt_initialize(struct graph *g) +static void rtt_initialize(struct gtk_graph *g) { struct segment *tmp, *first = NULL; struct unack *unack = NULL, *u; @@ -4578,9 +4278,9 @@ static void rtt_initialize(struct graph *g) rtt_read_config(g); - for (tmp=g->segments; tmp; tmp=tmp->next) { - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + for (tmp=g->tg.segments; tmp; tmp=tmp->next) { + if (compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &tmp->ip_src, &tmp->ip_dst, tmp->th_sport, tmp->th_dport, COMPARE_CURR_DIR)) { @@ -4689,7 +4389,7 @@ static void rtt_delete_unack_from_list(struct unack **l, struct unack *dead) } } -static void rtt_make_elmtlist(struct graph *g) +static void rtt_make_elmtlist(struct gtk_graph *g) { struct segment *tmp; struct unack *unack = NULL, *u; @@ -4705,9 +4405,9 @@ static void rtt_make_elmtlist(struct graph *g) e = elements = g->elists->elements; } - for (tmp=g->segments; tmp; tmp=tmp->next) { - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + for (tmp=g->tg.segments; tmp; tmp=tmp->next) { + if (compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &tmp->ip_src, &tmp->ip_dst, tmp->th_sport, tmp->th_dport, COMPARE_CURR_DIR)) { @@ -4747,7 +4447,7 @@ static void rtt_make_elmtlist(struct graph *g) g->elists->elements = elements; } -static void rtt_toggle_seq_origin(struct graph *g) +static void rtt_toggle_seq_origin(struct gtk_graph *g) { g->s.rtt.flags ^= SEQ_ORIGIN; @@ -4759,7 +4459,7 @@ static void rtt_toggle_seq_origin(struct graph *g) /* WSCALE Graph */ -static void wscale_read_config(struct graph *g) +static void wscale_read_config(struct gtk_graph *g) { debug(DBS_FENTRY) puts("wscale_read_config()"); @@ -4783,7 +4483,7 @@ static void wscale_read_config(struct graph *g) (1) Find maximum and minimum values for Window-Size(scaled) and seconds (2) call function to define window related values */ -static void wscale_initialize(struct graph *g) +static void wscale_initialize(struct gtk_graph *g) { struct segment *segm = NULL; @@ -4796,9 +4496,9 @@ static void wscale_initialize(struct graph *g) debug(DBS_FENTRY) puts("wscale_initialize()"); - for (segm=g->segments; segm; segm=segm->next) { - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + for (segm=g->tg.segments; segm; segm=segm->next) { + if (compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &segm->ip_src, &segm->ip_dst, segm->th_sport, segm->th_dport, COMPARE_CURR_DIR)) @@ -4835,7 +4535,7 @@ static void wscale_initialize(struct graph *g) /* (1) Fill & allocate memory for segments times elements, */ -static void wscale_make_elmtlist(struct graph *g) +static void wscale_make_elmtlist(struct gtk_graph *g) { struct segment *segm = NULL; struct element *elements = NULL; @@ -4854,9 +4554,9 @@ static void wscale_make_elmtlist(struct graph *g) e = elements = g->elists->elements; - for ( segm=g->segments; segm; segm=segm->next ) { - if (compare_headers(&g->src_address, &g->dst_address, - g->src_port, g->dst_port, + for ( segm=g->tg.segments; segm; segm=segm->next ) { + if (compare_headers(&g->tg.src_address, &g->tg.dst_address, + g->tg.src_port, g->tg.dst_port, &segm->ip_src, &segm->ip_dst, segm->th_sport, segm->th_dport, COMPARE_CURR_DIR)) @@ -4903,9 +4603,3 @@ static int rint(double x) return(i); } #endif - -gboolean tcp_graph_selected_packet_enabled(frame_data *current_frame, epan_dissect_t *edt, gpointer callback_data _U_) -{ - return current_frame != NULL ? (edt->pi.ipproto == IP_PROTO_TCP) : FALSE; -} - |