Wireshark

  • Riverbed Technology
  • WinPcap
the world's foremost network protocol analyzer
  • Wireshark
    • About
    • Download
    • Blog
  • Get Help
    • Ask a Question
    • FAQs
    • Documentation
    • Mailing Lists
    • Online Tools
    • Wiki
    • Bug Tracker
  • Develop
    • Get Involved
    • Developer's Guide
    • Browse the Code
    • Latest Builds

Wireshark-dev: [Wireshark-dev] ptvcursor : one step further?

Date Index Thread Index Other Months All Mailing Lists
Date Prev Date Next Thread Prev Thread Next


From: Sebastien Tandel <sebastien@xxxxxxxxx>
Date: Tue, 05 Dec 2006 22:05:10 +0100

I am seeing ptvcursor as an encapsulation allowing to forget about
proto_* structures/functions and helps to simplify the code generated
(in general). But for now, it is not possible to write all without
knowing any proto_* functions. I will present here a way to get rid of
some code and forget a little bit more of proto_*.

Tell me whether this idea is of any interest for you. If it is, I may do
the required changes and send the patch.


*** A technique used in NCP2222.inc when creating a subtree and using
ptvcursor :

  gint current_offset;
  current_offset = ptvcursor_current_offset(cursor);

  subtree = proto_item_add_subtree(it, ett_sub);
  ptvcursor_new(subtree, ptvcursor_tvb(cursor),  current_offset); /*
involves a malloc */
...
  ptvcursor(cursor); /* involves a free */


which could be summarised as :

  subtree = proto_item_add_subtree(it, ett_sub);
  ptvcursor_new(subtree, ptvcursor_tvb(cursor),
ptvcursor_current_offset(cursor)); /* involves a malloc */
...
  ptvcursor_free(cursor); /*"involves a free */


The idea behind ptvcursor : encapsulation of the tree, the tvb
structures and helps to get rid of the proto_FUNCs but here is a case in
which there is no more encapsulation. And we have to know proto_* API
again ...

*** Proposal :

** First step
the code hereabove is equivalent to (and even quicker because no
malloc/free involved!) the following :

  proto_tree * initial_tree = proto_tree(cursor);
  subtree = proto_item_add_subtree(it, ett_sub);
  ptvcursor_set_tree(cursor, subtree); => no malloc
...
  ptvcursor_set_tree(initial_tree); => no free


** Second Step
As we can notice, we already have proto_FUNCs and proto_tree appearing
... the encapsulation is not complete.

What is done hereabove when playing with subtrees is like acting as
push/pop actions => then add this feature in the ptvcursor API. It can
be done in the following way :
- add a field in the ptvcursor structure which retains the push/pop of
subtrees (fixed-length table, only one level of push/pop, malloc/free?)
- add two functions : ptvcursor_push_subtree(cursor, it, ett_sub),
ptvcursor_pop_subtree(cursor)


*** Finally the code will then be only two functions and no more proto_*
involved :

ptvcursor_push_subtree(cursor, it, ett_sub);
...
ptvcursor_pop_subtree(cursor);



Sebastien

  • Follow-Ups:
    • Re: [Wireshark-dev] ptvcursor : one step further?
      • From: Guy Harris
  • Prev by Date: Re: [Wireshark-dev] [PATCH] range_string and OSPF bcmodelid
  • Next by Date: Re: [Wireshark-dev] Patch adding option to display time as seconds(and fractions) since epoch
  • Previous by thread: Re: [Wireshark-dev] wishlist: next marked packet
  • Next by thread: Re: [Wireshark-dev] ptvcursor : one step further?
  • Index(es):
    • Date
    • Thread

Wireshark and the "fin" logo are registered trademarks of the Wireshark Foundation