Ethereal-dev: Re: [Ethereal-dev] adding multiple values to tree
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Gilbert Ramirez <gram@xxxxxxxxxxxxxxx>
Date: Tue, 31 Jan 2006 09:16:27 -0600
We don't know which version of the ethereal source code you are using. Can you show us line 1895 of epan/proto.c ? (a few lines before, and a few lines after, too, would be good). --gilbert On 1/31/06, Lars Dörner <mail@xxxxxxxxx> wrote: > Hy > > I got a PDU which is build like that: > > 1. a value how many video rectangles are coming. > 2. for each rectangle a header describing the rect followed by the > rect-data. > > Now I'm dissecting this pdu. It works fine with Debug messages but > trying to add it do the tree like this : > > - Protocol > - number of rect > - header rect 1 > - header rect 2 > ... > > Always brings this: Warn Dissector bug, protocol XYZ, in packet 802: > proto.c:1895: failed assertion "DISSECTOR_ASSERT_NOT_REACHED" > > Following the code: > > > static int dissect_framebufferupdate(tvbuff_t * tvb, packet_info * pinfo, > proto_tree * tree) > { > static uint16_t count = 0, i = 0; > static unsigned int offset2 = 4; > uint16_t n_rects = 0; > uint32_t length = 0; > uint32_t offset = 0; > uint32_t avaible = tvb_reported_length_remaining(tvb, offset); > teststruct memstruct; > > if (avaible >= 4) > { > n_rects = tvb_get_ntohs(tvb,2); > if (i == 0) > { > count = n_rects; > i++; > } > }else > { > pinfo->desegment_offset = offset; > pinfo->desegment_len = 1; > return (-1); > } > > while(count>0) > { > > if (avaible >(12+offset2)) > { > memstruct.x = tvb_get_ntohs(tvb,(offset2)); > memstruct.y = tvb_get_ntohs(tvb,(2+offset2)); > memstruct.w = tvb_get_ntohs(tvb,(4+offset2)); > memstruct.h = tvb_get_ntohs(tvb,(6+offset2)); > memstruct.encoding = tvb_get_ntohl(tvb,(8+offset2)); > > }else > { > pinfo->desegment_offset = offset; > pinfo->desegment_len =1; > return (-1); > } > > length = decoder(memstruct.x, memstruct.y, memstruct.w, > memstruct.h, memstruct.encoding); > > > if (avaible <= (12 + length + offset2)) > { > pinfo->desegment_offset = offset; > pinfo->desegment_len = 1; > > return(-1); > }else > { > proto_tree *ti,*xyz_tree; > /* Set the protocol column */ > > if(check_col(pinfo->cinfo,COL_INFO)) > { > col_add_str(pinfo->cinfo, COL_INFO, > "FrameBuffer Update"); > } > > if (tree) > { > ti = proto_tree_add_item(tree,proto_xyz, > tvb, 0, -1, FALSE); > xyz_tree = proto_item_add_subtree(ti, > ett_xyz); > proto_tree_add_uint(xyz_tree, > hf_xyz_fb_update_n_rects, tvb, 2, 2, n_rects); > proto_tree_add_int(xyz_tree, > hf_xyz_fb_update_x , tvb, 4, 2, memstruct.x); > printf("x: %d\n",memstruct.x); > proto_tree_add_int(xyz_tree, > hf_xyz_fb_update_y, tvb, 6, 2, memstruct.y); > printf("y: %d\n",memstruct.y); > proto_tree_add_int(xyz_tree, > hf_xyz_fb_update_w, tvb, 8, 2, memstruct.w); > proto_tree_add_int(xyz_tree, > hf_xyz_fb_update_h, tvb, 10, 2, memstruct.h); > proto_tree_add_int(xyz_tree, > hf_xyz_fb_update_encoding, tvb, 12, 4, memstruct.encoding); > } > count --; > printf(" counter: %d\n", count); > offset2 = (offset2 + 13 + length); > } > } > > if (count == 0 ) > { > i = 0; > offset2 = 0x04; > } > > > } > > _______________________________________________ > Ethereal-dev mailing list > Ethereal-dev@xxxxxxxxxxxx > http://www.ethereal.com/mailman/listinfo/ethereal-dev > >
- Follow-Ups:
- AW: [Ethereal-dev] adding multiple values to tree
- From: Lars Dörner
- AW: [Ethereal-dev] adding multiple values to tree
- References:
- [Ethereal-dev] adding multiple values to tree
- From: Lars Dörner
- [Ethereal-dev] adding multiple values to tree
- Prev by Date: [Ethereal-dev] Fix for SRT reset
- Next by Date: AW: [Ethereal-dev] adding multiple values to tree
- Previous by thread: [Ethereal-dev] adding multiple values to tree
- Next by thread: AW: [Ethereal-dev] adding multiple values to tree
- Index(es):