diff options
author | Evan Huus <eapache@gmail.com> | 2013-02-15 15:24:39 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2013-02-15 15:24:39 +0000 |
commit | f95978cf08f9d29407becbc3ac8d1491254f76ac (patch) | |
tree | b08745b9d9b401a1d832ab505055538e7e19ccdd /plugins/opcua/opcua_transport_layer.c | |
parent | fb530b1a72e8ef64c38b73e39d51c96d0e6ff98c (diff) | |
download | wireshark-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.c | 20 |
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; } |