aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorJeff Foster <jfoste@woodward.com>2001-03-23 14:44:04 +0000
committerJeff Foster <jfoste@woodward.com>2001-03-23 14:44:04 +0000
commit395b68ea19c7309f32d663776e1b3da37bff0a5b (patch)
tree3f409c6b10b05a765a7b836578421e65d7a7e231 /epan
parentc5791fac0cd877c895db31fc1ac4bb92a0c2c225 (diff)
Changes required to support multiple named data sources.
Tvbuffers changed to added the data source name, GUI and printing code changed to support these changes and display the multiple hex views. svn path=/trunk/; revision=3165
Diffstat (limited to 'epan')
-rw-r--r--epan/epan.c7
-rw-r--r--epan/packet.c7
-rw-r--r--epan/packet.h4
-rw-r--r--epan/proto.c19
-rw-r--r--epan/proto.h5
-rw-r--r--epan/tvbuff.c15
-rw-r--r--epan/tvbuff.h6
7 files changed, 50 insertions, 13 deletions
diff --git a/epan/epan.c b/epan/epan.c
index 7ebf350f12..d18f40eccf 100644
--- a/epan/epan.c
+++ b/epan/epan.c
@@ -1,6 +1,6 @@
/* epan.h
*
- * $Id: epan.c,v 1.6 2001/02/01 20:21:16 gram Exp $
+ * $Id: epan.c,v 1.7 2001/03/23 14:44:01 jfoster Exp $
*
* Ethereal Protocol Analyzer Library
*
@@ -77,6 +77,11 @@ epan_dissect_new(void* pseudo_header, const guint8* data, frame_data *fd, proto_
edt = g_new(epan_dissect_t, 1);
+ /* start with empty data source list */
+ if ( fd->data_src)
+ g_slist_free( fd->data_src);
+ fd->data_src = 0;
+
/* XXX - init tree */
edt->tree = tree;
diff --git a/epan/packet.c b/epan/packet.c
index 3fa6e4a56b..405e1398ad 100644
--- a/epan/packet.c
+++ b/epan/packet.c
@@ -1,7 +1,7 @@
/* packet.c
* Routines for packet disassembly
*
- * $Id: packet.c,v 1.22 2001/03/22 16:24:16 gram Exp $
+ * $Id: packet.c,v 1.23 2001/03/23 14:44:01 jfoster Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -1073,7 +1073,10 @@ dissect_packet(tvbuff_t **p_tvb, union wtap_pseudo_header *pseudo_header,
col_set_writable(fd, TRUE);
TRY {
- *p_tvb = tvb_new_real_data(pd, fd->cap_len, fd->pkt_len);
+ *p_tvb = tvb_new_real_data(pd, fd->cap_len, fd->pkt_len, "Frame");
+ /* Add this tvbuffer into the data_src list */
+ fd->data_src = g_slist_append( fd->data_src, *p_tvb);
+
pi.compat_top_tvb = *p_tvb;
}
CATCH(BoundsError) {
diff --git a/epan/packet.h b/epan/packet.h
index fd857c8be8..7a8882c4d0 100644
--- a/epan/packet.h
+++ b/epan/packet.h
@@ -1,7 +1,7 @@
/* packet.h
* Definitions for packet disassembly structures and routines
*
- * $Id: packet.h,v 1.23 2001/03/15 06:41:13 guy Exp $
+ * $Id: packet.h,v 1.24 2001/03/23 14:44:01 jfoster Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -100,6 +100,7 @@ typedef struct _frame_data {
struct _frame_data *next; /* Next element in list */
struct _frame_data *prev; /* Previous element in list */
GSList *pfd; /* Per frame proto data */
+ GSList *data_src; /* Frame data sources */
guint32 num; /* Frame number */
guint32 pkt_len; /* Packet length */
guint32 cap_len; /* Amount actually captured */
@@ -131,6 +132,7 @@ typedef enum {
AT_ATALK, /* Appletalk DDP */
AT_VINES, /* Banyan Vines */
AT_OSI, /* OSI NSAP */
+ AT_DLCI /* Frame Relay DLCI */
} address_type;
typedef struct _address {
diff --git a/epan/proto.c b/epan/proto.c
index 0f54f2c528..fc9a6b50a4 100644
--- a/epan/proto.c
+++ b/epan/proto.c
@@ -1,7 +1,7 @@
/* proto.c
* Routines for protocol tree
*
- * $Id: proto.c,v 1.14 2001/03/15 22:08:41 guy Exp $
+ * $Id: proto.c,v 1.15 2001/03/23 14:44:02 jfoster Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -1460,6 +1460,9 @@ proto_tree_add_pi(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint
return pi;
}
+/* The default name for a NullTVB. This removed when all dissectors use tvbuffs */
+static gchar* null_tvb_ds_name = "Frame";
+
static field_info *
alloc_field_info(int hfindex, tvbuff_t *tvb, gint start, gint length)
{
@@ -1481,6 +1484,14 @@ alloc_field_info(int hfindex, tvbuff_t *tvb, gint start, gint length)
fi->value = fvalue_new(fi->hfinfo->type);
+ /* add the data source name */
+ /* This has the hack to return a default name for NullTVB. This */
+ /* hack can be removed when all dissectors use tvbuffs */
+ if ( tvb)
+ fi->ds_name = tvb_get_name(tvb);
+ else
+ fi->ds_name = null_tvb_ds_name;
+
return fi;
}
@@ -2595,6 +2606,7 @@ proto_get_finfo_ptr_array(proto_tree *tree, int id)
typedef struct {
guint offset;
field_info *finfo;
+ gchar *name;
} offset_search_t;
static gboolean
@@ -2604,7 +2616,7 @@ check_for_offset(GNode *node, gpointer data)
offset_search_t *offsearch = data;
/* !fi == the top most container node which holds nothing */
- if (fi && fi->visible) {
+ if (fi && fi->visible && !strcmp( offsearch->name,fi->ds_name)) {
if (offsearch->offset >= fi->start &&
offsearch->offset < (fi->start + fi->length)) {
@@ -2624,12 +2636,13 @@ check_for_offset(GNode *node, gpointer data)
* siblings of each node myself. When I have more time I'll do that.
* (yeah right) */
field_info*
-proto_find_field_from_offset(proto_tree *tree, guint offset)
+proto_find_field_from_offset(proto_tree *tree, guint offset, char* ds_name)
{
offset_search_t offsearch;
offsearch.offset = offset;
offsearch.finfo = NULL;
+ offsearch.name = ds_name;
g_node_traverse((GNode*)tree, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
check_for_offset, &offsearch);
diff --git a/epan/proto.h b/epan/proto.h
index 6aa31830f9..d5d16b45c9 100644
--- a/epan/proto.h
+++ b/epan/proto.h
@@ -1,7 +1,7 @@
/* proto.h
* Definitions for protocol display
*
- * $Id: proto.h,v 1.8 2001/03/02 23:10:11 gram Exp $
+ * $Id: proto.h,v 1.9 2001/03/23 14:44:02 jfoster Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -121,6 +121,7 @@ typedef struct field_info {
char *representation; /* for GUI tree */
int visible;
fvalue_t *value;
+ gchar *ds_name; /* data source name */
} field_info;
@@ -558,6 +559,6 @@ char*
proto_alloc_dfilter_string(field_info *finfo, guint8 *pd);
field_info*
-proto_find_field_from_offset(proto_tree *tree, guint offset);
+proto_find_field_from_offset(proto_tree *tree, guint offset, gchar *ds_name);
#endif /* proto.h */
diff --git a/epan/tvbuff.c b/epan/tvbuff.c
index d2152bc679..1d6f3f2407 100644
--- a/epan/tvbuff.c
+++ b/epan/tvbuff.c
@@ -9,7 +9,7 @@
* the data of a backing tvbuff, or can be a composite of
* other tvbuffs.
*
- * $Id: tvbuff.c,v 1.15 2001/03/13 21:34:27 gram Exp $
+ * $Id: tvbuff.c,v 1.16 2001/03/23 14:44:02 jfoster Exp $
*
* Copyright (c) 2000 by Gilbert Ramirez <gram@xiexie.org>
*
@@ -69,6 +69,7 @@ struct tvbuff {
tvbuff_type type;
gboolean initialized;
guint usage_count;
+ gchar* ds_name; /* data source name */
/* The tvbuffs in which this tvbuff is a member
* (that is, a backing tvbuff for a TVBUFF_SUBSET
@@ -319,7 +320,7 @@ tvb_set_real_data(tvbuff_t* tvb, const guint8* data, guint length, gint reported
}
tvbuff_t*
-tvb_new_real_data(const guint8* data, guint length, gint reported_length)
+tvb_new_real_data(const guint8* data, guint length, gint reported_length, const gchar* ds_name)
{
tvbuff_t *tvb;
@@ -329,6 +330,9 @@ tvb_new_real_data(const guint8* data, guint length, gint reported_length)
tvb_set_real_data(tvb, data, length, reported_length);
+ /* set the data source name */
+ tvb->ds_name = g_strdup( ds_name);
+
CLEANUP_POP;
return tvb;
@@ -497,6 +501,7 @@ tvb_new_subset(tvbuff_t *backing, gint backing_offset, gint backing_length, gint
tvb_set_subset(tvb, backing, backing_offset, backing_length, reported_length);
+ tvb->ds_name = backing->ds_name;
CLEANUP_POP;
return tvb;
@@ -1568,3 +1573,9 @@ tvb_bytes_to_str(tvbuff_t *tvb, gint offset, gint len)
{
return bytes_to_str(tvb_get_ptr(tvb, offset, len), len);
}
+
+gchar*
+tvb_get_name(tvbuff_t* tvb)
+{
+ return tvb->ds_name;
+}
diff --git a/epan/tvbuff.h b/epan/tvbuff.h
index 21f224fbb4..0c043dda64 100644
--- a/epan/tvbuff.h
+++ b/epan/tvbuff.h
@@ -9,7 +9,7 @@
* the data of a backing tvbuff, or can be a composite of
* other tvbuffs.
*
- * $Id: tvbuff.h,v 1.11 2001/03/13 21:34:27 gram Exp $
+ * $Id: tvbuff.h,v 1.12 2001/03/23 14:44:02 jfoster Exp $
*
* Copyright (c) 2000 by Gilbert Ramirez <gram@xiexie.org>
*
@@ -139,7 +139,7 @@ void tvb_set_child_real_data_tvbuff(tvbuff_t* parent, tvbuff_t* child);
void tvb_set_real_data(tvbuff_t*, const guint8* data, guint length, gint reported_length);
/* Combination of tvb_new() and tvb_set_real_data(). Can throw ReportedBoundsError. */
-tvbuff_t* tvb_new_real_data(const guint8* data, guint length, gint reported_length);
+tvbuff_t* tvb_new_real_data(const guint8* data, guint length, gint reported_length, const gchar *name);
/* Define the subset of the backing buffer to use.
@@ -363,6 +363,8 @@ gint tvb_strncaseeql(tvbuff_t *tvb, gint offset, const guint8 *str, gint size);
*/
gchar *tvb_bytes_to_str(tvbuff_t *tvb, gint offset, gint len);
+gchar *tvb_get_name(tvbuff_t *tvb);
+
/************** END OF ACCESSORS ****************/
/* Sets pd and offset so that tvbuff's can be used with code