Make files more generic.
[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 <glib.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
36 gint ett_opcua_ReferenceNode = -1;
37 void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
38 {
39   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceNode", szFieldName);
40   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceNode);
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");
46 }
47
48 gint ett_opcua_Node = -1;
49 void parseNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
50 {
51   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Node", szFieldName);
52   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Node);
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);
60 }
61
62 gint ett_opcua_ObjectNode = -1;
63 void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
64 {
65   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectNode", szFieldName);
66   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectNode);
67   /* parse base class members */ 
68   parseNode(subtree, tvb, pOffset, "[Node]");
69   /* parse additional members */
70   parseByte(subtree, tvb, pOffset, hf_opcua_EventNotifier);
71 }
72
73 gint ett_opcua_ObjectTypeNode = -1;
74 void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
75 {
76   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectTypeNode", szFieldName);
77   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectTypeNode);
78   /* parse base class members */ 
79   parseNode(subtree, tvb, pOffset, "[Node]");
80   /* parse additional members */
81   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);
82 }
83
84 gint ett_opcua_VariableNode = -1;
85 void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
86 {
87   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableNode", szFieldName);
88   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableNode);
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);
99 }
100
101 gint ett_opcua_VariableTypeNode = -1;
102 void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
103 {
104   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableTypeNode", szFieldName);
105   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableTypeNode);
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);
113 }
114
115 gint ett_opcua_ReferenceTypeNode = -1;
116 void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
117 {
118   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceTypeNode", szFieldName);
119   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceTypeNode);
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");
126 }
127
128 gint ett_opcua_MethodNode = -1;
129 void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
130 {
131   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MethodNode", szFieldName);
132   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MethodNode);
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);
138 }
139
140 gint ett_opcua_ViewNode = -1;
141 void parseViewNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
142 {
143   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ViewNode", szFieldName);
144   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ViewNode);
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);
150 }
151
152 gint ett_opcua_DataTypeNode = -1;
153 void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
154 {
155   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DataTypeNode", szFieldName);
156   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DataTypeNode);
157   /* parse base class members */ 
158   parseNode(subtree, tvb, pOffset, "[Node]");
159   /* parse additional members */
160   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);
161 }
162
163 gint ett_opcua_UriTableEntry = -1;
164 void parseUriTableEntry(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
165 {
166   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UriTableEntry", szFieldName);
167   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UriTableEntry);
168
169   parseUInt32(subtree, tvb, pOffset, hf_opcua_Index);
170   parseString(subtree, tvb, pOffset, hf_opcua_Uri);
171 }
172
173 gint ett_opcua_NodeSet = -1;
174 void parseNodeSet(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
175 {
176   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeSet", szFieldName);
177   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeSet);
178
179   parseArrayComplex(subtree, tvb, pOffset, "NamespaceUris", parseUriTableEntry);
180   parseArrayComplex(subtree, tvb, pOffset, "ServerUris", parseUriTableEntry);
181   parseArrayComplex(subtree, tvb, pOffset, "Nodes", parseExtensionObject);
182 }
183
184 gint ett_opcua_Argument = -1;
185 void parseArgument(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
186 {
187   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Argument", szFieldName);
188   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Argument);
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");
194 }
195
196 gint ett_opcua_Status = -1;
197 void parseStatus(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
198 {
199   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Status", szFieldName);
200   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Status);
201
202   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
203   parseDiagnosticInfo(subtree, tvb, pOffset, "DiagnosticInfo");
204 }
205
206 gint ett_opcua_BaseEvent = -1;
207 void parseBaseEvent(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
208 {
209   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BaseEvent", szFieldName);
210   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BaseEvent);
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);
220 }
221
222 gint ett_opcua_SecurityPolicy = -1;
223 void parseSecurityPolicy(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
224 {
225   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SecurityPolicy", szFieldName);
226   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SecurityPolicy);
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);
242 }
243
244 gint ett_opcua_UserTokenPolicy = -1;
245 void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
246 {
247   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UserTokenPolicy", szFieldName);
248   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UserTokenPolicy);
249
250   parseUserTokenType(subtree, tvb, pOffset);
251   parseString(subtree, tvb, pOffset, hf_opcua_IssuerType);
252   parseString(subtree, tvb, pOffset, hf_opcua_IssuerUrl);
253 }
254
255 gint ett_opcua_ServerDescription = -1;
256 void parseServerDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
257 {
258   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServerDescription", szFieldName);
259   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServerDescription);
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);
265 }
266
267 gint ett_opcua_EndpointDescription = -1;
268 void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
269 {
270   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EndpointDescription", szFieldName);
271   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EndpointDescription);
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);
280 }
281
282 gint ett_opcua_EndpointConfiguration = -1;
283 void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
284 {
285   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EndpointConfiguration", szFieldName);
286   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EndpointConfiguration);
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);
294 }
295
296 gint ett_opcua_UserIdentityToken = -1;
297 void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset _U_, char *szFieldName)
298 {
299   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UserIdentityToken", szFieldName);
300   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UserIdentityToken);
301   subtree = 0; 
302 }
303
304 gint ett_opcua_UserNameIdentityToken = -1;
305 void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
306 {
307   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : UserNameIdentityToken", szFieldName);
308   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UserNameIdentityToken);
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);
315 }
316
317 gint ett_opcua_X509IdentityToken = -1;
318 void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
319 {
320   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : X509IdentityToken", szFieldName);
321   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_X509IdentityToken);
322   /* parse base class members */ 
323   parseUserIdentityToken(subtree, tvb, pOffset, "[UserIdentityToken]");
324   /* parse additional members */
325   parseByteString(subtree, tvb, pOffset, hf_opcua_CertificateData);
326 }
327
328 gint ett_opcua_WssIdentityToken = -1;
329 void parseWssIdentityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
330 {
331   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : WssIdentityToken", szFieldName);
332   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WssIdentityToken);
333   /* parse base class members */ 
334   parseUserIdentityToken(subtree, tvb, pOffset, "[UserIdentityToken]");
335   /* parse additional members */
336   parseXmlElement(subtree, tvb, pOffset, hf_opcua_TokenData);
337 }
338
339 gint ett_opcua_SupportedProfile = -1;
340 void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
341 {
342   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SupportedProfile", szFieldName);
343   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SupportedProfile);
344
345   parseString(subtree, tvb, pOffset, hf_opcua_ProfileUri);
346   parseString(subtree, tvb, pOffset, hf_opcua_ProfileName);
347   parseComplianceLevel(subtree, tvb, pOffset);
348 }
349
350 gint ett_opcua_BuildInfo = -1;
351 void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
352 {
353   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BuildInfo", szFieldName);
354   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BuildInfo);
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);
362 }
363
364 gint ett_opcua_SoftwareCertificate = -1;
365 void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
366 {
367   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SoftwareCertificate", szFieldName);
368   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SoftwareCertificate);
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);
378 }
379
380 gint ett_opcua_SignedSoftwareCertificate = -1;
381 void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
382 {
383   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SignedSoftwareCertificate", szFieldName);
384   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SignedSoftwareCertificate);
385
386   parseByteString(subtree, tvb, pOffset, hf_opcua_CertificateData);
387   parseByteString(subtree, tvb, pOffset, hf_opcua_IssuerSignature);
388 }
389
390 gint ett_opcua_NodeAttributes = -1;
391 void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
392 {
393   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeAttributes", szFieldName);
394   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeAttributes);
395
396   parseLocalizedText(subtree, tvb, pOffset, "DisplayName");
397   parseLocalizedText(subtree, tvb, pOffset, "Description");
398 }
399
400 gint ett_opcua_ObjectAttributes = -1;
401 void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
402 {
403   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectAttributes", szFieldName);
404   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectAttributes);
405   /* parse base class members */ 
406   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
407   /* parse additional members */
408   parseByte(subtree, tvb, pOffset, hf_opcua_EventNotifier);
409 }
410
411 gint ett_opcua_ObjectTypeAttributes = -1;
412 void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
413 {
414   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ObjectTypeAttributes", szFieldName);
415   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ObjectTypeAttributes);
416   /* parse base class members */ 
417   parseNodeAttributes(subtree, tvb, pOffset, "[NodeAttributes]");
418   /* parse additional members */
419   parseBoolean(subtree, tvb, pOffset, hf_opcua_IsAbstract);
420 }
421
422 gint ett_opcua_VariableAttributes = -1;
423 void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
424 {
425   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableAttributes", szFieldName);
426   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableAttributes);
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);
437 }
438
439 gint ett_opcua_VariableTypeAttributes = -1;
440 void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
441 {
442   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : VariableTypeAttributes", szFieldName);
443   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_VariableTypeAttributes);
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);
451 }
452
453 gint ett_opcua_ReferenceTypeAttributes = -1;
454 void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
455 {
456   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceTypeAttributes", szFieldName);
457   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceTypeAttributes);
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");
464 }
465
466 gint ett_opcua_MethodAttributes = -1;
467 void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
468 {
469   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MethodAttributes", szFieldName);
470   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MethodAttributes);
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);
476 }
477
478 gint ett_opcua_ViewAttributes = -1;
479 void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
480 {
481   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ViewAttributes", szFieldName);
482   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ViewAttributes);
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);
488 }
489
490 gint ett_opcua_AddNodesItem = -1;
491 void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
492 {
493   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AddNodesItem", szFieldName);
494   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesItem);
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");
503 }
504
505 gint ett_opcua_AddReferencesItem = -1;
506 void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
507 {
508   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AddReferencesItem", szFieldName);
509   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesItem);
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);
517 }
518
519 gint ett_opcua_DeleteNodesItem = -1;
520 void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
521 {
522   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteNodesItem", szFieldName);
523   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesItem);
524
525   parseNodeId(subtree, tvb, pOffset, "NodeId");
526   parseBoolean(subtree, tvb, pOffset, hf_opcua_DeleteTargetReferences);
527 }
528
529 gint ett_opcua_DeleteReferencesItem = -1;
530 void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
531 {
532   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteReferencesItem", szFieldName);
533   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesItem);
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");
540 }
541
542 gint ett_opcua_RedundantServerDataType = -1;
543 void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
544 {
545   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : RedundantServerDataType", szFieldName);
546   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RedundantServerDataType);
547
548   parseString(subtree, tvb, pOffset, hf_opcua_ServerId);
549   parseSByte(subtree, tvb, pOffset, hf_opcua_ServiceLevel);
550   parseServerState(subtree, tvb, pOffset);
551 }
552
553 gint ett_opcua_SamplingRateDiagnosticsDataType = -1;
554 void parseSamplingRateDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
555 {
556   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SamplingRateDiagnosticsDataType", szFieldName);
557   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SamplingRateDiagnosticsDataType);
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);
564 }
565
566 gint ett_opcua_ServerDiagnosticsSummaryDataType = -1;
567 void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
568 {
569   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServerDiagnosticsSummaryDataType", szFieldName);
570   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServerDiagnosticsSummaryDataType);
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);
585 }
586
587 gint ett_opcua_ServerStatusDataType = -1;
588 void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
589 {
590   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServerStatusDataType", szFieldName);
591   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServerStatusDataType);
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");
597 }
598
599 gint ett_opcua_ServiceCounterDataType = -1;
600 void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
601 {
602   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServiceCounterDataType", szFieldName);
603   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServiceCounterDataType);
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);
608 }
609
610 gint ett_opcua_SessionDiagnosticsDataType = -1;
611 void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
612 {
613   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SessionDiagnosticsDataType", szFieldName);
614   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SessionDiagnosticsDataType);
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");
658 }
659
660 gint ett_opcua_SessionSecurityDiagnosticsDataType = -1;
661 void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
662 {
663   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SessionSecurityDiagnosticsDataType", szFieldName);
664   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SessionSecurityDiagnosticsDataType);
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);
673 }
674
675 gint ett_opcua_SubscriptionDiagnosticsDataType = -1;
676 void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
677 {
678   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SubscriptionDiagnosticsDataType", szFieldName);
679   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SubscriptionDiagnosticsDataType);
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);
702 }
703
704 gint ett_opcua_Range = -1;
705 void parseRange(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
706 {
707   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Range", szFieldName);
708   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Range);
709
710   parseDouble(subtree, tvb, pOffset, hf_opcua_Low);
711   parseDouble(subtree, tvb, pOffset, hf_opcua_High);
712 }
713
714 gint ett_opcua_EUInformation = -1;
715 void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
716 {
717   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EUInformation", szFieldName);
718   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EUInformation);
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");
724 }
725
726 gint ett_opcua_Annotation = -1;
727 void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
728 {
729   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : Annotation", szFieldName);
730   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_Annotation);
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);
736 }
737
738 gint ett_opcua_BaseStructureDataType = -1;
739 void parseBaseStructureDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
740 {
741   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BaseStructureDataType", szFieldName);
742   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BaseStructureDataType);
743
744   parseInt32(subtree, tvb, pOffset, hf_opcua_Id);
745   parseString(subtree, tvb, pOffset, hf_opcua_Name);
746 }
747
748 gint ett_opcua_DerivedStructureDataType = -1;
749 void parseDerivedStructureDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
750 {
751   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DerivedStructureDataType", szFieldName);
752   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DerivedStructureDataType);
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);
758 }
759
760 gint ett_opcua_ScalarValuesDataType = -1;
761 void parseScalarValuesDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
762 {
763   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ScalarValuesDataType", szFieldName);
764   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ScalarValuesDataType);
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);
793 }
794
795 gint ett_opcua_ArrayValuesDataType = -1;
796 void parseArrayValuesDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
797 {
798   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ArrayValuesDataType", szFieldName);
799   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ArrayValuesDataType);
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);
827 }
828
829 gint ett_opcua_RequestHeader = -1;
830 void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
831 {
832   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : RequestHeader", szFieldName);
833   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RequestHeader);
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");
842 }
843
844 gint ett_opcua_ResponseHeader = -1;
845 void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
846 {
847   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ResponseHeader", szFieldName);
848   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ResponseHeader);
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");
857 }
858
859 gint ett_opcua_ServiceFault = -1;
860 void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
861 {
862   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ServiceFault", szFieldName);
863   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServiceFault);
864
865   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
866 }
867
868 gint ett_opcua_ComplexTestType = -1;
869 void parseComplexTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
870 {
871   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ComplexTestType", szFieldName);
872   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ComplexTestType);
873
874   parseDateTime(subtree, tvb, pOffset, hf_opcua_Value1);
875   parseArrayEnum(subtree, tvb, pOffset, parseEnumeratedTestType);
876 }
877
878 gint ett_opcua_BaseTestType = -1;
879 void parseBaseTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
880 {
881   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BaseTestType", szFieldName);
882   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BaseTestType);
883
884   parseDateTime(subtree, tvb, pOffset, hf_opcua_Value1);
885 }
886
887 gint ett_opcua_DerivedTestType = -1;
888 void parseDerivedTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
889 {
890   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DerivedTestType", szFieldName);
891   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DerivedTestType);
892   /* parse base class members */ 
893   parseBaseTestType(subtree, tvb, pOffset, "[BaseTestType]");
894   /* parse additional members */
895   parseDateTime(subtree, tvb, pOffset, hf_opcua_Value2);
896 }
897
898 gint ett_opcua_ScalarTestType = -1;
899 void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
900 {
901   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ScalarTestType", szFieldName);
902   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ScalarTestType);
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);
931 }
932
933 gint ett_opcua_ArrayTestType = -1;
934 void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
935 {
936   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ArrayTestType", szFieldName);
937   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ArrayTestType);
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);
965 }
966
967 gint ett_opcua_CompositeTestType = -1;
968 void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
969 {
970   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : CompositeTestType", szFieldName);
971   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CompositeTestType);
972
973   parseScalarTestType(subtree, tvb, pOffset, "Input1");
974   parseArrayTestType(subtree, tvb, pOffset, "Input2");
975 }
976
977 gint ett_opcua_RegisteredServer = -1;
978 void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
979 {
980   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : RegisteredServer", szFieldName);
981   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisteredServer);
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);
989 }
990
991 gint ett_opcua_ChannelSecurityToken = -1;
992 void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
993 {
994   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ChannelSecurityToken", szFieldName);
995   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ChannelSecurityToken);
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);
1001 }
1002
1003 gint ett_opcua_SignatureData = -1;
1004 void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1005 {
1006   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SignatureData", szFieldName);
1007   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SignatureData);
1008
1009   parseString(subtree, tvb, pOffset, hf_opcua_Algorithm);
1010   parseByteString(subtree, tvb, pOffset, hf_opcua_Signature);
1011 }
1012
1013 gint ett_opcua_AddNodesResult = -1;
1014 void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1015 {
1016   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AddNodesResult", szFieldName);
1017   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesResult);
1018
1019   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1020   parseNodeId(subtree, tvb, pOffset, "AddedNodeId");
1021 }
1022
1023 gint ett_opcua_BrowsePropertiesPropertyResult = -1;
1024 void parseBrowsePropertiesPropertyResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1025 {
1026   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BrowsePropertiesPropertyResult", szFieldName);
1027   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePropertiesPropertyResult);
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);
1033 }
1034
1035 gint ett_opcua_BrowsePropertiesResult = -1;
1036 void parseBrowsePropertiesResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1037 {
1038   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BrowsePropertiesResult", szFieldName);
1039   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePropertiesResult);
1040
1041   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1042   parseArrayComplex(subtree, tvb, pOffset, "PropertyResults", parseBrowsePropertiesPropertyResult);
1043   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
1044 }
1045
1046 gint ett_opcua_ReferenceDescription = -1;
1047 void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1048 {
1049   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReferenceDescription", szFieldName);
1050   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceDescription);
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");
1060 }
1061
1062 gint ett_opcua_ViewDescription = -1;
1063 void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1064 {
1065   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ViewDescription", szFieldName);
1066   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ViewDescription);
1067
1068   parseNodeId(subtree, tvb, pOffset, "ViewId");
1069   parseDateTime(subtree, tvb, pOffset, hf_opcua_Timestamp);
1070   parseInt32(subtree, tvb, pOffset, hf_opcua_ViewVersion);
1071 }
1072
1073 gint ett_opcua_BrowsePath = -1;
1074 void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1075 {
1076   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : BrowsePath", szFieldName);
1077   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePath);
1078
1079   parseNodeId(subtree, tvb, pOffset, "StartingNode");
1080   parseString(subtree, tvb, pOffset, hf_opcua_RelativePath);
1081 }
1082
1083 gint ett_opcua_TranslateBrowsePathResult = -1;
1084 void parseTranslateBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1085 {
1086   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : TranslateBrowsePathResult", szFieldName);
1087   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathResult);
1088
1089   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1090   parseArrayComplex(subtree, tvb, pOffset, "MatchingNodeIds", parseNodeId);
1091 }
1092
1093 gint ett_opcua_AttributeDescription = -1;
1094 void parseAttributeDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1095 {
1096   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AttributeDescription", szFieldName);
1097   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AttributeDescription);
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);
1102 }
1103
1104 gint ett_opcua_NodeTypeDescription = -1;
1105 void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1106 {
1107   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeTypeDescription", szFieldName);
1108   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeTypeDescription);
1109
1110   parseNodeId(subtree, tvb, pOffset, "TypeDefinitionNode");
1111   parseBoolean(subtree, tvb, pOffset, hf_opcua_IncludeSubTypes);
1112   parseArrayComplex(subtree, tvb, pOffset, "AttributesToReturn", parseAttributeDescription);
1113 }
1114
1115 gint ett_opcua_QueryDataSet = -1;
1116 void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1117 {
1118   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : QueryDataSet", szFieldName);
1119   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryDataSet);
1120
1121   parseExpandedNodeId(subtree, tvb, pOffset, "NodeId");
1122   parseNodeId(subtree, tvb, pOffset, "TypeDefinitionNodeId");
1123   parseArrayComplex(subtree, tvb, pOffset, "Values", parseVariant);
1124 }
1125
1126 gint ett_opcua_NodeReference = -1;
1127 void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1128 {
1129   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NodeReference", szFieldName);
1130   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NodeReference);
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);
1136 }
1137
1138 gint ett_opcua_ContentFilterElement = -1;
1139 void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1140 {
1141   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ContentFilterElement", szFieldName);
1142   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ContentFilterElement);
1143
1144   parseFilterOperator(subtree, tvb, pOffset);
1145   parseArrayComplex(subtree, tvb, pOffset, "FilterOperands", parseExtensionObject);
1146 }
1147
1148 gint ett_opcua_ContentFilter = -1;
1149 void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1150 {
1151   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ContentFilter", szFieldName);
1152   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ContentFilter);
1153
1154   parseArrayComplex(subtree, tvb, pOffset, "Elements", parseContentFilterElement);
1155 }
1156
1157 gint ett_opcua_FilterOperand = -1;
1158 void parseFilterOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset _U_, char *szFieldName)
1159 {
1160   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : FilterOperand", szFieldName);
1161   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FilterOperand);
1162   subtree = 0; 
1163 }
1164
1165 gint ett_opcua_ElementOperand = -1;
1166 void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1167 {
1168   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ElementOperand", szFieldName);
1169   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ElementOperand);
1170   /* parse base class members */ 
1171   parseFilterOperand(subtree, tvb, pOffset, "[FilterOperand]");
1172   /* parse additional members */
1173   parseUInt32(subtree, tvb, pOffset, hf_opcua_Index);
1174 }
1175
1176 gint ett_opcua_LiteralOperand = -1;
1177 void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1178 {
1179   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : LiteralOperand", szFieldName);
1180   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_LiteralOperand);
1181   /* parse base class members */ 
1182   parseFilterOperand(subtree, tvb, pOffset, "[FilterOperand]");
1183   /* parse additional members */
1184   parseVariant(subtree, tvb, pOffset, "Value");
1185 }
1186
1187 gint ett_opcua_AttributeOperand = -1;
1188 void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1189 {
1190   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : AttributeOperand", szFieldName);
1191   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AttributeOperand);
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);
1199 }
1200
1201 gint ett_opcua_PropertyOperand = -1;
1202 void parsePropertyOperand(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1203 {
1204   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : PropertyOperand", szFieldName);
1205   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PropertyOperand);
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);
1213 }
1214
1215 gint ett_opcua_ContentFilterResult = -1;
1216 void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1217 {
1218   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ContentFilterResult", szFieldName);
1219   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ContentFilterResult);
1220
1221   parseStatusCode(subtree, tvb, pOffset, hf_opcua_Result);
1222   parseDiagnosticInfo(subtree, tvb, pOffset, "DiagnosticInfo");
1223   parseUInt32(subtree, tvb, pOffset, hf_opcua_IndexOfInvalidElement);
1224 }
1225
1226 gint ett_opcua_QueryResult = -1;
1227 void parseQueryResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1228 {
1229   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : QueryResult", szFieldName);
1230   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryResult);
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);
1235 }
1236
1237 gint ett_opcua_ReadValueId = -1;
1238 void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1239 {
1240   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadValueId", szFieldName);
1241   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadValueId);
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");
1247 }
1248
1249 gint ett_opcua_HistoryReadValueId = -1;
1250 void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1251 {
1252   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryReadValueId", szFieldName);
1253   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadValueId);
1254
1255   parseNodeId(subtree, tvb, pOffset, "NodeId");
1256   parseQualifiedName(subtree, tvb, pOffset, "Encoding");
1257   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
1258 }
1259
1260 gint ett_opcua_HistoryReadResult = -1;
1261 void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1262 {
1263   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryReadResult", szFieldName);
1264   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadResult);
1265
1266   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1267   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
1268   parseExtensionObject(subtree, tvb, pOffset, "HistoryData");
1269 }
1270
1271 gint ett_opcua_MonitoringFilter = -1;
1272 void parseMonitoringFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset _U_, char *szFieldName)
1273 {
1274   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoringFilter", szFieldName);
1275   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoringFilter);
1276   subtree = 0; 
1277 }
1278
1279 gint ett_opcua_EventFilter = -1;
1280 void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1281 {
1282   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventFilter", szFieldName);
1283   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventFilter);
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");
1289 }
1290
1291 gint ett_opcua_ReadEventDetails = -1;
1292 void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1293 {
1294   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadEventDetails", szFieldName);
1295   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadEventDetails);
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");
1301 }
1302
1303 gint ett_opcua_ReadRawModifiedDetails = -1;
1304 void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1305 {
1306   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadRawModifiedDetails", szFieldName);
1307   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadRawModifiedDetails);
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);
1314 }
1315
1316 gint ett_opcua_ReadProcessedDetails = -1;
1317 void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1318 {
1319   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadProcessedDetails", szFieldName);
1320   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadProcessedDetails);
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");
1326 }
1327
1328 gint ett_opcua_ReadAtTimeDetails = -1;
1329 void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1330 {
1331   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : ReadAtTimeDetails", szFieldName);
1332   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadAtTimeDetails);
1333
1334   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ReqTimes, parseDateTime);
1335 }
1336
1337 gint ett_opcua_HistoryData = -1;
1338 void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1339 {
1340   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryData", szFieldName);
1341   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryData);
1342
1343   parseArrayComplex(subtree, tvb, pOffset, "DataValues", parseDataValue);
1344 }
1345
1346 gint ett_opcua_EventFieldList = -1;
1347 void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1348 {
1349   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventFieldList", szFieldName);
1350   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventFieldList);
1351
1352   parseUInt32(subtree, tvb, pOffset, hf_opcua_ClientHandle);
1353   parseArrayComplex(subtree, tvb, pOffset, "EventFields", parseVariant);
1354 }
1355
1356 gint ett_opcua_EventNotification = -1;
1357 void parseEventNotification(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1358 {
1359   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventNotification", szFieldName);
1360   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventNotification);
1361
1362   parseArrayComplex(subtree, tvb, pOffset, "Events", parseEventFieldList);
1363 }
1364
1365 gint ett_opcua_HistoryEvent = -1;
1366 void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1367 {
1368   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryEvent", szFieldName);
1369   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryEvent);
1370
1371   parseArrayComplex(subtree, tvb, pOffset, "Notifications", parseEventNotification);
1372 }
1373
1374 gint ett_opcua_WriteValue = -1;
1375 void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1376 {
1377   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : WriteValue", szFieldName);
1378   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteValue);
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");
1384 }
1385
1386 gint ett_opcua_InsertReplaceDetails = -1;
1387 void parseInsertReplaceDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1388 {
1389   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : InsertReplaceDetails", szFieldName);
1390   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_InsertReplaceDetails);
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");
1396 }
1397
1398 gint ett_opcua_InsertEventDetails = -1;
1399 void parseInsertEventDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1400 {
1401   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : InsertEventDetails", szFieldName);
1402   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_InsertEventDetails);
1403
1404   parseHistoryEvent(subtree, tvb, pOffset, "HistoryEvent");
1405 }
1406
1407 gint ett_opcua_DeleteRawModifiedDetails = -1;
1408 void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1409 {
1410   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteRawModifiedDetails", szFieldName);
1411   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteRawModifiedDetails);
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);
1417 }
1418
1419 gint ett_opcua_DeleteAtTimeDetails = -1;
1420 void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1421 {
1422   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteAtTimeDetails", szFieldName);
1423   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteAtTimeDetails);
1424
1425   parseNodeId(subtree, tvb, pOffset, "NodeId");
1426   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ReqTimes, parseDateTime);
1427 }
1428
1429 gint ett_opcua_DeleteEventDetails = -1;
1430 void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1431 {
1432   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DeleteEventDetails", szFieldName);
1433   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteEventDetails);
1434
1435   parseEventFilter(subtree, tvb, pOffset, "EventFilter");
1436   parseDateTime(subtree, tvb, pOffset, hf_opcua_StartTime);
1437   parseDateTime(subtree, tvb, pOffset, hf_opcua_EndTime);
1438 }
1439
1440 gint ett_opcua_HistoryUpdateResult = -1;
1441 void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1442 {
1443   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : HistoryUpdateResult", szFieldName);
1444   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateResult);
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);
1449 }
1450
1451 gint ett_opcua_CallRequestItem = -1;
1452 void parseCallRequestItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1453 {
1454   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : CallRequestItem", szFieldName);
1455   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallRequestItem);
1456
1457   parseNodeId(subtree, tvb, pOffset, "ObjectId");
1458   parseNodeId(subtree, tvb, pOffset, "MethodId");
1459   parseArrayComplex(subtree, tvb, pOffset, "InputArguments", parseVariant);
1460 }
1461
1462 gint ett_opcua_CallResultItem = -1;
1463 void parseCallResultItem(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1464 {
1465   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : CallResultItem", szFieldName);
1466   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallResultItem);
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);
1472 }
1473
1474 gint ett_opcua_DataChangeFilter = -1;
1475 void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1476 {
1477   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DataChangeFilter", szFieldName);
1478   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DataChangeFilter);
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);
1485 }
1486
1487 gint ett_opcua_MonitoringFilterResult = -1;
1488 void parseMonitoringFilterResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset _U_, char *szFieldName)
1489 {
1490   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoringFilterResult", szFieldName);
1491   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoringFilterResult);
1492   subtree = 0; 
1493 }
1494
1495 gint ett_opcua_EventFilterResult = -1;
1496 void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1497 {
1498   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : EventFilterResult", szFieldName);
1499   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_EventFilterResult);
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");
1506 }
1507
1508 gint ett_opcua_MonitoringAttributes = -1;
1509 void parseMonitoringAttributes(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1510 {
1511   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoringAttributes", szFieldName);
1512   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoringAttributes);
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);
1519 }
1520
1521 gint ett_opcua_MonitoredItemCreateRequest = -1;
1522 void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1523 {
1524   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemCreateRequest", szFieldName);
1525   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemCreateRequest);
1526
1527   parseReadValueId(subtree, tvb, pOffset, "ItemToMonitor");
1528   parseMonitoringMode(subtree, tvb, pOffset);
1529   parseMonitoringAttributes(subtree, tvb, pOffset, "RequestedAttributes");
1530 }
1531
1532 gint ett_opcua_MonitoredItemCreateResult = -1;
1533 void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1534 {
1535   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemCreateResult", szFieldName);
1536   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemCreateResult);
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");
1543 }
1544
1545 gint ett_opcua_MonitoredItemModifyRequest = -1;
1546 void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1547 {
1548   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemModifyRequest", szFieldName);
1549   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemModifyRequest);
1550
1551   parseUInt32(subtree, tvb, pOffset, hf_opcua_MonitorItemId);
1552   parseMonitoringAttributes(subtree, tvb, pOffset, "RequestedAttributes");
1553 }
1554
1555 gint ett_opcua_MonitoredItemModifyResult = -1;
1556 void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1557 {
1558   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemModifyResult", szFieldName);
1559   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemModifyResult);
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");
1565 }
1566
1567 gint ett_opcua_SubscriptionAcknowledgement = -1;
1568 void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1569 {
1570   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : SubscriptionAcknowledgement", szFieldName);
1571   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SubscriptionAcknowledgement);
1572
1573   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
1574   parseUInt32(subtree, tvb, pOffset, hf_opcua_SequenceNumber);
1575 }
1576
1577 gint ett_opcua_NotificationMessage = -1;
1578 void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1579 {
1580   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : NotificationMessage", szFieldName);
1581   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_NotificationMessage);
1582
1583   parseUInt32(subtree, tvb, pOffset, hf_opcua_SequenceNumber);
1584   parseDateTime(subtree, tvb, pOffset, hf_opcua_PublishTime);
1585   parseArrayComplex(subtree, tvb, pOffset, "NotificationData", parseExtensionObject);
1586 }
1587
1588 gint ett_opcua_MonitoredItemNotification = -1;
1589 void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1590 {
1591   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : MonitoredItemNotification", szFieldName);
1592   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_MonitoredItemNotification);
1593
1594   parseUInt32(subtree, tvb, pOffset, hf_opcua_ClientHandle);
1595   parseDataValue(subtree, tvb, pOffset, "Value");
1596 }
1597
1598 gint ett_opcua_DataChangeNotification = -1;
1599 void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1600 {
1601   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : DataChangeNotification", szFieldName);
1602   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DataChangeNotification);
1603
1604   parseArrayComplex(subtree, tvb, pOffset, "MonitoredItems", parseMonitoredItemNotification);
1605   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
1606 }
1607
1608 gint ett_opcua_TransferResult = -1;
1609 void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
1610 {
1611   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "%s : TransferResult", szFieldName);
1612   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferResult);
1613
1614   parseStatusCode(subtree, tvb, pOffset, hf_opcua_StatusCode);
1615   parseArraySimple(subtree, tvb, pOffset, hf_opcua_AvailableSequenceNumbersRanges, parseString);
1616 }
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
1750