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):