from Gerhard Gappmeier (ascolab):
[obnox/wireshark/wip.git] / plugins / opcua / opcua_complextypeparser.c
1 /******************************************************************************
2 ** $Id$
3 **
4 ** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
5 ** Web: http://www.ascolab.com
6 ** 
7 ** This program is free software; you can redistribute it and/or
8 ** modify it under the terms of the GNU General Public License
9 ** as published by the Free Software Foundation; either version 2
10 ** of the License, or (at your option) any later version.
11 ** 
12 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14 ** 
15 ** Project: OpcUa Wireshark Plugin
16 **
17 ** Description: OpcUa Complex Type Parser
18 **
19 ** This file was autogenerated on 8.5.2007 18:53:26.
20 ** DON'T MODIFY THIS FILE!
21 **
22 ******************************************************************************/
23
24 #ifdef HAVE_CONFIG_H
25 # include "config.h"
26 #endif
27
28 #include <gmodule.h>
29 #include <epan/packet.h>
30 #include "opcua_complextypeparser.h"
31 #include "opcua_enumparser.h"
32 #include "opcua_simpletypes.h"
33 #include "opcua_hfindeces.h"
34
35 \r
36 gint ett_opcua_ReferenceNode = -1;\r
37 void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
38 {\r
39   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceNode", szFieldName);\r
40   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceNode);\r
41
42   parseNodeId(subtree, tvb, pOffset, "ReferenceTypeId");
43   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsInverse);
44   parseUInt32(subtree, tvb, pOffset, hf_opcua_ServerIndex);
45   parseExpandedNodeId(subtree, tvb, pOffset, "TargetId");\r
46 }\r
47 \r
48 gint ett_opcua_Node = -1;\r
49 void parseNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
50 {\r
51   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Node", szFieldName);\r
52   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Node);\r
53
54   parseNodeId(subtree, tvb, pOffset, "NodeId");
55   parseInt32(subtree, tvb, pOffset, hf_opcua_NodeClass);
56   parseQualifiedName(subtree, tvb, pOffset, "BrowseName");
57   parseLocalizedText(subtree, tvb, pOffset, "DisplayName");
58   parseLocalizedText(subtree, tvb, pOffset, "Description");
59   parseArrayComplex(subtree, tvb, pOffset, "References", parseReferenceNode);\r
60 }\r
61 \r
62 gint ett_opcua_ObjectNode = -1;\r
63 void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
64 {\r
65   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectNode", szFieldName);\r
66   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectNode);\r
67   /* parse base class members */ 
68   parseNode(subtree, tvb, pOffset, "[Node]");
69   /* parse additional members */
70   parseByte(subtree, tvb, pOffset, hf_opcua_EventNotifier);\r
71 }\r
72 \r
73 gint ett_opcua_ObjectTypeNode = -1;\r
74 void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
75 {\r
76   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectTypeNode", szFieldName);\r
77   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectTypeNode);\r
78   /* parse base class members */ 
79   parseNode(subtree, tvb, pOffset, "[Node]");
80   /* parse additional members */
81   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);\r
82 }\r
83 \r
84 gint ett_opcua_VariableNode = -1;\r
85 void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
86 {\r
87   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableNode", szFieldName);\r
88   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableNode);\r
89   /* parse base class members */ 
90   parseNode(subtree, tvb, pOffset, "[Node]");
91   /* parse additional members */
92   parseVariant(subtree, tvb, pOffset, "Value");
93   parseNodeId(subtree, tvb, pOffset, "DataType");
94   parseInt32(subtree, tvb, pOffset, hf_opcua_ArraySize);
95   parseByte(subtree, tvb, pOffset, hf_opcua_AccessLevel);
96   parseByte(subtree, tvb, pOffset, hf_opcua_UserAccessLevel);
97   parseInt32(subtree, tvb, pOffset, hf_opcua_MinimumSamplingInterval);
98   parseBoolean(subtree, tvb, pOffset, hf_opcua_Historizing);\r
99 }\r
100 \r
101 gint ett_opcua_VariableTypeNode = -1;\r
102 void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
103 {\r
104   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableTypeNode", szFieldName);\r
105   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableTypeNode);\r
106   /* parse base class members */ 
107   parseNode(subtree, tvb, pOffset, "[Node]");
108   /* parse additional members */
109   parseVariant(subtree, tvb, pOffset, "Value");
110   parseNodeId(subtree, tvb, pOffset, "DataType");
111   parseInt32(subtree, tvb, pOffset, hf_opcua_ArraySize);
112   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);\r
113 }\r
114 \r
115 gint ett_opcua_ReferenceTypeNode = -1;\r
116 void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
117 {\r
118   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceTypeNode", szFieldName);\r
119   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceTypeNode);\r
120   /* parse base class members */ 
121   parseNode(subtree, tvb, pOffset, "[Node]");
122   /* parse additional members */
123   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);
124   parseBoolean(subtree, tvb, pOffset, hf_opcua_Symmetric);
125   parseLocalizedText(subtree, tvb, pOffset, "InverseName");\r
126 }\r
127 \r
128 gint ett_opcua_MethodNode = -1;\r
129 void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
130 {\r
131   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MethodNode", szFieldName);\r
132   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MethodNode);\r
133   /* parse base class members */ 
134   parseNode(subtree, tvb, pOffset, "[Node]");
135   /* parse additional members */
136   parseBoolean(subtree, tvb, pOffset, hf_opcua_Executable);
137   parseBoolean(subtree, tvb, pOffset, hf_opcua_UserExecutable);\r
138 }\r
139 \r
140 gint ett_opcua_ViewNode = -1;\r
141 void parseViewNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
142 {\r
143   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ViewNode", szFieldName);\r
144   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ViewNode);\r
145   /* parse base class members */ 
146   parseNode(subtree, tvb, pOffset, "[Node]");
147   /* parse additional members */
148   parseBoolean(subtree, tvb, pOffset, hf_opcua_ContainsNoLoops);
149   parseByte(subtree, tvb, pOffset, hf_opcua_EventNotifier);\r
150 }\r
151 \r
152 gint ett_opcua_DataTypeNode = -1;\r
153 void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
154 {\r
155   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DataTypeNode", szFieldName);\r
156   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DataTypeNode);\r
157   /* parse base class members */ 
158   parseNode(subtree, tvb, pOffset, "[Node]");
159   /* parse additional members */
160   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);\r
161 }\r
162 \r
163 gint ett_opcua_UriTableEntry = -1;\r
164 void parseUriTableEntry(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
165 {\r
166   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UriTableEntry", szFieldName);\r
167   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UriTableEntry);\r
168
169   parseUInt32(subtree, tvb, pOffset, hf_opcua_Index);
170   parseString(subtree, tvb, pOffset, hf_opcua_Uri);\r
171 }\r
172 \r
173 gint ett_opcua_NodeSet = -1;\r
174 void parseNodeSet(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
175 {\r
176   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeSet", szFieldName);\r
177   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeSet);\r
178
179   parseArrayComplex(subtree, tvb, pOffset, "NamespaceUris", parseUriTableEntry);
180   parseArrayComplex(subtree, tvb, pOffset, "ServerUris", parseUriTableEntry);
181   parseArrayComplex(subtree, tvb, pOffset, "Nodes", parseExtensionObject);\r
182 }\r
183 \r
184 gint ett_opcua_Argument = -1;\r
185 void parseArgument(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
186 {\r
187   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Argument", szFieldName);\r
188   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Argument);\r
189
190   parseString(subtree, tvb, pOffset, hf_opcua_Name);
191   parseNodeId(subtree, tvb, pOffset, "DataType");
192   parseInt32(subtree, tvb, pOffset, hf_opcua_ArraySize);
193   parseLocalizedText(subtree, tvb, pOffset, "Description");\r
194 }\r
195 \r
196 gint ett_opcua_Status = -1;\r
197 void parseStatus(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
198 {\r
199   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Status", szFieldName);\r
200   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Status);\r
201
202   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
203   parseDiagnosticInfo(subtree, tvb, pOffset, "DiagnosticInfo");\r
204 }\r
205 \r
206 gint ett_opcua_BaseEvent = -1;\r
207 void parseBaseEvent(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
208 {\r
209   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BaseEvent", szFieldName);\r
210   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BaseEvent);\r
211
212   parseByteString(subtree, tvb, pOffset, hf_opcua_EventId);
213   parseNodeId(subtree, tvb, pOffset, "EventType");
214   parseNodeId(subtree, tvb, pOffset, "SourceNode");
215   parseString(subtree, tvb, pOffset, hf_opcua_SourceName);
216   parseDateTime(subtree, tvb, pOffset, hf_opcua_Time);
217   parseDateTime(subtree, tvb, pOffset, hf_opcua_ReceiveTime);
218   parseLocalizedText(subtree, tvb, pOffset, "Message");
219   parseUInt16(subtree, tvb, pOffset, hf_opcua_Severity);\r
220 }\r
221 \r
222 gint ett_opcua_SecurityPolicy = -1;\r
223 void parseSecurityPolicy(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
224 {\r
225   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SecurityPolicy", szFieldName);\r
226   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SecurityPolicy);\r
227
228   parseString(subtree, tvb, pOffset, hf_opcua_Uri);
229   parseString(subtree, tvb, pOffset, hf_opcua_Digest);
230   parseString(subtree, tvb, pOffset, hf_opcua_SymmetricSignature);
231   parseString(subtree, tvb, pOffset, hf_opcua_SymmetricKeyWrap);
232   parseString(subtree, tvb, pOffset, hf_opcua_SymmetricEncryption);
233   parseInt32(subtree, tvb, pOffset, hf_opcua_SymmetricKeyLength);
234   parseString(subtree, tvb, pOffset, hf_opcua_AsymmetricSignature);
235   parseString(subtree, tvb, pOffset, hf_opcua_AsymmetricKeyWrap);
236   parseString(subtree, tvb, pOffset, hf_opcua_AsymmetricEncryption);
237   parseUInt32(subtree, tvb, pOffset, hf_opcua_MinimumAsymmetricKeyLength);
238   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaximumAsymmetricKeyLength);
239   parseString(subtree, tvb, pOffset, hf_opcua_DerivedKey);
240   parseUInt32(subtree, tvb, pOffset, hf_opcua_DerivedEncryptionKeyLength);
241   parseUInt32(subtree, tvb, pOffset, hf_opcua_DerivedSignatureKeyLength);\r
242 }\r
243 \r
244 gint ett_opcua_UserTokenPolicy = -1;\r
245 void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
246 {\r
247   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UserTokenPolicy", szFieldName);\r
248   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UserTokenPolicy);\r
249
250   parseUserTokenType(subtree, tvb, pOffset);
251   parseString(subtree, tvb, pOffset, hf_opcua_IssuerType);
252   parseString(subtree, tvb, pOffset, hf_opcua_IssuerUrl);\r
253 }\r
254 \r
255 gint ett_opcua_ServerDescription = -1;\r
256 void parseServerDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
257 {\r
258   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServerDescription", szFieldName);\r
259   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServerDescription);\r
260
261   parseServerDescriptionType(subtree, tvb, pOffset);
262   parseString(subtree, tvb, pOffset, hf_opcua_ServerUri);
263   parseLocalizedText(subtree, tvb, pOffset, "ServerName");
264   parseArraySimple(subtree, tvb, pOffset, hf_opcua_DiscoveryUrls, parseString);\r
265 }\r
266 \r
267 gint ett_opcua_EndpointDescription = -1;\r
268 void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
269 {\r
270   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EndpointDescription", szFieldName);\r
271   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EndpointDescription);\r
272
273   parseServerDescription(subtree, tvb, pOffset, "Server");
274   parseString(subtree, tvb, pOffset, hf_opcua_EndpointUrl);
275   parseByteString(subtree, tvb, pOffset, hf_opcua_ServerCertificate);
276   parseMessageSecurityMode(subtree, tvb, pOffset);
277   parseString(subtree, tvb, pOffset, hf_opcua_SecurityPolicyUri);
278   parseArrayComplex(subtree, tvb, pOffset, "UserIdentityTokens", parseUserTokenPolicy);
279   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SupportedProfiles, parseString);\r
280 }\r
281 \r
282 gint ett_opcua_EndpointConfiguration = -1;\r
283 void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
284 {\r
285   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EndpointConfiguration", szFieldName);\r
286   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EndpointConfiguration);\r
287
288   parseInt32(subtree, tvb, pOffset, hf_opcua_SendTimeout);
289   parseInt32(subtree, tvb, pOffset, hf_opcua_OperationTimeout);
290   parseBoolean(subtree, tvb, pOffset, hf_opcua_UseBinaryEncoding);
291   parseInt32(subtree, tvb, pOffset, hf_opcua_MaxMessageSize);
292   parseInt32(subtree, tvb, pOffset, hf_opcua_MaxArrayLength);
293   parseInt32(subtree, tvb, pOffset, hf_opcua_MaxStringLength);\r
294 }\r
295 \r
296 gint ett_opcua_UserIdentityToken = -1;\r
297 void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
298 {\r
299   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UserIdentityToken", szFieldName);\r
300   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UserIdentityToken);\r
301  \r
302 }\r
303 \r
304 gint ett_opcua_UserNameIdentityToken = -1;\r
305 void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
306 {\r
307   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UserNameIdentityToken", szFieldName);\r
308   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UserNameIdentityToken);\r
309   /* parse base class members */ 
310   parseUserIdentityToken(subtree, tvb, pOffset, "[UserIdentityToken]");
311   /* parse additional members */
312   parseString(subtree, tvb, pOffset, hf_opcua_UserName);
313   parseString(subtree, tvb, pOffset, hf_opcua_Password);
314   parseString(subtree, tvb, pOffset, hf_opcua_HashAlgorithm);\r
315 }\r
316 \r
317 gint ett_opcua_X509IdentityToken = -1;\r
318 void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
319 {\r
320   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : X509IdentityToken", szFieldName);\r
321   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_X509IdentityToken);\r
322   /* parse base class members */ 
323   parseUserIdentityToken(subtree, tvb, pOffset, "[UserIdentityToken]");
324   /* parse additional members */
325   parseByteString(subtree, tvb, pOffset, hf_opcua_CertificateData);\r
326 }\r
327 \r
328 gint ett_opcua_WssIdentityToken = -1;\r
329 void parseWssIdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
330 {\r
331   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : WssIdentityToken", szFieldName);\r
332   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WssIdentityToken);\r
333   /* parse base class members */ 
334   parseUserIdentityToken(subtree, tvb, pOffset, "[UserIdentityToken]");
335   /* parse additional members */
336   parseXmlElement(subtree, tvb, pOffset, hf_opcua_TokenData);\r
337 }\r
338 \r
339 gint ett_opcua_SupportedProfile = -1;\r
340 void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
341 {\r
342   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SupportedProfile", szFieldName);\r
343   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SupportedProfile);\r
344
345   parseString(subtree, tvb, pOffset, hf_opcua_ProfileUri);
346   parseString(subtree, tvb, pOffset, hf_opcua_ProfileName);
347   parseComplianceLevel(subtree, tvb, pOffset);\r
348 }\r
349 \r
350 gint ett_opcua_BuildInfo = -1;\r
351 void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
352 {\r
353   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BuildInfo", szFieldName);\r
354   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BuildInfo);\r
355
356   parseString(subtree, tvb, pOffset, hf_opcua_ApplicationUri);
357   parseString(subtree, tvb, pOffset, hf_opcua_ManufacturerName);
358   parseString(subtree, tvb, pOffset, hf_opcua_ApplicationName);
359   parseString(subtree, tvb, pOffset, hf_opcua_SoftwareVersion);
360   parseString(subtree, tvb, pOffset, hf_opcua_BuildNumber);
361   parseDateTime(subtree, tvb, pOffset, hf_opcua_BuildDate);\r
362 }\r
363 \r
364 gint ett_opcua_SoftwareCertificate = -1;\r
365 void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
366 {\r
367   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SoftwareCertificate", szFieldName);\r
368   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SoftwareCertificate);\r
369
370   parseBuildInfo(subtree, tvb, pOffset, "ServerInfo");
371   parseString(subtree, tvb, pOffset, hf_opcua_IssuedBy);
372   parseDateTime(subtree, tvb, pOffset, hf_opcua_IssuedDate);
373   parseDateTime(subtree, tvb, pOffset, hf_opcua_ExpirationDate);
374   parseByteString(subtree, tvb, pOffset, hf_opcua_ApplicationCertificate);
375   parseString(subtree, tvb, pOffset, hf_opcua_IssuerCertificateThumbprint);
376   parseString(subtree, tvb, pOffset, hf_opcua_IssuerSignatureAlgorithm);
377   parseArrayComplex(subtree, tvb, pOffset, "SupportedProfiles", parseSupportedProfile);\r
378 }\r
379 \r
380 gint ett_opcua_SignedSoftwareCertificate = -1;\r
381 void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
382 {\r
383   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SignedSoftwareCertificate", szFieldName);\r
384   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SignedSoftwareCertificate);\r
385
386   parseByteString(subtree, tvb, pOffset, hf_opcua_CertificateData);
387   parseByteString(subtree, tvb, pOffset, hf_opcua_IssuerSignature);\r
388 }\r
389 \r
390 gint ett_opcua_NodeAttributes = -1;\r
391 void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
392 {\r
393   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeAttributes", szFieldName);\r
394   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeAttributes);\r
395
396   parseLocalizedText(subtree, tvb, pOffset, "DisplayName");
397   parseLocalizedText(subtree, tvb, pOffset, "Description");\r
398 }\r
399 \r
400 gint ett_opcua_ObjectAttributes = -1;\r
401 void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
402 {\r
403   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectAttributes", szFieldName);\r
404   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectAttributes);\r
405   /* parse base class members */ 
406   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
407   /* parse additional members */
408   parseByte(subtree, tvb, pOffset, hf_opcua_EventNotifier);\r
409 }\r
410 \r
411 gint ett_opcua_ObjectTypeAttributes = -1;\r
412 void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
413 {\r
414   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectTypeAttributes", szFieldName);\r
415   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectTypeAttributes);\r
416   /* parse base class members */ 
417   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
418   /* parse additional members */
419   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);\r
420 }\r
421 \r
422 gint ett_opcua_VariableAttributes = -1;\r
423 void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
424 {\r
425   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableAttributes", szFieldName);\r
426   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableAttributes);\r
427   /* parse base class members */ 
428   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
429   /* parse additional members */
430   parseVariant(subtree, tvb, pOffset, "Value");
431   parseNodeId(subtree, tvb, pOffset, "DataType");
432   parseInt32(subtree, tvb, pOffset, hf_opcua_ArraySize);
433   parseByte(subtree, tvb, pOffset, hf_opcua_AccessLevel);
434   parseByte(subtree, tvb, pOffset, hf_opcua_UserAccessLevel);
435   parseInt32(subtree, tvb, pOffset, hf_opcua_MinimumSamplingInterval);
436   parseBoolean(subtree, tvb, pOffset, hf_opcua_Historizing);\r
437 }\r
438 \r
439 gint ett_opcua_VariableTypeAttributes = -1;\r
440 void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
441 {\r
442   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableTypeAttributes", szFieldName);\r
443   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableTypeAttributes);\r
444   /* parse base class members */ 
445   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
446   /* parse additional members */
447   parseVariant(subtree, tvb, pOffset, "Value");
448   parseNodeId(subtree, tvb, pOffset, "DataType");
449   parseInt32(subtree, tvb, pOffset, hf_opcua_ArraySize);
450   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);\r
451 }\r
452 \r
453 gint ett_opcua_ReferenceTypeAttributes = -1;\r
454 void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
455 {\r
456   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceTypeAttributes", szFieldName);\r
457   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceTypeAttributes);\r
458   /* parse base class members */ 
459   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
460   /* parse additional members */
461   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);
462   parseBoolean(subtree, tvb, pOffset, hf_opcua_Symmetric);
463   parseLocalizedText(subtree, tvb, pOffset, "InverseName");\r
464 }\r
465 \r
466 gint ett_opcua_MethodAttributes = -1;\r
467 void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
468 {\r
469   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MethodAttributes", szFieldName);\r
470   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MethodAttributes);\r
471   /* parse base class members */ 
472   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
473   /* parse additional members */
474   parseBoolean(subtree, tvb, pOffset, hf_opcua_Executable);
475   parseBoolean(subtree, tvb, pOffset, hf_opcua_UserExecutable);\r
476 }\r
477 \r
478 gint ett_opcua_ViewAttributes = -1;\r
479 void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
480 {\r
481   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ViewAttributes", szFieldName);\r
482   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ViewAttributes);\r
483   /* parse base class members */ 
484   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
485   /* parse additional members */
486   parseBoolean(subtree, tvb, pOffset, hf_opcua_ContainsNoLoops);
487   parseByte(subtree, tvb, pOffset, hf_opcua_EventNotifier);\r
488 }\r
489 \r
490 gint ett_opcua_AddNodesItem = -1;\r
491 void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
492 {\r
493   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AddNodesItem", szFieldName);\r
494   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesItem);\r
495
496   parseExpandedNodeId(subtree, tvb, pOffset, "ParentNodeId");
497   parseNodeId(subtree, tvb, pOffset, "ReferenceTypeId");
498   parseExpandedNodeId(subtree, tvb, pOffset, "RequestedNewNodeId");
499   parseQualifiedName(subtree, tvb, pOffset, "BrowseName");
500   parseInt32(subtree, tvb, pOffset, hf_opcua_NodeClass);
501   parseExtensionObject(subtree, tvb, pOffset, "NodeAttributes");
502   parseExpandedNodeId(subtree, tvb, pOffset, "TypeDefinition");\r
503 }\r
504 \r
505 gint ett_opcua_AddReferencesItem = -1;\r
506 void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
507 {\r
508   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AddReferencesItem", szFieldName);\r
509   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesItem);\r
510
511   parseNodeId(subtree, tvb, pOffset, "SourceNodeId");
512   parseNodeId(subtree, tvb, pOffset, "ReferenceTypeId");
513   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsForward);
514   parseString(subtree, tvb, pOffset, hf_opcua_TargetServerUri);
515   parseExpandedNodeId(subtree, tvb, pOffset, "TargetNodeId");
516   parseInt32(subtree, tvb, pOffset, hf_opcua_TargetNodeClass);\r
517 }\r
518 \r
519 gint ett_opcua_DeleteNodesItem = -1;\r
520 void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
521 {\r
522   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteNodesItem", szFieldName);\r
523   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesItem);\r
524
525   parseNodeId(subtree, tvb, pOffset, "NodeId");
526   parseBoolean(subtree, tvb, pOffset, hf_opcua_DeleteTargetReferences);\r
527 }\r
528 \r
529 gint ett_opcua_DeleteReferencesItem = -1;\r
530 void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
531 {\r
532   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteReferencesItem", szFieldName);\r
533   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesItem);\r
534
535   parseNodeId(subtree, tvb, pOffset, "SourceNodeId");
536   parseNodeId(subtree, tvb, pOffset, "ReferenceTypeId");
537   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsForward);
538   parseUInt32(subtree, tvb, pOffset, hf_opcua_ServerIndex);
539   parseExpandedNodeId(subtree, tvb, pOffset, "TargetNodeId");\r
540 }\r
541 \r
542 gint ett_opcua_RedundantServerDataType = -1;\r
543 void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
544 {\r
545   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : RedundantServerDataType", szFieldName);\r
546   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RedundantServerDataType);\r
547
548   parseString(subtree, tvb, pOffset, hf_opcua_ServerId);
549   parseSByte(subtree, tvb, pOffset, hf_opcua_ServiceLevel);
550   parseServerState(subtree, tvb, pOffset);\r
551 }\r
552 \r
553 gint ett_opcua_SamplingRateDiagnosticsDataType = -1;\r
554 void parseSamplingRateDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
555 {\r
556   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SamplingRateDiagnosticsDataType", szFieldName);\r
557   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SamplingRateDiagnosticsDataType);\r
558
559   parseUInt32(subtree, tvb, pOffset, hf_opcua_SamplingRate);
560   parseUInt32(subtree, tvb, pOffset, hf_opcua_SamplingErrorCount);
561   parseUInt32(subtree, tvb, pOffset, hf_opcua_SampledMonitoredItemsCount);
562   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxSampledMonitoredItemsCount);
563   parseUInt32(subtree, tvb, pOffset, hf_opcua_DisabledMonitoredItemsSamplingCount);\r
564 }\r
565 \r
566 gint ett_opcua_ServerDiagnosticsSummaryDataType = -1;\r
567 void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
568 {\r
569   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServerDiagnosticsSummaryDataType", szFieldName);\r
570   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServerDiagnosticsSummaryDataType);\r
571
572   parseUInt32(subtree, tvb, pOffset, hf_opcua_ServerViewCount);
573   parseUInt32(subtree, tvb, pOffset, hf_opcua_CurrentSessionCount);
574   parseUInt32(subtree, tvb, pOffset, hf_opcua_CumulatedSessionCount);
575   parseUInt32(subtree, tvb, pOffset, hf_opcua_SecurityRejectedSessionCount);
576   parseUInt32(subtree, tvb, pOffset, hf_opcua_RejectSessionCount);
577   parseUInt32(subtree, tvb, pOffset, hf_opcua_SessionTimeoutCount);
578   parseUInt32(subtree, tvb, pOffset, hf_opcua_SessionAbortCount);
579   parseUInt32(subtree, tvb, pOffset, hf_opcua_SamplingRateCount);
580   parseUInt32(subtree, tvb, pOffset, hf_opcua_PublishingRateCount);
581   parseUInt32(subtree, tvb, pOffset, hf_opcua_CurrentSubscriptionCount);
582   parseUInt32(subtree, tvb, pOffset, hf_opcua_CumulatedSubscriptionCount);
583   parseUInt32(subtree, tvb, pOffset, hf_opcua_SecurityRejectedRequestsCount);
584   parseUInt32(subtree, tvb, pOffset, hf_opcua_RejectedRequestsCount);\r
585 }\r
586 \r
587 gint ett_opcua_ServerStatusDataType = -1;\r
588 void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
589 {\r
590   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServerStatusDataType", szFieldName);\r
591   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServerStatusDataType);\r
592
593   parseDateTime(subtree, tvb, pOffset, hf_opcua_StartTime);
594   parseDateTime(subtree, tvb, pOffset, hf_opcua_CurrentTime);
595   parseServerState(subtree, tvb, pOffset);
596   parseBuildInfo(subtree, tvb, pOffset, "BuildInfo");\r
597 }\r
598 \r
599 gint ett_opcua_ServiceCounterDataType = -1;\r
600 void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
601 {\r
602   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServiceCounterDataType", szFieldName);\r
603   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServiceCounterDataType);\r
604
605   parseUInt32(subtree, tvb, pOffset, hf_opcua_TotalCount);
606   parseUInt32(subtree, tvb, pOffset, hf_opcua_UnauthorizedCount);
607   parseUInt32(subtree, tvb, pOffset, hf_opcua_ErrorCount);\r
608 }\r
609 \r
610 gint ett_opcua_SessionDiagnosticsDataType = -1;\r
611 void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
612 {\r
613   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SessionDiagnosticsDataType", szFieldName);\r
614   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SessionDiagnosticsDataType);\r
615
616   parseUInt32(subtree, tvb, pOffset, hf_opcua_SessionId);
617   parseString(subtree, tvb, pOffset, hf_opcua_ClientName);
618   parseArraySimple(subtree, tvb, pOffset, hf_opcua_LocaleIds, parseString);
619   parseInt32(subtree, tvb, pOffset, hf_opcua_ActualSessionTimeout);
620   parseDateTime(subtree, tvb, pOffset, hf_opcua_ClientConnectionTime);
621   parseDateTime(subtree, tvb, pOffset, hf_opcua_ClientLastContactTime);
622   parseUInt32(subtree, tvb, pOffset, hf_opcua_CurrentSubscriptionsCount);
623   parseUInt32(subtree, tvb, pOffset, hf_opcua_CurrentMonitoredItemsCount);
624   parseUInt32(subtree, tvb, pOffset, hf_opcua_CurrentPublishRequestsInQueue);
625   parseUInt32(subtree, tvb, pOffset, hf_opcua_CurrentPublishTimerExpirations);
626   parseUInt32(subtree, tvb, pOffset, hf_opcua_KeepAliveCount);
627   parseUInt32(subtree, tvb, pOffset, hf_opcua_CurrentRepublishRequestsInQueue);
628   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxRepublishRequestsInQueue);
629   parseUInt32(subtree, tvb, pOffset, hf_opcua_RepublishCounter);
630   parseUInt32(subtree, tvb, pOffset, hf_opcua_PublishingCount);
631   parseUInt32(subtree, tvb, pOffset, hf_opcua_PublishingQueueOverflowCount);
632   parseServiceCounterDataType(subtree, tvb, pOffset, "ReadCount");
633   parseServiceCounterDataType(subtree, tvb, pOffset, "HistoryReadCount");
634   parseServiceCounterDataType(subtree, tvb, pOffset, "WriteCount");
635   parseServiceCounterDataType(subtree, tvb, pOffset, "HistoryUpdateCount");
636   parseServiceCounterDataType(subtree, tvb, pOffset, "CallCount");
637   parseServiceCounterDataType(subtree, tvb, pOffset, "CreateMonitoredItemsCount");
638   parseServiceCounterDataType(subtree, tvb, pOffset, "ModifyMonitoredItemsCount");
639   parseServiceCounterDataType(subtree, tvb, pOffset, "SetMonitoringModeCount");
640   parseServiceCounterDataType(subtree, tvb, pOffset, "SetTriggeringCount");
641   parseServiceCounterDataType(subtree, tvb, pOffset, "DeleteMonitoredItemsCount");
642   parseServiceCounterDataType(subtree, tvb, pOffset, "CreateSubscriptionCount");
643   parseServiceCounterDataType(subtree, tvb, pOffset, "ModifySubscriptionCount");
644   parseServiceCounterDataType(subtree, tvb, pOffset, "SetPublishingModeCount");
645   parseServiceCounterDataType(subtree, tvb, pOffset, "PublishCount");
646   parseServiceCounterDataType(subtree, tvb, pOffset, "RepublishCount");
647   parseServiceCounterDataType(subtree, tvb, pOffset, "TransferSubscriptionCount");
648   parseServiceCounterDataType(subtree, tvb, pOffset, "DeleteSubscriptionsCount");
649   parseServiceCounterDataType(subtree, tvb, pOffset, "AddNodesCount");
650   parseServiceCounterDataType(subtree, tvb, pOffset, "AddReferencesCount");
651   parseServiceCounterDataType(subtree, tvb, pOffset, "DeleteNodesCount");
652   parseServiceCounterDataType(subtree, tvb, pOffset, "DeleteReferencesCount");
653   parseServiceCounterDataType(subtree, tvb, pOffset, "BrowseCount");
654   parseServiceCounterDataType(subtree, tvb, pOffset, "BrowseNextCount");
655   parseServiceCounterDataType(subtree, tvb, pOffset, "TranslateBrowsePathsToNodeIdsCount");
656   parseServiceCounterDataType(subtree, tvb, pOffset, "QueryFirstCount");
657   parseServiceCounterDataType(subtree, tvb, pOffset, "QueryNextCount");\r
658 }\r
659 \r
660 gint ett_opcua_SessionSecurityDiagnosticsDataType = -1;\r
661 void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
662 {\r
663   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SessionSecurityDiagnosticsDataType", szFieldName);\r
664   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SessionSecurityDiagnosticsDataType);\r
665
666   parseUInt32(subtree, tvb, pOffset, hf_opcua_SessionId);
667   parseString(subtree, tvb, pOffset, hf_opcua_ClientUserIdOfSession);
668   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ClientUserIdHistory, parseString);
669   parseString(subtree, tvb, pOffset, hf_opcua_AuthenticationMechanism);
670   parseString(subtree, tvb, pOffset, hf_opcua_Encoding);
671   parseString(subtree, tvb, pOffset, hf_opcua_TransportProtocol);
672   parseString(subtree, tvb, pOffset, hf_opcua_SecurityPolicy);\r
673 }\r
674 \r
675 gint ett_opcua_SubscriptionDiagnosticsDataType = -1;\r
676 void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
677 {\r
678   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SubscriptionDiagnosticsDataType", szFieldName);\r
679   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SubscriptionDiagnosticsDataType);\r
680
681   parseUInt32(subtree, tvb, pOffset, hf_opcua_SessionId);
682   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
683   parseInt32(subtree, tvb, pOffset, hf_opcua_PublishingInterval);
684   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxKeepAliveCount);
685   parseByte(subtree, tvb, pOffset, hf_opcua_Priority);
686   parseBoolean(subtree, tvb, pOffset, hf_opcua_PublishingEnabled);
687   parseUInt32(subtree, tvb, pOffset, hf_opcua_ModifyCount);
688   parseUInt32(subtree, tvb, pOffset, hf_opcua_EnableCount);
689   parseUInt32(subtree, tvb, pOffset, hf_opcua_DisableCount);
690   parseUInt32(subtree, tvb, pOffset, hf_opcua_RepublishRequestCount);
691   parseUInt32(subtree, tvb, pOffset, hf_opcua_RepublishMessageRequestCount);
692   parseUInt32(subtree, tvb, pOffset, hf_opcua_RepublishMessageCount);
693   parseUInt32(subtree, tvb, pOffset, hf_opcua_TransferRequestCount);
694   parseUInt32(subtree, tvb, pOffset, hf_opcua_TransferredToAltClientCount);
695   parseUInt32(subtree, tvb, pOffset, hf_opcua_TransferredToSameClientCount);
696   parseUInt32(subtree, tvb, pOffset, hf_opcua_PublishRequestCount);
697   parseUInt32(subtree, tvb, pOffset, hf_opcua_DataChangeNotificationsCount);
698   parseUInt32(subtree, tvb, pOffset, hf_opcua_EventNotificationsCount);
699   parseUInt32(subtree, tvb, pOffset, hf_opcua_NotificationsCount);
700   parseUInt32(subtree, tvb, pOffset, hf_opcua_LateStateCount);
701   parseUInt32(subtree, tvb, pOffset, hf_opcua_KeepAliveStateCount);\r
702 }\r
703 \r
704 gint ett_opcua_Range = -1;\r
705 void parseRange(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
706 {\r
707   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Range", szFieldName);\r
708   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Range);\r
709
710   parseDouble(subtree, tvb, pOffset, hf_opcua_Low);
711   parseDouble(subtree, tvb, pOffset, hf_opcua_High);\r
712 }\r
713 \r
714 gint ett_opcua_EUInformation = -1;\r
715 void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
716 {\r
717   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EUInformation", szFieldName);\r
718   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EUInformation);\r
719
720   parseString(subtree, tvb, pOffset, hf_opcua_NamespaceUri);
721   parseInt32(subtree, tvb, pOffset, hf_opcua_UnitId);
722   parseLocalizedText(subtree, tvb, pOffset, "DisplayName");
723   parseLocalizedText(subtree, tvb, pOffset, "Description");\r
724 }\r
725 \r
726 gint ett_opcua_Annotation = -1;\r
727 void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
728 {\r
729   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Annotation", szFieldName);\r
730   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Annotation);\r
731
732   parseString(subtree, tvb, pOffset, hf_opcua_Message);
733   parseString(subtree, tvb, pOffset, hf_opcua_UserName);
734   parseExtensionObject(subtree, tvb, pOffset, "UserIdentity");
735   parseDateTime(subtree, tvb, pOffset, hf_opcua_AnnotationTime);\r
736 }\r
737 \r
738 gint ett_opcua_BaseStructureDataType = -1;\r
739 void parseBaseStructureDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
740 {\r
741   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BaseStructureDataType", szFieldName);\r
742   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BaseStructureDataType);\r
743
744   parseInt32(subtree, tvb, pOffset, hf_opcua_Id);
745   parseString(subtree, tvb, pOffset, hf_opcua_Name);\r
746 }\r
747 \r
748 gint ett_opcua_DerivedStructureDataType = -1;\r
749 void parseDerivedStructureDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
750 {\r
751   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DerivedStructureDataType", szFieldName);\r
752   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DerivedStructureDataType);\r
753   /* parse base class members */ 
754   parseBaseStructureDataType(subtree, tvb, pOffset, "[BaseStructureDataType]");
755   /* parse additional members */
756   parseString(subtree, tvb, pOffset, hf_opcua_Description);
757   parseDateTime(subtree, tvb, pOffset, hf_opcua_Timestamp);\r
758 }\r
759 \r
760 gint ett_opcua_ScalarValuesDataType = -1;\r
761 void parseScalarValuesDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
762 {\r
763   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ScalarValuesDataType", szFieldName);\r
764   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ScalarValuesDataType);\r
765
766   parseBoolean(subtree, tvb, pOffset, hf_opcua_Boolean);
767   parseSByte(subtree, tvb, pOffset, hf_opcua_SByte);
768   parseByte(subtree, tvb, pOffset, hf_opcua_Byte);
769   parseInt16(subtree, tvb, pOffset, hf_opcua_Int16);
770   parseUInt16(subtree, tvb, pOffset, hf_opcua_UInt16);
771   parseInt32(subtree, tvb, pOffset, hf_opcua_Int32);
772   parseUInt32(subtree, tvb, pOffset, hf_opcua_UInt32);
773   parseInt64(subtree, tvb, pOffset, hf_opcua_Int64);
774   parseUInt64(subtree, tvb, pOffset, hf_opcua_UInt64);
775   parseFloat(subtree, tvb, pOffset, hf_opcua_Float);
776   parseDouble(subtree, tvb, pOffset, hf_opcua_Double);
777   parseString(subtree, tvb, pOffset, hf_opcua_String);
778   parseDateTime(subtree, tvb, pOffset, hf_opcua_DateTime);
779   parseGuid(subtree, tvb, pOffset, hf_opcua_Guid);
780   parseByteString(subtree, tvb, pOffset, hf_opcua_ByteString);
781   parseXmlElement(subtree, tvb, pOffset, hf_opcua_XmlElement);
782   parseNodeId(subtree, tvb, pOffset, "NodeId");
783   parseExpandedNodeId(subtree, tvb, pOffset, "ExpandedNodeId");
784   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
785   parseDiagnosticInfo(subtree, tvb, pOffset, "DiagnosticInfo");
786   parseQualifiedName(subtree, tvb, pOffset, "QualifiedName");
787   parseLocalizedText(subtree, tvb, pOffset, "LocalizedText");
788   parseExtensionObject(subtree, tvb, pOffset, "ExtensionObject");
789   parseDataValue(subtree, tvb, pOffset, "DataValue");
790   parseVariant(subtree, tvb, pOffset, "Variant");
791   parseBaseStructureDataType(subtree, tvb, pOffset, "Structure");
792   parseColorsDataType(subtree, tvb, pOffset);\r
793 }\r
794 \r
795 gint ett_opcua_ArrayValuesDataType = -1;\r
796 void parseArrayValuesDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
797 {\r
798   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ArrayValuesDataType", szFieldName);\r
799   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ArrayValuesDataType);\r
800
801   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Boolean, parseBoolean);
802   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SByte, parseSByte);
803   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Int16, parseInt16);
804   parseArraySimple(subtree, tvb, pOffset, hf_opcua_UInt16, parseUInt16);
805   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Int32, parseInt32);
806   parseArraySimple(subtree, tvb, pOffset, hf_opcua_UInt32, parseUInt32);
807   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Int64, parseInt64);
808   parseArraySimple(subtree, tvb, pOffset, hf_opcua_UInt64, parseUInt64);
809   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Float, parseFloat);
810   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Double, parseDouble);
811   parseArraySimple(subtree, tvb, pOffset, hf_opcua_String, parseString);
812   parseArraySimple(subtree, tvb, pOffset, hf_opcua_DateTime, parseDateTime);
813   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Guid, parseGuid);
814   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ByteString, parseByteString);
815   parseArraySimple(subtree, tvb, pOffset, hf_opcua_XmlElement, parseXmlElement);
816   parseArrayComplex(subtree, tvb, pOffset, "NodeId", parseNodeId);
817   parseArrayComplex(subtree, tvb, pOffset, "ExpandedNodeId", parseExpandedNodeId);
818   parseArraySimple(subtree, tvb, pOffset, hf_opcua_StatusCode, parseStatusCode);
819   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfo", parseDiagnosticInfo);
820   parseArrayComplex(subtree, tvb, pOffset, "QualifiedName", parseQualifiedName);
821   parseArrayComplex(subtree, tvb, pOffset, "LocalizedText", parseLocalizedText);
822   parseArrayComplex(subtree, tvb, pOffset, "ExtensionObject", parseExtensionObject);
823   parseArrayComplex(subtree, tvb, pOffset, "DataValue", parseDataValue);
824   parseArrayComplex(subtree, tvb, pOffset, "Variant", parseVariant);
825   parseArrayComplex(subtree, tvb, pOffset, "Structure", parseBaseStructureDataType);
826   parseArrayEnum(subtree, tvb, pOffset, parseColorsDataType);\r
827 }\r
828 \r
829 gint ett_opcua_RequestHeader = -1;\r
830 void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
831 {\r
832   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : RequestHeader", szFieldName);\r
833   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RequestHeader);\r
834
835   parseUInt32(subtree, tvb, pOffset, hf_opcua_SessionId);
836   parseDateTime(subtree, tvb, pOffset, hf_opcua_Timestamp);
837   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestId);
838   parseUInt32(subtree, tvb, pOffset, hf_opcua_ReturnDiagnostics);
839   parseString(subtree, tvb, pOffset, hf_opcua_AuditLogEntryId);
840   parseInt32(subtree, tvb, pOffset, hf_opcua_TimeoutHint);
841   parseExtensionObject(subtree, tvb, pOffset, "AdditionalHeaders");\r
842 }\r
843 \r
844 gint ett_opcua_ResponseHeader = -1;\r
845 void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
846 {\r
847   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ResponseHeader", szFieldName);\r
848   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ResponseHeader);\r
849
850   parseUInt32(subtree, tvb, pOffset, hf_opcua_SessionId);
851   parseDateTime(subtree, tvb, pOffset, hf_opcua_Timestamp);
852   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestId);
853   parseStatusCode(subtree, tvb, pOffset, hf_opcua_ServiceResult);
854   parseDiagnosticInfo(subtree, tvb, pOffset, "ServiceDiagnostics");
855   parseArraySimple(subtree, tvb, pOffset, hf_opcua_StringTable, parseString);
856   parseExtensionObject(subtree, tvb, pOffset, "AdditionalHeaders");\r
857 }\r
858 \r
859 gint ett_opcua_ServiceFault = -1;\r
860 void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
861 {\r
862   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServiceFault", szFieldName);\r
863   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServiceFault);\r
864
865   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");\r
866 }\r
867 \r
868 gint ett_opcua_ComplexTestType = -1;\r
869 void parseComplexTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
870 {\r
871   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ComplexTestType", szFieldName);\r
872   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ComplexTestType);\r
873
874   parseDateTime(subtree, tvb, pOffset, hf_opcua_Value1);
875   parseArrayEnum(subtree, tvb, pOffset, parseEnumeratedTestType);\r
876 }\r
877 \r
878 gint ett_opcua_BaseTestType = -1;\r
879 void parseBaseTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
880 {\r
881   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BaseTestType", szFieldName);\r
882   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BaseTestType);\r
883
884   parseDateTime(subtree, tvb, pOffset, hf_opcua_Value1);\r
885 }\r
886 \r
887 gint ett_opcua_DerivedTestType = -1;\r
888 void parseDerivedTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
889 {\r
890   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DerivedTestType", szFieldName);\r
891   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DerivedTestType);\r
892   /* parse base class members */ 
893   parseBaseTestType(subtree, tvb, pOffset, "[BaseTestType]");
894   /* parse additional members */
895   parseDateTime(subtree, tvb, pOffset, hf_opcua_Value2);\r
896 }\r
897 \r
898 gint ett_opcua_ScalarTestType = -1;\r
899 void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
900 {\r
901   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ScalarTestType", szFieldName);\r
902   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ScalarTestType);\r
903
904   parseBoolean(subtree, tvb, pOffset, hf_opcua_Boolean);
905   parseSByte(subtree, tvb, pOffset, hf_opcua_SByte);
906   parseByte(subtree, tvb, pOffset, hf_opcua_Byte);
907   parseInt16(subtree, tvb, pOffset, hf_opcua_Int16);
908   parseUInt16(subtree, tvb, pOffset, hf_opcua_UInt16);
909   parseInt32(subtree, tvb, pOffset, hf_opcua_Int32);
910   parseUInt32(subtree, tvb, pOffset, hf_opcua_UInt32);
911   parseInt64(subtree, tvb, pOffset, hf_opcua_Int64);
912   parseUInt64(subtree, tvb, pOffset, hf_opcua_UInt64);
913   parseFloat(subtree, tvb, pOffset, hf_opcua_Float);
914   parseDouble(subtree, tvb, pOffset, hf_opcua_Double);
915   parseString(subtree, tvb, pOffset, hf_opcua_String);
916   parseDateTime(subtree, tvb, pOffset, hf_opcua_DateTime);
917   parseGuid(subtree, tvb, pOffset, hf_opcua_Guid);
918   parseByteString(subtree, tvb, pOffset, hf_opcua_ByteString);
919   parseXmlElement(subtree, tvb, pOffset, hf_opcua_XmlElement);
920   parseNodeId(subtree, tvb, pOffset, "NodeId");
921   parseExpandedNodeId(subtree, tvb, pOffset, "ExpandedNodeId");
922   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
923   parseDiagnosticInfo(subtree, tvb, pOffset, "DiagnosticInfo");
924   parseQualifiedName(subtree, tvb, pOffset, "QualifiedName");
925   parseLocalizedText(subtree, tvb, pOffset, "LocalizedText");
926   parseExtensionObject(subtree, tvb, pOffset, "ExtensionObject");
927   parseDataValue(subtree, tvb, pOffset, "DataValue");
928   parseVariant(subtree, tvb, pOffset, "Variant");
929   parseComplexTestType(subtree, tvb, pOffset, "ComplexValue");
930   parseEnumeratedTestType(subtree, tvb, pOffset);\r
931 }\r
932 \r
933 gint ett_opcua_ArrayTestType = -1;\r
934 void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
935 {\r
936   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ArrayTestType", szFieldName);\r
937   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ArrayTestType);\r
938
939   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Booleans, parseBoolean);
940   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SBytes, parseSByte);
941   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Int16s, parseInt16);
942   parseArraySimple(subtree, tvb, pOffset, hf_opcua_UInt16s, parseUInt16);
943   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Int32s, parseInt32);
944   parseArraySimple(subtree, tvb, pOffset, hf_opcua_UInt32s, parseUInt32);
945   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Int64s, parseInt64);
946   parseArraySimple(subtree, tvb, pOffset, hf_opcua_UInt64s, parseUInt64);
947   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Floats, parseFloat);
948   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Doubles, parseDouble);
949   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Strings, parseString);
950   parseArraySimple(subtree, tvb, pOffset, hf_opcua_DateTimes, parseDateTime);
951   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Guids, parseGuid);
952   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ByteStrings, parseByteString);
953   parseArraySimple(subtree, tvb, pOffset, hf_opcua_XmlElements, parseXmlElement);
954   parseArrayComplex(subtree, tvb, pOffset, "NodeIds", parseNodeId);
955   parseArrayComplex(subtree, tvb, pOffset, "ExpandedNodeIds", parseExpandedNodeId);
956   parseArraySimple(subtree, tvb, pOffset, hf_opcua_StatusCodes, parseStatusCode);
957   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
958   parseArrayComplex(subtree, tvb, pOffset, "QualifiedNames", parseQualifiedName);
959   parseArrayComplex(subtree, tvb, pOffset, "LocalizedTexts", parseLocalizedText);
960   parseArrayComplex(subtree, tvb, pOffset, "ExtensionObjects", parseExtensionObject);
961   parseArrayComplex(subtree, tvb, pOffset, "DataValues", parseDataValue);
962   parseArrayComplex(subtree, tvb, pOffset, "Variants", parseVariant);
963   parseArrayComplex(subtree, tvb, pOffset, "ComplexValues", parseComplexTestType);
964   parseArrayEnum(subtree, tvb, pOffset, parseEnumeratedTestType);\r
965 }\r
966 \r
967 gint ett_opcua_CompositeTestType = -1;\r
968 void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
969 {\r
970   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : CompositeTestType", szFieldName);\r
971   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CompositeTestType);\r
972
973   parseScalarTestType(subtree, tvb, pOffset, "Input1");
974   parseArrayTestType(subtree, tvb, pOffset, "Input2");\r
975 }\r
976 \r
977 gint ett_opcua_RegisteredServer = -1;\r
978 void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
979 {\r
980   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : RegisteredServer", szFieldName);\r
981   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisteredServer);\r
982
983   parseServerDescriptionType(subtree, tvb, pOffset);
984   parseString(subtree, tvb, pOffset, hf_opcua_ServerUri);
985   parseArrayComplex(subtree, tvb, pOffset, "ServerNames", parseLocalizedText);
986   parseArraySimple(subtree, tvb, pOffset, hf_opcua_DiscoveryUrls, parseString);
987   parseString(subtree, tvb, pOffset, hf_opcua_SemaphoreFilePath);
988   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsOnline);\r
989 }\r
990 \r
991 gint ett_opcua_ChannelSecurityToken = -1;\r
992 void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
993 {\r
994   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ChannelSecurityToken", szFieldName);\r
995   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ChannelSecurityToken);\r
996
997   parseGuid(subtree, tvb, pOffset, hf_opcua_ChannelId);
998   parseString(subtree, tvb, pOffset, hf_opcua_TokenId);
999   parseDateTime(subtree, tvb, pOffset, hf_opcua_CreatedAt);
1000   parseInt32(subtree, tvb, pOffset, hf_opcua_RevisedLifetime);\r
1001 }\r
1002 \r
1003 gint ett_opcua_SignatureData = -1;\r
1004 void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1005 {\r
1006   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SignatureData", szFieldName);\r
1007   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SignatureData);\r
1008
1009   parseString(subtree, tvb, pOffset, hf_opcua_Algorithm);
1010   parseByteString(subtree, tvb, pOffset, hf_opcua_Signature);\r
1011 }\r
1012 \r
1013 gint ett_opcua_AddNodesResult = -1;\r
1014 void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1015 {\r
1016   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AddNodesResult", szFieldName);\r
1017   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesResult);\r
1018
1019   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1020   parseNodeId(subtree, tvb, pOffset, "AddedNodeId");\r
1021 }\r
1022 \r
1023 gint ett_opcua_BrowsePropertiesPropertyResult = -1;\r
1024 void parseBrowsePropertiesPropertyResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1025 {\r
1026   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BrowsePropertiesPropertyResult", szFieldName);\r
1027   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePropertiesPropertyResult);\r
1028
1029   parseQualifiedName(subtree, tvb, pOffset, "PropertyName");
1030   parseLocalizedText(subtree, tvb, pOffset, "PropertyDisplayName");
1031   parseNodeId(subtree, tvb, pOffset, "PropertyNodeId");
1032   parseStatusCode(subtree, tvb, pOffset, hf_opcua_PropertyStatusCode);\r
1033 }\r
1034 \r
1035 gint ett_opcua_BrowsePropertiesResult = -1;\r
1036 void parseBrowsePropertiesResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1037 {\r
1038   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BrowsePropertiesResult", szFieldName);\r
1039   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePropertiesResult);\r
1040
1041   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1042   parseArrayComplex(subtree, tvb, pOffset, "PropertyResults", parseBrowsePropertiesPropertyResult);
1043   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
1044 }\r
1045 \r
1046 gint ett_opcua_ReferenceDescription = -1;\r
1047 void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1048 {\r
1049   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceDescription", szFieldName);\r
1050   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceDescription);\r
1051
1052   parseNodeId(subtree, tvb, pOffset, "ReferenceTypeId");
1053   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsForward);
1054   parseUInt32(subtree, tvb, pOffset, hf_opcua_ServerIndex);
1055   parseExpandedNodeId(subtree, tvb, pOffset, "NodeId");
1056   parseQualifiedName(subtree, tvb, pOffset, "BrowseName");
1057   parseLocalizedText(subtree, tvb, pOffset, "DisplayName");
1058   parseInt32(subtree, tvb, pOffset, hf_opcua_NodeClass);
1059   parseExpandedNodeId(subtree, tvb, pOffset, "TypeDefinition");\r
1060 }\r
1061 \r
1062 gint ett_opcua_ViewDescription = -1;\r
1063 void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1064 {\r
1065   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ViewDescription", szFieldName);\r
1066   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ViewDescription);\r
1067
1068   parseNodeId(subtree, tvb, pOffset, "ViewId");
1069   parseDateTime(subtree, tvb, pOffset, hf_opcua_Timestamp);
1070   parseInt32(subtree, tvb, pOffset, hf_opcua_ViewVersion);\r
1071 }\r
1072 \r
1073 gint ett_opcua_BrowsePath = -1;\r
1074 void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1075 {\r
1076   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BrowsePath", szFieldName);\r
1077   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePath);\r
1078
1079   parseNodeId(subtree, tvb, pOffset, "StartingNode");
1080   parseString(subtree, tvb, pOffset, hf_opcua_RelativePath);\r
1081 }\r
1082 \r
1083 gint ett_opcua_TranslateBrowsePathResult = -1;\r
1084 void parseTranslateBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1085 {\r
1086   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : TranslateBrowsePathResult", szFieldName);\r
1087   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathResult);\r
1088
1089   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1090   parseArrayComplex(subtree, tvb, pOffset, "MatchingNodeIds", parseNodeId);\r
1091 }\r
1092 \r
1093 gint ett_opcua_AttributeDescription = -1;\r
1094 void parseAttributeDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1095 {\r
1096   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AttributeDescription", szFieldName);\r
1097   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AttributeDescription);\r
1098
1099   parseString(subtree, tvb, pOffset, hf_opcua_RelativePath);
1100   parseUInt32(subtree, tvb, pOffset, hf_opcua_AttributeId);
1101   parseString(subtree, tvb, pOffset, hf_opcua_IndexRange);\r
1102 }\r
1103 \r
1104 gint ett_opcua_NodeTypeDescription = -1;\r
1105 void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1106 {\r
1107   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeTypeDescription", szFieldName);\r
1108   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeTypeDescription);\r
1109
1110   parseNodeId(subtree, tvb, pOffset, "TypeDefinitionNode");
1111   parseBoolean(subtree, tvb, pOffset, hf_opcua_IncludeSubTypes);
1112   parseArrayComplex(subtree, tvb, pOffset, "AttributesToReturn", parseAttributeDescription);\r
1113 }\r
1114 \r
1115 gint ett_opcua_QueryDataSet = -1;\r
1116 void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1117 {\r
1118   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : QueryDataSet", szFieldName);\r
1119   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryDataSet);\r
1120
1121   parseExpandedNodeId(subtree, tvb, pOffset, "NodeId");
1122   parseNodeId(subtree, tvb, pOffset, "TypeDefinitionNodeId");
1123   parseArrayComplex(subtree, tvb, pOffset, "Values", parseVariant);\r
1124 }\r
1125 \r
1126 gint ett_opcua_NodeReference = -1;\r
1127 void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1128 {\r
1129   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeReference", szFieldName);\r
1130   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeReference);\r
1131
1132   parseNodeId(subtree, tvb, pOffset, "NodeId");
1133   parseNodeId(subtree, tvb, pOffset, "ReferenceTypeId");
1134   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsForward);
1135   parseArrayComplex(subtree, tvb, pOffset, "ReferencedNodeIds", parseNodeId);\r
1136 }\r
1137 \r
1138 gint ett_opcua_ContentFilterElement = -1;\r
1139 void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1140 {\r
1141   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ContentFilterElement", szFieldName);\r
1142   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ContentFilterElement);\r
1143
1144   parseFilterOperator(subtree, tvb, pOffset);
1145   parseArrayComplex(subtree, tvb, pOffset, "FilterOperands", parseExtensionObject);\r
1146 }\r
1147 \r
1148 gint ett_opcua_ContentFilter = -1;\r
1149 void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1150 {\r
1151   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ContentFilter", szFieldName);\r
1152   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ContentFilter);\r
1153
1154   parseArrayComplex(subtree, tvb, pOffset, "Elements", parseContentFilterElement);\r
1155 }\r
1156 \r
1157 gint ett_opcua_FilterOperand = -1;\r
1158 void parseFilterOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1159 {\r
1160   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : FilterOperand", szFieldName);\r
1161   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FilterOperand);\r
1162  \r
1163 }\r
1164 \r
1165 gint ett_opcua_ElementOperand = -1;\r
1166 void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1167 {\r
1168   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ElementOperand", szFieldName);\r
1169   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ElementOperand);\r
1170   /* parse base class members */ 
1171   parseFilterOperand(subtree, tvb, pOffset, "[FilterOperand]");
1172   /* parse additional members */
1173   parseUInt32(subtree, tvb, pOffset, hf_opcua_Index);\r
1174 }\r
1175 \r
1176 gint ett_opcua_LiteralOperand = -1;\r
1177 void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1178 {\r
1179   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : LiteralOperand", szFieldName);\r
1180   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_LiteralOperand);\r
1181   /* parse base class members */ 
1182   parseFilterOperand(subtree, tvb, pOffset, "[FilterOperand]");
1183   /* parse additional members */
1184   parseVariant(subtree, tvb, pOffset, "Value");\r
1185 }\r
1186 \r
1187 gint ett_opcua_AttributeOperand = -1;\r
1188 void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1189 {\r
1190   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AttributeOperand", szFieldName);\r
1191   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AttributeOperand);\r
1192   /* parse base class members */ 
1193   parseFilterOperand(subtree, tvb, pOffset, "[FilterOperand]");
1194   /* parse additional members */
1195   parseNodeId(subtree, tvb, pOffset, "NodeId");
1196   parseString(subtree, tvb, pOffset, hf_opcua_Alias);
1197   parseUInt32(subtree, tvb, pOffset, hf_opcua_AttributeId);
1198   parseString(subtree, tvb, pOffset, hf_opcua_IndexRange);\r
1199 }\r
1200 \r
1201 gint ett_opcua_PropertyOperand = -1;\r
1202 void parsePropertyOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1203 {\r
1204   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : PropertyOperand", szFieldName);\r
1205   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PropertyOperand);\r
1206   /* parse base class members */ 
1207   parseFilterOperand(subtree, tvb, pOffset, "[FilterOperand]");
1208   /* parse additional members */
1209   parseNodeId(subtree, tvb, pOffset, "NodeId");
1210   parseString(subtree, tvb, pOffset, hf_opcua_Alias);
1211   parseQualifiedName(subtree, tvb, pOffset, "Property");
1212   parseString(subtree, tvb, pOffset, hf_opcua_IndexRange);\r
1213 }\r
1214 \r
1215 gint ett_opcua_ContentFilterResult = -1;\r
1216 void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1217 {\r
1218   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ContentFilterResult", szFieldName);\r
1219   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ContentFilterResult);\r
1220
1221   parseStatusCode(subtree, tvb, pOffset, hf_opcua_Result);
1222   parseDiagnosticInfo(subtree, tvb, pOffset, "DiagnosticInfo");
1223   parseUInt32(subtree, tvb, pOffset, hf_opcua_IndexOfInvalidElement);\r
1224 }\r
1225 \r
1226 gint ett_opcua_QueryResult = -1;\r
1227 void parseQueryResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1228 {\r
1229   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : QueryResult", szFieldName);\r
1230   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryResult);\r
1231
1232   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1233   parseArraySimple(subtree, tvb, pOffset, hf_opcua_AttributeStatusCodes, parseStatusCode);
1234   parseArrayComplex(subtree, tvb, pOffset, "AttributeDiagnosticInfos", parseDiagnosticInfo);\r
1235 }\r
1236 \r
1237 gint ett_opcua_ReadValueId = -1;\r
1238 void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1239 {\r
1240   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadValueId", szFieldName);\r
1241   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadValueId);\r
1242
1243   parseNodeId(subtree, tvb, pOffset, "NodeId");
1244   parseUInt32(subtree, tvb, pOffset, hf_opcua_AttributeId);
1245   parseString(subtree, tvb, pOffset, hf_opcua_IndexRange);
1246   parseQualifiedName(subtree, tvb, pOffset, "Encoding");\r
1247 }\r
1248 \r
1249 gint ett_opcua_HistoryReadValueId = -1;\r
1250 void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1251 {\r
1252   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryReadValueId", szFieldName);\r
1253   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadValueId);\r
1254
1255   parseNodeId(subtree, tvb, pOffset, "NodeId");
1256   parseQualifiedName(subtree, tvb, pOffset, "Encoding");
1257   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);\r
1258 }\r
1259 \r
1260 gint ett_opcua_HistoryReadResult = -1;\r
1261 void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1262 {\r
1263   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryReadResult", szFieldName);\r
1264   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadResult);\r
1265
1266   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1267   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
1268   parseExtensionObject(subtree, tvb, pOffset, "HistoryData");\r
1269 }\r
1270 \r
1271 gint ett_opcua_MonitoringFilter = -1;\r
1272 void parseMonitoringFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1273 {\r
1274   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoringFilter", szFieldName);\r
1275   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoringFilter);\r
1276  \r
1277 }\r
1278 \r
1279 gint ett_opcua_EventFilter = -1;\r
1280 void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1281 {\r
1282   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventFilter", szFieldName);\r
1283   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventFilter);\r
1284   /* parse base class members */ 
1285   parseMonitoringFilter(subtree, tvb, pOffset, "[MonitoringFilter]");
1286   /* parse additional members */
1287   parseArrayComplex(subtree, tvb, pOffset, "SelectClauses", parseNodeId);
1288   parseContentFilter(subtree, tvb, pOffset, "WhereClause");\r
1289 }\r
1290 \r
1291 gint ett_opcua_ReadEventDetails = -1;\r
1292 void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1293 {\r
1294   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadEventDetails", szFieldName);\r
1295   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadEventDetails);\r
1296
1297   parseUInt32(subtree, tvb, pOffset, hf_opcua_NumValuesPerNode);
1298   parseDateTime(subtree, tvb, pOffset, hf_opcua_StartTime);
1299   parseDateTime(subtree, tvb, pOffset, hf_opcua_EndTime);
1300   parseEventFilter(subtree, tvb, pOffset, "Filter");\r
1301 }\r
1302 \r
1303 gint ett_opcua_ReadRawModifiedDetails = -1;\r
1304 void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1305 {\r
1306   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadRawModifiedDetails", szFieldName);\r
1307   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadRawModifiedDetails);\r
1308
1309   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsReadModified);
1310   parseDateTime(subtree, tvb, pOffset, hf_opcua_StartTime);
1311   parseDateTime(subtree, tvb, pOffset, hf_opcua_EndTime);
1312   parseUInt32(subtree, tvb, pOffset, hf_opcua_NumValuesPerNode);
1313   parseBoolean(subtree, tvb, pOffset, hf_opcua_ReturnBounds);\r
1314 }\r
1315 \r
1316 gint ett_opcua_ReadProcessedDetails = -1;\r
1317 void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1318 {\r
1319   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadProcessedDetails", szFieldName);\r
1320   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadProcessedDetails);\r
1321
1322   parseDateTime(subtree, tvb, pOffset, hf_opcua_StartTime);
1323   parseDateTime(subtree, tvb, pOffset, hf_opcua_EndTime);
1324   parseInt32(subtree, tvb, pOffset, hf_opcua_ResampleInterval);
1325   parseNodeId(subtree, tvb, pOffset, "AggregateType");\r
1326 }\r
1327 \r
1328 gint ett_opcua_ReadAtTimeDetails = -1;\r
1329 void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1330 {\r
1331   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadAtTimeDetails", szFieldName);\r
1332   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadAtTimeDetails);\r
1333
1334   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ReqTimes, parseDateTime);\r
1335 }\r
1336 \r
1337 gint ett_opcua_HistoryData = -1;\r
1338 void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1339 {\r
1340   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryData", szFieldName);\r
1341   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryData);\r
1342
1343   parseArrayComplex(subtree, tvb, pOffset, "DataValues", parseDataValue);\r
1344 }\r
1345 \r
1346 gint ett_opcua_EventFieldList = -1;\r
1347 void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1348 {\r
1349   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventFieldList", szFieldName);\r
1350   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventFieldList);\r
1351
1352   parseUInt32(subtree, tvb, pOffset, hf_opcua_ClientHandle);
1353   parseArrayComplex(subtree, tvb, pOffset, "EventFields", parseVariant);\r
1354 }\r
1355 \r
1356 gint ett_opcua_EventNotification = -1;\r
1357 void parseEventNotification(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1358 {\r
1359   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventNotification", szFieldName);\r
1360   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventNotification);\r
1361
1362   parseArrayComplex(subtree, tvb, pOffset, "Events", parseEventFieldList);\r
1363 }\r
1364 \r
1365 gint ett_opcua_HistoryEvent = -1;\r
1366 void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1367 {\r
1368   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryEvent", szFieldName);\r
1369   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryEvent);\r
1370
1371   parseArrayComplex(subtree, tvb, pOffset, "Notifications", parseEventNotification);\r
1372 }\r
1373 \r
1374 gint ett_opcua_WriteValue = -1;\r
1375 void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1376 {\r
1377   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : WriteValue", szFieldName);\r
1378   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteValue);\r
1379
1380   parseNodeId(subtree, tvb, pOffset, "NodeId");
1381   parseUInt32(subtree, tvb, pOffset, hf_opcua_AttributeId);
1382   parseString(subtree, tvb, pOffset, hf_opcua_IndexRange);
1383   parseDataValue(subtree, tvb, pOffset, "Value");\r
1384 }\r
1385 \r
1386 gint ett_opcua_InsertReplaceDetails = -1;\r
1387 void parseInsertReplaceDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1388 {\r
1389   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : InsertReplaceDetails", szFieldName);\r
1390   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_InsertReplaceDetails);\r
1391
1392   parseBoolean(subtree, tvb, pOffset, hf_opcua_PerformInsert);
1393   parseBoolean(subtree, tvb, pOffset, hf_opcua_PerformReplace);
1394   parseNodeId(subtree, tvb, pOffset, "NodeId");
1395   parseHistoryData(subtree, tvb, pOffset, "UpdateValue");\r
1396 }\r
1397 \r
1398 gint ett_opcua_InsertEventDetails = -1;\r
1399 void parseInsertEventDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1400 {\r
1401   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : InsertEventDetails", szFieldName);\r
1402   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_InsertEventDetails);\r
1403
1404   parseHistoryEvent(subtree, tvb, pOffset, "HistoryEvent");\r
1405 }\r
1406 \r
1407 gint ett_opcua_DeleteRawModifiedDetails = -1;\r
1408 void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1409 {\r
1410   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteRawModifiedDetails", szFieldName);\r
1411   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteRawModifiedDetails);\r
1412
1413   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsDeleteModified);
1414   parseNodeId(subtree, tvb, pOffset, "NodeId");
1415   parseDateTime(subtree, tvb, pOffset, hf_opcua_StartTime);
1416   parseDateTime(subtree, tvb, pOffset, hf_opcua_EndTime);\r
1417 }\r
1418 \r
1419 gint ett_opcua_DeleteAtTimeDetails = -1;\r
1420 void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1421 {\r
1422   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteAtTimeDetails", szFieldName);\r
1423   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteAtTimeDetails);\r
1424
1425   parseNodeId(subtree, tvb, pOffset, "NodeId");
1426   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ReqTimes, parseDateTime);\r
1427 }\r
1428 \r
1429 gint ett_opcua_DeleteEventDetails = -1;\r
1430 void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1431 {\r
1432   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteEventDetails", szFieldName);\r
1433   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteEventDetails);\r
1434
1435   parseEventFilter(subtree, tvb, pOffset, "EventFilter");
1436   parseDateTime(subtree, tvb, pOffset, hf_opcua_StartTime);
1437   parseDateTime(subtree, tvb, pOffset, hf_opcua_EndTime);\r
1438 }\r
1439 \r
1440 gint ett_opcua_HistoryUpdateResult = -1;\r
1441 void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1442 {\r
1443   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryUpdateResult", szFieldName);\r
1444   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateResult);\r
1445
1446   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1447   parseArraySimple(subtree, tvb, pOffset, hf_opcua_OperationResult, parseStatusCode);
1448   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
1449 }\r
1450 \r
1451 gint ett_opcua_CallRequestItem = -1;\r
1452 void parseCallRequestItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1453 {\r
1454   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : CallRequestItem", szFieldName);\r
1455   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallRequestItem);\r
1456
1457   parseNodeId(subtree, tvb, pOffset, "ObjectId");
1458   parseNodeId(subtree, tvb, pOffset, "MethodId");
1459   parseArrayComplex(subtree, tvb, pOffset, "InputArguments", parseVariant);\r
1460 }\r
1461 \r
1462 gint ett_opcua_CallResultItem = -1;\r
1463 void parseCallResultItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1464 {\r
1465   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : CallResultItem", szFieldName);\r
1466   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallResultItem);\r
1467
1468   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1469   parseArraySimple(subtree, tvb, pOffset, hf_opcua_InputArgumentResults, parseStatusCode);
1470   parseArrayComplex(subtree, tvb, pOffset, "InputArgumentDiagnosticInfos", parseDiagnosticInfo);
1471   parseArrayComplex(subtree, tvb, pOffset, "OutputArguments", parseVariant);\r
1472 }\r
1473 \r
1474 gint ett_opcua_DataChangeFilter = -1;\r
1475 void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1476 {\r
1477   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DataChangeFilter", szFieldName);\r
1478   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DataChangeFilter);\r
1479   /* parse base class members */ 
1480   parseMonitoringFilter(subtree, tvb, pOffset, "[MonitoringFilter]");
1481   /* parse additional members */
1482   parseDataChangeTrigger(subtree, tvb, pOffset);
1483   parseUInt32(subtree, tvb, pOffset, hf_opcua_DeadbandType);
1484   parseDouble(subtree, tvb, pOffset, hf_opcua_DeadbandValue);\r
1485 }\r
1486 \r
1487 gint ett_opcua_MonitoringFilterResult = -1;\r
1488 void parseMonitoringFilterResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1489 {\r
1490   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoringFilterResult", szFieldName);\r
1491   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoringFilterResult);\r
1492  \r
1493 }\r
1494 \r
1495 gint ett_opcua_EventFilterResult = -1;\r
1496 void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1497 {\r
1498   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventFilterResult", szFieldName);\r
1499   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventFilterResult);\r
1500   /* parse base class members */ 
1501   parseMonitoringFilterResult(subtree, tvb, pOffset, "[MonitoringFilterResult]");
1502   /* parse additional members */
1503   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SelectClauseResults, parseStatusCode);
1504   parseArrayComplex(subtree, tvb, pOffset, "SelectClauseDiagnosticInfos", parseDiagnosticInfo);
1505   parseContentFilterResult(subtree, tvb, pOffset, "WhereClauseResult");\r
1506 }\r
1507 \r
1508 gint ett_opcua_MonitoringAttributes = -1;\r
1509 void parseMonitoringAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1510 {\r
1511   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoringAttributes", szFieldName);\r
1512   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoringAttributes);\r
1513
1514   parseUInt32(subtree, tvb, pOffset, hf_opcua_ClientHandle);
1515   parseInt32(subtree, tvb, pOffset, hf_opcua_SamplingInterval);
1516   parseExtensionObject(subtree, tvb, pOffset, "Filter");
1517   parseUInt32(subtree, tvb, pOffset, hf_opcua_QueueSize);
1518   parseBoolean(subtree, tvb, pOffset, hf_opcua_DiscardOldest);\r
1519 }\r
1520 \r
1521 gint ett_opcua_MonitoredItemCreateRequest = -1;\r
1522 void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1523 {\r
1524   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemCreateRequest", szFieldName);\r
1525   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemCreateRequest);\r
1526
1527   parseReadValueId(subtree, tvb, pOffset, "ItemToMonitor");
1528   parseMonitoringMode(subtree, tvb, pOffset);
1529   parseMonitoringAttributes(subtree, tvb, pOffset, "RequestedAttributes");\r
1530 }\r
1531 \r
1532 gint ett_opcua_MonitoredItemCreateResult = -1;\r
1533 void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1534 {\r
1535   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemCreateResult", szFieldName);\r
1536   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemCreateResult);\r
1537
1538   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1539   parseUInt32(subtree, tvb, pOffset, hf_opcua_MonitoredItemId);
1540   parseInt32(subtree, tvb, pOffset, hf_opcua_RevisedSamplingInterval);
1541   parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedQueueSize);
1542   parseExtensionObject(subtree, tvb, pOffset, "FilterResult");\r
1543 }\r
1544 \r
1545 gint ett_opcua_MonitoredItemModifyRequest = -1;\r
1546 void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1547 {\r
1548   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemModifyRequest", szFieldName);\r
1549   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemModifyRequest);\r
1550
1551   parseUInt32(subtree, tvb, pOffset, hf_opcua_MonitorItemId);
1552   parseMonitoringAttributes(subtree, tvb, pOffset, "RequestedAttributes");\r
1553 }\r
1554 \r
1555 gint ett_opcua_MonitoredItemModifyResult = -1;\r
1556 void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1557 {\r
1558   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemModifyResult", szFieldName);\r
1559   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemModifyResult);\r
1560
1561   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1562   parseInt32(subtree, tvb, pOffset, hf_opcua_RevisedSamplingInterval);
1563   parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedQueueSize);
1564   parseExtensionObject(subtree, tvb, pOffset, "FilterResult");\r
1565 }\r
1566 \r
1567 gint ett_opcua_SubscriptionAcknowledgement = -1;\r
1568 void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1569 {\r
1570   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SubscriptionAcknowledgement", szFieldName);\r
1571   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SubscriptionAcknowledgement);\r
1572
1573   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
1574   parseUInt32(subtree, tvb, pOffset, hf_opcua_SequenceNumber);\r
1575 }\r
1576 \r
1577 gint ett_opcua_NotificationMessage = -1;\r
1578 void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1579 {\r
1580   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NotificationMessage", szFieldName);\r
1581   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NotificationMessage);\r
1582
1583   parseUInt32(subtree, tvb, pOffset, hf_opcua_SequenceNumber);
1584   parseDateTime(subtree, tvb, pOffset, hf_opcua_PublishTime);
1585   parseArrayComplex(subtree, tvb, pOffset, "NotificationData", parseExtensionObject);\r
1586 }\r
1587 \r
1588 gint ett_opcua_MonitoredItemNotification = -1;\r
1589 void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1590 {\r
1591   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemNotification", szFieldName);\r
1592   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemNotification);\r
1593
1594   parseUInt32(subtree, tvb, pOffset, hf_opcua_ClientHandle);
1595   parseDataValue(subtree, tvb, pOffset, "Value");\r
1596 }\r
1597 \r
1598 gint ett_opcua_DataChangeNotification = -1;\r
1599 void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1600 {\r
1601   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DataChangeNotification", szFieldName);\r
1602   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DataChangeNotification);\r
1603
1604   parseArrayComplex(subtree, tvb, pOffset, "MonitoredItems", parseMonitoredItemNotification);
1605   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
1606 }\r
1607 \r
1608 gint ett_opcua_TransferResult = -1;\r
1609 void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)\r
1610 {\r
1611   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : TransferResult", szFieldName);\r
1612   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferResult);\r
1613
1614   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1615   parseArraySimple(subtree, tvb, pOffset, hf_opcua_AvailableSequenceNumbersRanges, parseString);\r
1616 }\r
1617
1618 /** Setup protocol subtree array */
1619 static gint *ett[] =
1620 {
1621   &ett_opcua_ReferenceNode,
1622   &ett_opcua_Node,
1623   &ett_opcua_ObjectNode,
1624   &ett_opcua_ObjectTypeNode,
1625   &ett_opcua_VariableNode,
1626   &ett_opcua_VariableTypeNode,
1627   &ett_opcua_ReferenceTypeNode,
1628   &ett_opcua_MethodNode,
1629   &ett_opcua_ViewNode,
1630   &ett_opcua_DataTypeNode,
1631   &ett_opcua_UriTableEntry,
1632   &ett_opcua_NodeSet,
1633   &ett_opcua_Argument,
1634   &ett_opcua_Status,
1635   &ett_opcua_BaseEvent,
1636   &ett_opcua_SecurityPolicy,
1637   &ett_opcua_UserTokenPolicy,
1638   &ett_opcua_ServerDescription,
1639   &ett_opcua_EndpointDescription,
1640   &ett_opcua_EndpointConfiguration,
1641   &ett_opcua_UserIdentityToken,
1642   &ett_opcua_UserNameIdentityToken,
1643   &ett_opcua_X509IdentityToken,
1644   &ett_opcua_WssIdentityToken,
1645   &ett_opcua_SupportedProfile,
1646   &ett_opcua_BuildInfo,
1647   &ett_opcua_SoftwareCertificate,
1648   &ett_opcua_SignedSoftwareCertificate,
1649   &ett_opcua_NodeAttributes,
1650   &ett_opcua_ObjectAttributes,
1651   &ett_opcua_ObjectTypeAttributes,
1652   &ett_opcua_VariableAttributes,
1653   &ett_opcua_VariableTypeAttributes,
1654   &ett_opcua_ReferenceTypeAttributes,
1655   &ett_opcua_MethodAttributes,
1656   &ett_opcua_ViewAttributes,
1657   &ett_opcua_AddNodesItem,
1658   &ett_opcua_AddReferencesItem,
1659   &ett_opcua_DeleteNodesItem,
1660   &ett_opcua_DeleteReferencesItem,
1661   &ett_opcua_RedundantServerDataType,
1662   &ett_opcua_SamplingRateDiagnosticsDataType,
1663   &ett_opcua_ServerDiagnosticsSummaryDataType,
1664   &ett_opcua_ServerStatusDataType,
1665   &ett_opcua_ServiceCounterDataType,
1666   &ett_opcua_SessionDiagnosticsDataType,
1667   &ett_opcua_SessionSecurityDiagnosticsDataType,
1668   &ett_opcua_SubscriptionDiagnosticsDataType,
1669   &ett_opcua_Range,
1670   &ett_opcua_EUInformation,
1671   &ett_opcua_Annotation,
1672   &ett_opcua_BaseStructureDataType,
1673   &ett_opcua_DerivedStructureDataType,
1674   &ett_opcua_ScalarValuesDataType,
1675   &ett_opcua_ArrayValuesDataType,
1676   &ett_opcua_RequestHeader,
1677   &ett_opcua_ResponseHeader,
1678   &ett_opcua_ServiceFault,
1679   &ett_opcua_ComplexTestType,
1680   &ett_opcua_BaseTestType,
1681   &ett_opcua_DerivedTestType,
1682   &ett_opcua_ScalarTestType,
1683   &ett_opcua_ArrayTestType,
1684   &ett_opcua_CompositeTestType,
1685   &ett_opcua_RegisteredServer,
1686   &ett_opcua_ChannelSecurityToken,
1687   &ett_opcua_SignatureData,
1688   &ett_opcua_AddNodesResult,
1689   &ett_opcua_BrowsePropertiesPropertyResult,
1690   &ett_opcua_BrowsePropertiesResult,
1691   &ett_opcua_ReferenceDescription,
1692   &ett_opcua_ViewDescription,
1693   &ett_opcua_BrowsePath,
1694   &ett_opcua_TranslateBrowsePathResult,
1695   &ett_opcua_AttributeDescription,
1696   &ett_opcua_NodeTypeDescription,
1697   &ett_opcua_QueryDataSet,
1698   &ett_opcua_NodeReference,
1699   &ett_opcua_ContentFilterElement,
1700   &ett_opcua_ContentFilter,
1701   &ett_opcua_FilterOperand,
1702   &ett_opcua_ElementOperand,
1703   &ett_opcua_LiteralOperand,
1704   &ett_opcua_AttributeOperand,
1705   &ett_opcua_PropertyOperand,
1706   &ett_opcua_ContentFilterResult,
1707   &ett_opcua_QueryResult,
1708   &ett_opcua_ReadValueId,
1709   &ett_opcua_HistoryReadValueId,
1710   &ett_opcua_HistoryReadResult,
1711   &ett_opcua_MonitoringFilter,
1712   &ett_opcua_EventFilter,
1713   &ett_opcua_ReadEventDetails,
1714   &ett_opcua_ReadRawModifiedDetails,
1715   &ett_opcua_ReadProcessedDetails,
1716   &ett_opcua_ReadAtTimeDetails,
1717   &ett_opcua_HistoryData,
1718   &ett_opcua_EventFieldList,
1719   &ett_opcua_EventNotification,
1720   &ett_opcua_HistoryEvent,
1721   &ett_opcua_WriteValue,
1722   &ett_opcua_InsertReplaceDetails,
1723   &ett_opcua_InsertEventDetails,
1724   &ett_opcua_DeleteRawModifiedDetails,
1725   &ett_opcua_DeleteAtTimeDetails,
1726   &ett_opcua_DeleteEventDetails,
1727   &ett_opcua_HistoryUpdateResult,
1728   &ett_opcua_CallRequestItem,
1729   &ett_opcua_CallResultItem,
1730   &ett_opcua_DataChangeFilter,
1731   &ett_opcua_MonitoringFilterResult,
1732   &ett_opcua_EventFilterResult,
1733   &ett_opcua_MonitoringAttributes,
1734   &ett_opcua_MonitoredItemCreateRequest,
1735   &ett_opcua_MonitoredItemCreateResult,
1736   &ett_opcua_MonitoredItemModifyRequest,
1737   &ett_opcua_MonitoredItemModifyResult,
1738   &ett_opcua_SubscriptionAcknowledgement,
1739   &ett_opcua_NotificationMessage,
1740   &ett_opcua_MonitoredItemNotification,
1741   &ett_opcua_DataChangeNotification,
1742   &ett_opcua_TransferResult,
1743 };
1744
1745 void registerComplexTypes()
1746 {
1747   proto_register_subtree_array(ett, array_length(ett));
1748 }
1749