summaryrefslogtreecommitdiff
path: root/ui/gtk/packet_win.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2013-03-21 15:27:38 +0000
committerEvan Huus <eapache@gmail.com>2013-03-21 15:27:38 +0000
commit4836f13ac0ad7d06834c00d02b1c876c3bc6eee9 (patch)
treeb87e79713c7e9d93c50f54eb6310553250fbfc53 /ui/gtk/packet_win.c
parent1f083fd6545ceaf6a6f7cf8d8dfe105ae775b6cf (diff)
downloadwireshark-4836f13ac0ad7d06834c00d02b1c876c3bc6eee9.tar.gz
From Michail Koreshkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8371
Add item to context menu of frame references to open the referenced frame in a new window. Very useful when the referenced frame is hidden by a filter. From me: - modelines - simplify some of the logic svn path=/trunk/; revision=48451
Diffstat (limited to 'ui/gtk/packet_win.c')
-rw-r--r--ui/gtk/packet_win.c54
1 files changed, 48 insertions, 6 deletions
diff --git a/ui/gtk/packet_win.c b/ui/gtk/packet_win.c
index 9ed999311d..74b95a1567 100644
--- a/ui/gtk/packet_win.c
+++ b/ui/gtk/packet_win.c
@@ -866,24 +866,53 @@ static void modifed_frame_data_free(gpointer data) {
#endif /* WANT_PACKET_EDITOR */
-void new_packet_window(GtkWidget *w _U_, gboolean editable _U_)
+void new_packet_window(GtkWidget *w _U_, gboolean reference, gboolean editable _U_)
{
#define NewWinTitleLen 1000
char Title[NewWinTitleLen] = "";
const char *TextPtr;
GtkWidget *main_w, *main_vbox, *pane,
- *tree_view, *tv_scrollw,
- *bv_nb_ptr;
+ *tree_view, *tv_scrollw,
+ *bv_nb_ptr;
struct PacketWinData *DataPtr;
int i;
+ frame_data *fd;
+
+ if(reference) {
+ guint32 framenum;
+ header_field_info *hfinfo;
- if (!cfile.current_frame) {
+ if (! cfile.finfo_selected) {
+ return;
+ }
+
+ hfinfo = cfile.finfo_selected->hfinfo;
+
+ g_assert(hfinfo);
+
+ if (hfinfo->type != FT_FRAMENUM) {
+ return;
+ }
+
+ framenum = fvalue_get_uinteger(&cfile.finfo_selected->value);
+
+ if (framenum == 0) {
+ return;
+ }
+
+ fd = frame_data_sequence_find(cfile.frames, framenum);
+ }
+ else {
+ fd = cfile.current_frame;
+ }
+
+ if (!fd) {
/* nothing has been captured so far */
return;
}
/* With the new packetlists "lazy columns" it's neccesary to reread the frame */
- if (!cf_read_frame(&cfile, cfile.current_frame)) {
+ if (!cf_read_frame(&cfile, fd)) {
/* error reading the frame */
return;
}
@@ -891,7 +920,7 @@ void new_packet_window(GtkWidget *w _U_, gboolean editable _U_)
/* Allocate data structure to represent this window. */
DataPtr = (struct PacketWinData *) g_malloc(sizeof(struct PacketWinData));
- DataPtr->frame = cfile.current_frame;
+ DataPtr->frame = fd;
DataPtr->phdr = cfile.phdr;
DataPtr->pd = (guint8 *)g_malloc(DataPtr->frame->cap_len);
memcpy(DataPtr->pd, cfile.pd, DataPtr->frame->cap_len);
@@ -1110,3 +1139,16 @@ redraw_packet_bytes_packet_wins(void)
{
g_list_foreach(detail_windows, redraw_packet_bytes_cb, NULL);
}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 8
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=8 tabstop=8 noexpandtab:
+ * :indentSize=8:tabSize=8:noTabs=false:
+ */