aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2000-09-09 10:26:58 +0000
committerGuy Harris <guy@alum.mit.edu>2000-09-09 10:26:58 +0000
commitf0efbd1a0216cc5eca9beddd3b1bd64d6420e818 (patch)
tree274d5eb905c47271a6d8d41817cea20086aec986 /gtk
parent6e04ac48f9d597f7f9a6a98410cd3c1ab13ece6f (diff)
"redraw_hex_dump()" can't use "cfile.pd" or "cfile.current_frame", as it
may be redrawing a packet window that displays a frame other than the current frame; give it arguments to specify the raw frame data and "frame_data" structure for the frame. This requires that each packet window have, associated with it, a pointer to the "frame_data" structure; that replaces the "cap_len" and "encoding" fields in a "PacketWinData" structure, as those are just copies of fields from the frame's "frame_data" structure. "packet_hex_print()" needn't be passed both the start and length values from a "field_info" structure - just pass it a pointer to that structure, or NULL for "no field is selected in the packet". It also needn't, any longer, be passed the "cap_len" and "flags.encoding" fields of a "frame_data" structure - just pass it a pointer to that structure. In "redraw_hex_dump_all()", don't redraw the hex dump pane of the main window if there is no current frame. svn path=/trunk/; revision=2404
Diffstat (limited to 'gtk')
-rw-r--r--gtk/main.c10
-rw-r--r--gtk/packet_win.c25
-rw-r--r--gtk/proto_draw.c48
-rw-r--r--gtk/proto_draw.h7
4 files changed, 45 insertions, 45 deletions
diff --git a/gtk/main.c b/gtk/main.c
index cbda9e18c4..7903eba651 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -1,6 +1,6 @@
/* main.c
*
- * $Id: main.c,v 1.155 2000/09/08 10:59:15 guy Exp $
+ * $Id: main.c,v 1.156 2000/09/09 10:26:53 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -571,8 +571,8 @@ tree_view_select_row_cb(GtkCTree *ctree, GList *node, gint column, gpointer user
g_free(help_str);
}
- packet_hex_print(GTK_TEXT(byte_view), cfile.pd, cfile.current_frame->cap_len,
- finfo->start, finfo->length, cfile.current_frame->flags.encoding);
+ packet_hex_print(GTK_TEXT(byte_view), cfile.pd, cfile.current_frame,
+ finfo);
}
static void
@@ -581,8 +581,8 @@ tree_view_unselect_row_cb(GtkCTree *ctree, GList *node, gint column, gpointer us
gtk_statusbar_pop(GTK_STATUSBAR(info_bar), help_ctx);
finfo_selected = NULL;
set_menus_for_selected_tree_row(FALSE);
- packet_hex_print(GTK_TEXT(byte_view), cfile.pd, cfile.current_frame->cap_len,
- -1, -1, cfile.current_frame->flags.encoding);
+ packet_hex_print(GTK_TEXT(byte_view), cfile.pd, cfile.current_frame,
+ NULL);
}
void collapse_all_cb(GtkWidget *widget, gpointer data) {
diff --git a/gtk/packet_win.c b/gtk/packet_win.c
index 48084fe3cd..a5688dfa25 100644
--- a/gtk/packet_win.c
+++ b/gtk/packet_win.c
@@ -3,7 +3,7 @@
*
* Copyright 2000, Jeffrey C. Foster <jfoste@woodward.com>
*
- * $Id: packet_win.c,v 1.14 2000/09/08 10:59:18 guy Exp $
+ * $Id: packet_win.c,v 1.15 2000/09/09 10:26:56 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -70,8 +70,7 @@
/* Data structure holding information about a packet-detail window. */
struct PacketWinData {
- gint cap_len;
- gint encoding;
+ frame_data *frame; /* The frame being displayed */
union wtap_pseudo_header pseudo_header; /* Pseudo-header for packet */
guint8 *pd; /* Data for packet */
proto_tree *protocol_tree; /* Protocol tree for packet */
@@ -166,14 +165,13 @@ create_new_window ( char *Title, gint tv_size, gint bv_size){
/* Allocate data structure to represent this window. */
DataPtr = (struct PacketWinData *) g_malloc(sizeof(struct PacketWinData));
- DataPtr->cap_len = cfile.current_frame->cap_len;
- DataPtr->encoding = cfile.current_frame->flags.encoding;
+ DataPtr->frame = cfile.current_frame;
memcpy(&DataPtr->pseudo_header, &cfile.pseudo_header, sizeof DataPtr->pseudo_header);
- DataPtr->pd = g_malloc(DataPtr->cap_len);
- memcpy(DataPtr->pd, cfile.pd, DataPtr->cap_len);
+ DataPtr->pd = g_malloc(DataPtr->frame->cap_len);
+ memcpy(DataPtr->pd, cfile.pd, DataPtr->frame->cap_len);
DataPtr->protocol_tree = proto_tree_create_root();
proto_tree_is_visible = TRUE;
- dissect_packet(&DataPtr->pseudo_header, DataPtr->pd, cfile.current_frame,
+ dissect_packet(&DataPtr->pseudo_header, DataPtr->pd, DataPtr->frame,
DataPtr->protocol_tree);
proto_tree_is_visible = FALSE;
DataPtr->main = main_w;
@@ -195,8 +193,7 @@ create_new_window ( char *Title, gint tv_size, gint bv_size){
/* draw the protocol tree & print hex data */
proto_tree_draw(DataPtr->protocol_tree, tree_view);
- packet_hex_print( GTK_TEXT(byte_view), DataPtr->pd,
- DataPtr->cap_len, -1, -1, DataPtr->encoding);
+ packet_hex_print(GTK_TEXT(byte_view), DataPtr->pd, DataPtr->frame, NULL);
DataPtr->finfo_selected = NULL;
gtk_widget_show(main_w);
@@ -230,8 +227,7 @@ new_tree_view_select_row_cb(GtkCTree *ctree, GList *node, gint column,
DataPtr->finfo_selected = finfo;
packet_hex_print(GTK_TEXT(DataPtr->byte_view), DataPtr->pd,
- DataPtr->cap_len, finfo->start, finfo->length,
- DataPtr->encoding);
+ DataPtr->frame, finfo);
}
@@ -247,7 +243,7 @@ new_tree_view_unselect_row_cb(GtkCTree *ctree, GList *node, gint column,
DataPtr->finfo_selected = NULL;
packet_hex_print(GTK_TEXT(DataPtr->byte_view), DataPtr->pd,
- DataPtr->cap_len, -1, -1, DataPtr->encoding);
+ DataPtr->frame, NULL);
}
/* Functions called from elsewhere to act on all popup packet windows. */
@@ -274,7 +270,8 @@ redraw_hex_dump_cb(gpointer data, gpointer user_data)
{
struct PacketWinData *DataPtr = (struct PacketWinData *)data;
- redraw_hex_dump(DataPtr->byte_view, DataPtr->finfo_selected);
+ redraw_hex_dump(DataPtr->byte_view, DataPtr->pd,
+ DataPtr->frame, DataPtr->finfo_selected);
}
/* Redraw the hex dump part of all the popup packet windows. */
diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c
index c5d22cf06f..7e5011a4b6 100644
--- a/gtk/proto_draw.c
+++ b/gtk/proto_draw.c
@@ -1,7 +1,7 @@
/* proto_draw.c
* Routines for GTK+ packet display
*
- * $Id: proto_draw.c,v 1.20 2000/09/08 10:59:19 guy Exp $
+ * $Id: proto_draw.c,v 1.21 2000/09/09 10:26:56 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -60,22 +60,16 @@ proto_tree_draw_node(GNode *node, gpointer data);
/* Redraw a given byte view window. */
void
-redraw_hex_dump(GtkWidget *bv, field_info *finfo)
+redraw_hex_dump(GtkWidget *bv, guint8 *pd, frame_data *fd, field_info *finfo)
{
- if (finfo != NULL) {
- packet_hex_print(GTK_TEXT(bv), cfile.pd, cfile.current_frame->cap_len,
- finfo->start, finfo->length,
- cfile.current_frame->flags.encoding);
- } else {
- packet_hex_print(GTK_TEXT(bv), cfile.pd, cfile.current_frame->cap_len,
- -1, -1, cfile.current_frame->flags.encoding);
- }
+ packet_hex_print(GTK_TEXT(bv), pd, fd, finfo);
}
void
redraw_hex_dump_all(void)
{
- redraw_hex_dump(byte_view, finfo_selected);
+ if (cfile.current_frame != NULL)
+ redraw_hex_dump(byte_view, cfile.pd, cfile.current_frame, finfo_selected);
redraw_hex_dump_packet_wins();
}
@@ -107,16 +101,24 @@ create_byte_view(gint bv_size, GtkWidget *pane, GtkWidget **byte_view_p,
}
void
-packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
- char_enc encoding) {
+packet_hex_print(GtkText *bv, guint8 *pd, frame_data *fd, field_info *finfo)
+{
gint i = 0, j, k, cur;
guchar line[128], hexchars[] = "0123456789abcdef", c = '\0';
GdkFont *cur_font, *new_font;
+ gint bstart, blen;
gint bend = -1;
-
GdkColor *fg, *bg;
gboolean reverse, newreverse;
+ if (finfo != NULL) {
+ bstart = finfo->start;
+ blen = finfo->length;
+ } else {
+ bstart = -1;
+ blen = -1;
+ }
+
/* Freeze the text for faster display */
gtk_text_freeze(bv);
@@ -133,7 +135,7 @@ packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
bend = bstart + blen;
}
- while (i < len) {
+ while (i < fd->cap_len) {
/* Print the line number */
sprintf(line, "%04x ", i);
@@ -149,7 +151,7 @@ packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
cur = 0;
/* Print the hex bit */
while (i < k) {
- if (i < len) {
+ if (i < fd->cap_len) {
line[cur++] = hexchars[(pd[i] & 0xf0) >> 4];
line[cur++] = hexchars[pd[i] & 0x0f];
} else {
@@ -196,11 +198,11 @@ packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
fg = reverse ? &WHITE : &BLACK;
bg = reverse ? &BLACK : &WHITE;
while (i < k) {
- if (i < len) {
- if (encoding == CHAR_ASCII) {
+ if (i < fd->cap_len) {
+ if (fd->flags.encoding == CHAR_ASCII) {
c = pd[i];
}
- else if (encoding == CHAR_EBCDIC) {
+ else if (fd->flags.encoding == CHAR_EBCDIC) {
c = EBCDIC_to_ASCII1(pd[i]);
}
else {
@@ -250,7 +252,7 @@ packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
cur = 0;
/* Print the hex bit */
while (i < k) {
- if (i < len) {
+ if (i < fd->cap_len) {
line[cur++] = hexchars[(pd[i] & 0xf0) >> 4];
line[cur++] = hexchars[pd[i] & 0x0f];
} else {
@@ -276,11 +278,11 @@ packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
/* Print the ASCII bit */
cur_font = (i >= bstart && i < bend) ? m_b_font : m_r_font;
while (i < k) {
- if (i < len) {
- if (encoding == CHAR_ASCII) {
+ if (i < fd->cap_len) {
+ if (fd->flags.encoding == CHAR_ASCII) {
c = pd[i];
}
- else if (encoding == CHAR_EBCDIC) {
+ else if (fd->flags.encoding == CHAR_EBCDIC) {
c = EBCDIC_to_ASCII1(pd[i]);
}
else {
diff --git a/gtk/proto_draw.h b/gtk/proto_draw.h
index 68d5126630..033f88d27f 100644
--- a/gtk/proto_draw.h
+++ b/gtk/proto_draw.h
@@ -1,7 +1,7 @@
/* gtkpacket.h
* Definitions for GTK+ packet display structures and routines
*
- * $Id: proto_draw.h,v 1.9 2000/09/08 10:59:21 guy Exp $
+ * $Id: proto_draw.h,v 1.10 2000/09/09 10:26:58 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -27,11 +27,12 @@
#ifndef __GTKPACKET_H__
#define __GTKPACKET_H__
-void redraw_hex_dump(GtkWidget *bv, field_info *finfo);
+void redraw_hex_dump(GtkWidget *bv, guint8 *pd, frame_data *fd,
+ field_info *finfo);
void redraw_hex_dump_all(void);
void create_byte_view(gint bv_size, GtkWidget *pane, GtkWidget **byte_view_p,
GtkWidget **bv_scrollw_p, int pos);
-void packet_hex_print(GtkText *, guint8 *, gint, gint, gint, char_enc);
+void packet_hex_print(GtkText *, guint8 *, frame_data *, field_info *);
#define E_TREEINFO_FIELD_INFO_KEY "tree_info_finfo"