summaryrefslogtreecommitdiff
path: root/plugins/opcua/opcua_transport_layer.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2013-02-15 15:24:39 +0000
committerEvan Huus <eapache@gmail.com>2013-02-15 15:24:39 +0000
commitf95978cf08f9d29407becbc3ac8d1491254f76ac (patch)
treeb08745b9d9b401a1d832ab505055538e7e19ccdd /plugins/opcua/opcua_transport_layer.c
parentfb530b1a72e8ef64c38b73e39d51c96d0e6ff98c (diff)
downloadwireshark-f95978cf08f9d29407becbc3ac8d1491254f76ac.tar.gz
From Hannes Mezger via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8327
Updates to the OPCUA plugin so that subtrees of the dissector select the appropriate number of bytes. Also fix dissection of the array dimensions field for matrix values and the highlighting for empty string fields. svn path=/trunk/; revision=47673
Diffstat (limited to 'plugins/opcua/opcua_transport_layer.c')
-rw-r--r--plugins/opcua/opcua_transport_layer.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/plugins/opcua/opcua_transport_layer.c b/plugins/opcua/opcua_transport_layer.c
index 4307698c04..427a1f6c41 100644
--- a/plugins/opcua/opcua_transport_layer.c
+++ b/plugins/opcua/opcua_transport_layer.c
@@ -178,6 +178,7 @@ int parseMessage(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
int parseService(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
proto_item *ti;
+ proto_item *ti_inner;
proto_tree *encobj_tree;
proto_tree *nodeid_tree;
int ServiceId = 0;
@@ -187,21 +188,25 @@ int parseService(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
* THIS WILL CHAHNGE IN THE FUTURE. */
/* add encodeable object subtree */
- ti = proto_tree_add_text(tree, tvb, 0, -1, "OpcUa Service : Encodeable Object");
+ ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "OpcUa Service : Encodeable Object");
encobj_tree = proto_item_add_subtree(ti, ett_opcua_extensionobject);
/* add nodeid subtree */
- ti = proto_tree_add_text(encobj_tree, tvb, 0, -1, "TypeId : ExpandedNodeId");
- nodeid_tree = proto_item_add_subtree(ti, ett_opcua_nodeid);
+ ti_inner = proto_tree_add_text(encobj_tree, tvb, *pOffset, -1, "TypeId : ExpandedNodeId");
+ nodeid_tree = proto_item_add_subtree(ti_inner, ett_opcua_nodeid);
ServiceId = parseServiceNodeId(nodeid_tree, tvb, pOffset);
+ proto_item_set_end(ti_inner, tvb, *pOffset);
dispatchService(encobj_tree, tvb, pOffset, ServiceId);
+
+ proto_item_set_end(ti, tvb, *pOffset);
return ServiceId;
}
int parseOpenSecureChannel(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
proto_item *ti;
+ proto_item *ti_inner;
proto_tree *encobj_tree;
proto_tree *nodeid_tree;
int ServiceId = 0;
@@ -217,15 +222,18 @@ int parseOpenSecureChannel(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
/* add encodeable object subtree */
- ti = proto_tree_add_text(tree, tvb, 0, -1, "Message : Encodeable Object");
+ ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "Message : Encodeable Object");
encobj_tree = proto_item_add_subtree(ti, ett_opcua_extensionobject);
/* add nodeid subtree */
- ti = proto_tree_add_text(encobj_tree, tvb, 0, -1, "TypeId : ExpandedNodeId");
- nodeid_tree = proto_item_add_subtree(ti, ett_opcua_nodeid);
+ ti_inner = proto_tree_add_text(encobj_tree, tvb, *pOffset, -1, "TypeId : ExpandedNodeId");
+ nodeid_tree = proto_item_add_subtree(ti_inner, ett_opcua_nodeid);
ServiceId = parseServiceNodeId(nodeid_tree, tvb, pOffset);
+ proto_item_set_end(ti_inner, tvb, *pOffset);
dispatchService(encobj_tree, tvb, pOffset, ServiceId);
+
+ proto_item_set_end(ti, tvb, *pOffset);
return -1;
}