aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/Makefile.common1
-rw-r--r--gtk/follow_ssl.c16
-rw-r--r--gtk/follow_stream.c29
-rw-r--r--gtk/follow_stream.h11
-rw-r--r--gtk/follow_tcp.c8
-rw-r--r--gtk/main.c2
-rw-r--r--gtk/menu.c15
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",