On Thu, 27 Sep 2007 13:13:17 -0700, Zongjun wrote
> On 9/27/07, Zongjun <[EMAIL PROTECTED]> wrote:Hey Didier,
> 
> You mean like 
> 
>         gint  offset_thisRound = 0; // of course, outside if(tree)block.
> 
>   if (tree) {
>         myproto_item = proto_tree_add_item(tree, proto_myproto, tvb, offset, 
> -1, FALSE);
>          myproto_tree = proto_item_add_subtree(myproto_item, ett_myproto);
>        offset_thisRound = dissect_MyProtoMessage_PDU(tvb,pinfo,myproto_tree);
>        }
>    offset += offset_thisRound;
> 
> I tried but still the same result.No you have to:
1) compute offset_thisRound outside 'if (tree)' otherwise you'll get and 
endless loop if tree is null, if you unset coloring and reload the file for 
example.

2) call dissect_MyProtoMessage_PDU with the new offset. 
while(...) {
offset_thisRound = dissect_MyProtoMessage_PDU(tvb,pinfo,offset, tree);
offset += offset_thisRound;
}

3) IMO myproto_item = proto_tree_add_item(tree, proto_myproto, tvb, offset, -1, 
FALSE); should be outside the loop, inside it breaks the protocol hierarchy 
statistic. 
Thanks,Zongjun
> 
> 
> On 9/27/07, Didier <[EMAIL PROTECTED]> wrote:
> 
> Hi
> On Thu, 27 Sep 2007 12:02:32 -0700, Zongjun wrote
> > Hey guys,
> > 
> > According to my capture, I don't have situations where ONE PDU spans over 
> > multiple TCP segment. In stead, mine is the other round: Single segment 
> > having multiple PDUs. 
> > 
> > But using the folling code, what I observed is wireshark did put multiple 
> > PDU info inside the Detail Window after TCP, however these PDUs are always 
> > the same. But in the bottom hexdump window, they are definitely from 
> > different PDU. 
> > 
> > I noticed there has been a similar issue before Wireshark-dev: Re: 
> > [Wireshark-dev] Dissect multiple PDUs in one TCP Segment.
> > But again, it is not for single segment having multiple PDU.
> > 
> > Anyone see the same issue? 
> > 
> > Thanks,
> > Zongjun
> > 
> > static void
> > dissect_myproto(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
> > {
> > gint offset = 0; // always points to the front
> > gint available = 0; // how many bytes still available to consume
> > 
> > while((available = tvb_reported_length_remaining(tvb, offset)) > 0)
> >     {
> >       printf("available = %d\n", available);
> >                                                                                                                                                             
> >  
> >       /* make entry in the Protocol column on summary display */
> >       if (check_col(pinfo->cinfo, COL_PROTOCOL))
> >         col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME);
> >                                                                                                                                                             
> >       /* create the myproto protocol tree */
> >       if (tree) {
> 
> >         myproto_item = proto_tree_add_item(tree, proto_myproto, tvb, 
> > offset, -1, FALSE);
> >                                                                                                                                                             
> >  
> >         myproto_tree = proto_item_add_subtree(myproto_item, ett_myproto);
> > 
> >         offset += dissect_MyProtoMessage_PDU(tvb,pinfo,myproto_tree);
> offset computation should always be outside  if (tree) block .
> >                                                                                                                                                             
> >  
> >       }
> >       printf("offset = %d\n", offset);
> >                                                                                                                                                             
> >  
> >       if(tvb_reported_length_remaining(tvb, offset) > 0)
> >         {
> >           printf("haha, we get a multiple PDU. \n");
> >         }
> >    } //while:
> > }
> 
> 
> _______________________________________________
> Wireshark-dev mailing list
> Wireshark-dev@wireshark.org
> http://www.wireshark.org/mailman/listinfo/wireshark-dev
> 
> 
> 
> -- 
> Thanks,
> Zongjun
> 
> -- 
> Thanks,
> Zongjun

 
_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@wireshark.org
http://www.wireshark.org/mailman/listinfo/wireshark-dev

Reply via email to