Wireshark-dev: [Wireshark-dev] [PATCH] ptvcursor and subtrees
From: Sebastien Tandel <sebastien@xxxxxxxxx>
Date: Wed, 06 Dec 2006 12:52:07 +0100
Hi, here is the patch which adds the support to ptvcursor to create one level of subtree. - instead of writing : 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); ... ptvcursor_free(cursor); * or * proto_tree * initial_tree = proto_tree(cursor); subtree = proto_item_add_subtree(it, ett_sub); ptvcursor_set_tree(cursor, subtree); ... ptvcursor_set_tree(initial_tree); - you may write now : ptvcursor_push_subtree(cursor, it, ett_sub); ... ptvcursor_pop_subtree(cursor); As it is only a one level of push/pop, I also add a function ptvcursor_set_subtree(cursor, it, ett_sub) which only sets the subtree without saving the old one. it is useful only in this kind to reach a fake second level of subtree ... should no more exists with multi-level support. With this simple feature, I don't have the need for a piece of the old code shown above in the plugin for Homeplug. it is possible to extend it to support multiple level of subtrees but remains the question of fixed-length table or a dynamic one? Sebastien
Index: epan/proto.c =================================================================== --- epan/proto.c (r�vision 20052) +++ epan/proto.c (copie de travail) @@ -45,6 +45,8 @@ #include "emem.h" struct ptvcursor { + /* Support for only one push/pop */ + proto_tree *pushed_tree; proto_tree *tree; tvbuff_t *tvb; gint offset; @@ -612,6 +614,7 @@ ptvc->tree = tree; ptvc->tvb = tvb; ptvc->offset = offset; + ptvc->pushed_tree= NULL; return ptvc; } @@ -648,6 +651,37 @@ ptvc->tree = tree; } +/* creates a subtree, sets it as the working tree and save the old working tree */ +proto_tree* +ptvcursor_push_subtree(ptvcursor_t *ptvc, proto_item *it, gint ett_subtree) +{ + ptvc->pushed_tree = ptvc->tree; + return ptvcursor_set_subtree(ptvc, it, ett_subtree); +} + +/* pops a subtree */ +void +ptvcursor_pop_subtree(ptvcursor_t *ptvc) +{ + if (ptvc->pushed_tree == NULL) + return; + + ptvc->tree = ptvc->pushed_tree; + ptvc->pushed_tree = NULL; +} + +/* Creates a subtree and adds it to the cursor as the working tree but does not + * save the old working tree */ +proto_tree* +ptvcursor_set_subtree(ptvcursor_t *ptvc, proto_item *it, gint ett_subtree) +{ + ptvc->tree = proto_item_add_subtree(it, ett_subtree); + return ptvc->tree; +} + /* Add a text-only node, leaving it to our caller to fill the text in */ static proto_item * proto_tree_add_text_node(proto_tree *tree, tvbuff_t *tvb, gint start, gint length) Index: epan/ptvcursor.h =================================================================== --- epan/ptvcursor.h (r�vision 20052) +++ epan/ptvcursor.h (copie de travail) @@ -77,4 +77,16 @@ void ptvcursor_set_tree(ptvcursor_t* ptvc, proto_tree *tree); +/* push a subtree in the tree stack of the cursor */ +proto_tree* +ptvcursor_push_subtree(ptvcursor_t *ptvc, proto_item *it, gint ett_subtree); + +/* pop a subtree in the tree stack of the cursor */ +void ptvcursor_pop_subtree(ptvcursor_t *ptvc); + +/* Creates a subtree and adds it to the cursor as the working tree but does not + * save the old working tree */ +proto_tree* +ptvcursor_set_subtree(ptvcursor_t *ptvc, proto_item *it, gint ett_subtree); + #endif /* __PTVCURSOR_H__ */
- Prev by Date: Re: [Wireshark-dev] Patch adding option to display time asseconds(and fractions) since epoch
- Next by Date: Re: [Wireshark-dev] [PATCH] range_string and OSPF bcmodelid
- Previous by thread: Re: [Wireshark-dev] Patch adding option to display time asseconds(and fractions) since epoch
- Next by thread: [Wireshark-dev] [PATCH] ptvcursor and subtrees
- Index(es):