diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/Makefile.common | 1 | ||||
-rw-r--r-- | gtk/follow_ssl.c | 16 | ||||
-rw-r--r-- | gtk/follow_stream.c | 29 | ||||
-rw-r--r-- | gtk/follow_stream.h | 11 | ||||
-rw-r--r-- | gtk/follow_tcp.c | 8 | ||||
-rw-r--r-- | gtk/main.c | 2 | ||||
-rw-r--r-- | gtk/menu.c | 15 |
7 files changed, 61 insertions, 21 deletions
diff --git a/gtk/Makefile.common b/gtk/Makefile.common index c8edd225f4..4f7abf58ec 100644 --- a/gtk/Makefile.common +++ b/gtk/Makefile.common @@ -73,6 +73,7 @@ WIRESHARK_GTK_SRC = \ follow_ssl.c \ follow_stream.c \ follow_tcp.c \ + follow_udp.c \ font_utils.c \ goto_dlg.c \ graph_analysis.c \ diff --git a/gtk/follow_ssl.c b/gtk/follow_ssl.c index a682a628d3..335e7c09a2 100644 --- a/gtk/follow_ssl.c +++ b/gtk/follow_ssl.c @@ -125,8 +125,8 @@ ssl_queue_packet_data(void *tapdata, packet_info *pinfo, epan_dissect_t *edt _U_ p += appl_data->plain_data.data_len; appl_data = appl_data->next; } while (appl_data); - follow_info->ssl_decrypted_data = g_list_append( - follow_info->ssl_decrypted_data,rec); + follow_info->payload = g_list_append( + follow_info->payload,rec); return 0; } @@ -150,7 +150,7 @@ follow_ssl_stream_cb(GtkWidget * w, gpointer data _U_) gchar *server_to_client_string = NULL; gchar *client_to_server_string = NULL; gchar *both_directions_string = NULL; - follow_tcp_stats_t stats; + follow_stats_t stats; follow_info_t *follow_info; GString* msg; @@ -223,7 +223,7 @@ follow_ssl_stream_cb(GtkWidget * w, gpointer data _U_) remove_tap_listener(follow_info); /* Stream to show */ - follow_tcp_stats(&stats); + follow_stats(&stats); if (stats.is_ipv6) { struct e_in6_addr ipaddr; @@ -239,8 +239,8 @@ follow_ssl_stream_cb(GtkWidget * w, gpointer data _U_) hostname1 = get_hostname(ipaddr); } - port0 = get_tcp_port(stats.tcp_port[0]); - port1 = get_tcp_port(stats.tcp_port[1]); + port0 = get_tcp_port(stats.port[0]); + port1 = get_tcp_port(stats.port[1]); follow_info->is_ipv6 = stats.is_ipv6; @@ -302,7 +302,7 @@ follow_read_ssl_stream(follow_info_t *follow_info, iplen = (follow_info->is_ipv6) ? 16 : 4; - for (cur = follow_info->ssl_decrypted_data; cur; cur = g_list_next(cur)) { + for (cur = follow_info->payload; cur; cur = g_list_next(cur)) { SslDecryptedRecord* rec = cur->data; skip = FALSE; if (!rec->is_server) { @@ -320,7 +320,7 @@ follow_read_ssl_stream(follow_info_t *follow_info, if (!skip) { size_t nchars = rec->data.data_len; - gchar *buffer = g_strndup(rec->data.data, nchars); + gchar *buffer = g_memdup(rec->data.data, nchars); frs_return = follow_show(follow_info, print_line, buffer, nchars, rec->is_server, arg, global_pos); diff --git a/gtk/follow_stream.c b/gtk/follow_stream.c index 155044881b..f44de7cc8b 100644 --- a/gtk/follow_stream.c +++ b/gtk/follow_stream.c @@ -81,6 +81,9 @@ follow_read_stream(follow_info_t *follow_info, case FOLLOW_TCP : return follow_read_tcp_stream(follow_info, print_line, arg); + case FOLLOW_UDP : + return follow_read_udp_stream(follow_info, print_line, arg); + case FOLLOW_SSL : return follow_read_ssl_stream(follow_info, print_line, arg); @@ -542,7 +545,7 @@ follow_save_as_cmd_cb(GtkWidget *w _U_, gpointer data) return; } - new_win = file_selection_new("Wireshark: Save TCP Follow Stream As", + new_win = file_selection_new("Wireshark: Save Follow Stream As", FILE_SELECTION_SAVE); follow_info->follow_save_as_w = new_win; @@ -728,7 +731,7 @@ follow_stream(gchar *title, follow_info_t *follow_info, GtkWidget *stream_fr, *stream_vb; GtkWidget *stream_om, *stream_menu, *stream_mi; GtkTooltips *tooltips; - follow_tcp_stats_t stats; + follow_stats_t stats; streamwindow = dlg_window_new(title); @@ -803,7 +806,7 @@ follow_stream(gchar *title, follow_info_t *follow_info, gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); /* Stream to show */ - follow_tcp_stats(&stats); + follow_stats(&stats); follow_info->is_ipv6 = stats.is_ipv6; @@ -947,6 +950,7 @@ static void follow_destroy_cb(GtkWidget *w, gpointer data _U_) { follow_info_t *follow_info; + follow_record_t *follow_record; GList *cur; int i; @@ -955,22 +959,35 @@ follow_destroy_cb(GtkWidget *w, gpointer data _U_) switch(follow_info->follow_type) { case FOLLOW_TCP : - i = unlink(follow_info->data_out_filename); if(i != 0) { g_warning("Follow: Couldn't remove temporary file: \"%s\", errno: %s (%u)", follow_info->data_out_filename, strerror(errno), errno); } break; + case FOLLOW_UDP : + for(cur = follow_info->payload; cur; cur = g_list_next(cur)) + if(cur->data) { + follow_record = cur->data; + if(follow_record->data) + g_byte_array_free(follow_record->data, + TRUE); + + g_free(follow_record); + } + + g_list_free(follow_info->payload); + break; + case FOLLOW_SSL : /* free decrypted data list*/ - for (cur = follow_info->ssl_decrypted_data; cur; cur = g_list_next(cur)) + for (cur = follow_info->payload; cur; cur = g_list_next(cur)) if (cur->data) { g_free(cur->data); cur->data = NULL; } - g_list_free (follow_info->ssl_decrypted_data); + g_list_free (follow_info->payload); break; } diff --git a/gtk/follow_stream.h b/gtk/follow_stream.h index b70b286620..419de3ab66 100644 --- a/gtk/follow_stream.h +++ b/gtk/follow_stream.h @@ -32,7 +32,8 @@ /* Type of follow we are doing */ typedef enum { FOLLOW_TCP, - FOLLOW_SSL + FOLLOW_SSL, + FOLLOW_UDP } follow_type_t; /* Show Stream */ @@ -59,6 +60,11 @@ typedef enum { } frs_return_t; typedef struct { + gboolean is_server; + GByteArray *data; +} follow_record_t; + +typedef struct { follow_type_t follow_type; show_stream_t show_stream; show_type_t show_type; @@ -77,7 +83,7 @@ typedef struct { char *filter_out_filter; GtkWidget *filter_te; GtkWidget *streamwindow; - GList *ssl_decrypted_data; + GList *payload; guint bytes_written[2]; guint client_port; char client_ip[MAX_IPADDR_LEN]; @@ -117,4 +123,5 @@ frs_return_t follow_show(follow_info_t *follow_info, void *arg, guint32 *global_pos); frs_return_t follow_read_tcp_stream(follow_info_t *follow_info, gboolean (*print_line)(char *, size_t, gboolean, void *), void *arg); +frs_return_t follow_read_udp_stream(follow_info_t *follow_info, gboolean (*print_line)(char *, size_t, gboolean, void *), void *arg); frs_return_t follow_read_ssl_stream(follow_info_t *follow_info, gboolean (*print_line)(char *, size_t, gboolean, void *), void *arg); diff --git a/gtk/follow_tcp.c b/gtk/follow_tcp.c index 86364cdaaf..221f8006b2 100644 --- a/gtk/follow_tcp.c +++ b/gtk/follow_tcp.c @@ -111,7 +111,7 @@ follow_tcp_stream_cb(GtkWidget * w, gpointer data _U_) gchar *server_to_client_string = NULL; gchar *client_to_server_string = NULL; gchar *both_directions_string = NULL; - follow_tcp_stats_t stats; + follow_stats_t stats; follow_info_t *follow_info; tcp_stream_chunk sc; size_t nchars; @@ -240,7 +240,7 @@ follow_tcp_stream_cb(GtkWidget * w, gpointer data _U_) session (this is dumped to file by the TCP dissector). */ /* Stream to show */ - follow_tcp_stats(&stats); + follow_stats(&stats); if (stats.is_ipv6) { struct e_in6_addr ipaddr; @@ -258,8 +258,8 @@ follow_tcp_stream_cb(GtkWidget * w, gpointer data _U_) follow_info->is_ipv6 = stats.is_ipv6; - port0 = get_tcp_port(stats.tcp_port[0]); - port1 = get_tcp_port(stats.tcp_port[1]); + port0 = get_tcp_port(stats.port[0]); + port1 = get_tcp_port(stats.port[1]); /* Host 0 --> Host 1 */ if(sc.src_port == strtol(port0, NULL, 10)) { diff --git a/gtk/main.c b/gtk/main.c index 84802b7046..eb18ffe870 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -4750,6 +4750,8 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs) filter_te); set_menu_object_data("/Analyze/Follow TCP Stream", E_DFILTER_TE_KEY, filter_te); + set_menu_object_data("/Analyze/Follow UDP Stream", E_DFILTER_TE_KEY, + filter_te); set_menu_object_data("/Analyze/Follow SSL Stream", E_DFILTER_TE_KEY, filter_te); set_menu_object_data("/Analyze/Apply as Filter/Selected", E_DFILTER_TE_KEY, diff --git a/gtk/menu.c b/gtk/menu.c index e53618013f..a4377ae38a 100644 --- a/gtk/menu.c +++ b/gtk/menu.c @@ -56,6 +56,8 @@ #include "packet_win.h" #include "print.h" #include "follow_tcp.h" +#include "follow_udp.h" +#include "follow_ssl.h" #include "decode_as_dlg.h" #include "help_dlg.h" #include "supported_protos_dlg.h" @@ -79,7 +81,6 @@ #include "simple_dialog.h" #include "packet_history.h" #include "color_filters.h" -#include "follow_ssl.h" #include "sctp_stat.h" #include "firewall_dlg.h" #include "u3.h" @@ -622,6 +623,8 @@ static GtkItemFactoryEntry menu_items[] = ITEM_FACTORY_ENTRY("/Analyze/<separator>", NULL, NULL, 0, "<Separator>", NULL), ITEM_FACTORY_ENTRY("/Analyze/_Follow TCP Stream", NULL, follow_tcp_stream_cb, 0, NULL, NULL), + ITEM_FACTORY_ENTRY("/Analyze/_Follow UDP Stream", NULL, + follow_udp_stream_cb, 0, NULL, NULL), ITEM_FACTORY_ENTRY("/Analyze/_Follow SSL Stream", NULL, follow_ssl_stream_cb, 0, NULL, NULL), ITEM_FACTORY_ENTRY("/_Statistics", NULL, NULL, 0, "<Branch>", NULL), @@ -721,6 +724,8 @@ static GtkItemFactoryEntry packet_list_menu_items[] = ITEM_FACTORY_ENTRY("/Follow TCP Stream", NULL, follow_tcp_stream_cb, 0, NULL, NULL), + ITEM_FACTORY_ENTRY("/Follow UDP Stream", NULL, follow_udp_stream_cb, + 0, NULL, NULL), ITEM_FACTORY_ENTRY("/Follow SSL Stream", NULL, follow_ssl_stream_cb, 0, NULL, NULL), @@ -792,6 +797,8 @@ static GtkItemFactoryEntry tree_view_menu_items[] = ITEM_FACTORY_ENTRY("/Follow TCP Stream", NULL, follow_tcp_stream_cb, 0, NULL, NULL), + ITEM_FACTORY_ENTRY("/Follow UDP Stream", NULL, follow_udp_stream_cb, + 0, NULL, NULL), ITEM_FACTORY_ENTRY("/Follow SSL Stream", NULL, follow_ssl_stream_cb, 0, NULL, NULL), @@ -2465,6 +2472,12 @@ set_menus_for_selected_packet(capture_file *cf) cf->current_frame != NULL ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE); set_menu_sensitivity(tree_view_menu_factory, "/Follow TCP Stream", cf->current_frame != NULL ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE); + set_menu_sensitivity(main_menu_factory, "/Analyze/Follow UDP Stream", + cf->current_frame != NULL ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); + set_menu_sensitivity(packet_list_menu_factory, "/Follow UDP Stream", + cf->current_frame != NULL ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); + set_menu_sensitivity(tree_view_menu_factory, "/Follow UDP Stream", + cf->current_frame != NULL ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); set_menu_sensitivity(main_menu_factory, "/Analyze/Follow SSL Stream", cf->current_frame != NULL ? is_ssl : FALSE); set_menu_sensitivity(packet_list_menu_factory, "/Follow SSL Stream", |