aboutsummaryrefslogtreecommitdiffstats
path: root/packet-clnp.c
diff options
context:
space:
mode:
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-03-27 04:27:05 +0000
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-03-27 04:27:05 +0000
commit64a6460ae0fa56f66998b69a9193f8b37471d31c (patch)
tree8924bfb6fae808780d2d8d36ffd53261749ec67b /packet-clnp.c
parent579667dc946f49059beee86e347065003ffc68e0 (diff)
In the protocol tree entries for lists of fragments/segments, make the
top-level item correspond to the reassembled data, and make the item for each fragment/segment correspond to the part of that reassembled data that came from that fragment/segment. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@5025 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-clnp.c')
-rw-r--r--packet-clnp.c48
1 files changed, 24 insertions, 24 deletions
diff --git a/packet-clnp.c b/packet-clnp.c
index c1ad6ac5d5..025504622a 100644
--- a/packet-clnp.c
+++ b/packet-clnp.c
@@ -1,7 +1,7 @@
/* packet-clnp.c
* Routines for ISO/OSI network and transport protocol packet disassembly
*
- * $Id: packet-clnp.c,v 1.50 2002/02/27 05:45:48 guy Exp $
+ * $Id: packet-clnp.c,v 1.51 2002/03/27 04:27:03 guy Exp $
* Laurent Deniel <deniel@worldnet.fr>
* Ralf Schneider <Ralf.Schneider@t-online.de>
*
@@ -1832,10 +1832,25 @@ static void dissect_clnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree *ft=NULL;
proto_item *fi=NULL;
- /* OK, we have the complete reassembled payload. */
+ /* OK, we have the complete reassembled payload.
+ Allocate a new tvbuff, referring to the reassembled payload. */
+ next_tvb = tvb_new_real_data(fd_head->data, fd_head->datalen,
+ fd_head->datalen);
+
+ /* Add the tvbuff to the list of tvbuffs to which the tvbuff we
+ were handed refers, so it'll get cleaned up when that tvbuff
+ is cleaned up. */
+ tvb_set_child_real_data_tvbuff(tvb, next_tvb);
+
+ /* Add the defragmented data to the data source list. */
+ add_new_data_source(pinfo->fd, next_tvb, "Reassembled CLNP");
+
+ /* It's not fragmented. */
+ pinfo->fragmented = FALSE;
+
/* show all segments */
fi = proto_tree_add_item(clnp_tree, hf_clnp_segments,
- tvb, 0, 0, FALSE);
+ next_tvb, 0, -1, FALSE);
ft = proto_item_add_subtree(fi, ett_clnp_segments);
for (fd = fd_head->next; fd != NULL; fd = fd->next){
if (fd->flags & (FD_OVERLAP|FD_OVERLAPCONFLICT
@@ -1854,7 +1869,7 @@ static void dissect_clnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
hf = hf_clnp_segment;
}
fei = proto_tree_add_none_format(ft, hf,
- tvb, 0, 0,
+ next_tvb, fd->offset, fd->len,
"Frame:%u payload:%u-%u",
fd->frame,
fd->offset,
@@ -1863,28 +1878,28 @@ static void dissect_clnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
fet = proto_item_add_subtree(fei, ett_clnp_segment);
if (fd->flags&FD_OVERLAP) {
proto_tree_add_boolean(fet,
- hf_clnp_segment_overlap, tvb, 0, 0,
+ hf_clnp_segment_overlap, next_tvb, 0, 0,
TRUE);
}
if (fd->flags&FD_OVERLAPCONFLICT) {
proto_tree_add_boolean(fet,
- hf_clnp_segment_overlap_conflict, tvb, 0, 0,
+ hf_clnp_segment_overlap_conflict, next_tvb, 0, 0,
TRUE);
}
if (fd->flags&FD_MULTIPLETAILS) {
proto_tree_add_boolean(fet,
- hf_clnp_segment_multiple_tails, tvb, 0, 0,
+ hf_clnp_segment_multiple_tails, next_tvb, 0, 0,
TRUE);
}
if (fd->flags&FD_TOOLONGFRAGMENT) {
proto_tree_add_boolean(fet,
- hf_clnp_segment_too_long_segment, tvb, 0, 0,
+ hf_clnp_segment_too_long_segment, next_tvb, 0, 0,
TRUE);
}
} else {
/* nothing of interest for this segment */
proto_tree_add_none_format(ft, hf_clnp_segment,
- tvb, 0, 0,
+ next_tvb, fd->offset, fd->len,
"Frame:%u payload:%u-%u",
fd->frame,
fd->offset,
@@ -1899,21 +1914,6 @@ static void dissect_clnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
update_col_info = FALSE;
}
}
-
- /* Allocate a new tvbuff, referring to the reassembled payload. */
- next_tvb = tvb_new_real_data(fd_head->data, fd_head->datalen,
- fd_head->datalen);
-
- /* Add the tvbuff to the list of tvbuffs to which the tvbuff we
- were handed refers, so it'll get cleaned up when that tvbuff
- is cleaned up. */
- tvb_set_child_real_data_tvbuff(tvb, next_tvb);
-
- /* Add the defragmented data to the data source list. */
- add_new_data_source(pinfo->fd, next_tvb, "Reassembled CLNP");
-
- /* It's not fragmented. */
- pinfo->fragmented = FALSE;
} else {
/* We don't have the complete reassembled payload. */
next_tvb = NULL;