nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /******************************************************************************
2 ** Copyright (C) 2006-2015 ascolab GmbH. All Rights Reserved.
3 ** Web: http://www.ascolab.com
4 **
5 ** This program is free software; you can redistribute it and/or
6 ** modify it under the terms of the GNU General Public License
7 ** as published by the Free Software Foundation; either version 2
8 ** of the License, or (at your option) any later version.
9 **
10 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
11 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
12 **
13 ** Project: OpcUa Wireshark Plugin
14 **
15 ** Description: OpcUa Complex Type Parser
16 **
17 ** This file was autogenerated on 13.10.2015.
18 ** DON'T MODIFY THIS FILE!
19 **
20 ******************************************************************************/
21  
22 #include "config.h"
23  
24 #include <epan/packet.h>
25 #include "opcua_complextypeparser.h"
26 #include "opcua_enumparser.h"
27 #include "opcua_simpletypes.h"
28 #include "opcua_hfindeces.h"
29  
30 gint ett_opcua_TrustListDataType = -1;
31 gint ett_opcua_array_TrustListDataType = -1;
32 gint ett_opcua_Node = -1;
33 gint ett_opcua_array_Node = -1;
34 gint ett_opcua_InstanceNode = -1;
35 gint ett_opcua_array_InstanceNode = -1;
36 gint ett_opcua_TypeNode = -1;
37 gint ett_opcua_array_TypeNode = -1;
38 gint ett_opcua_ObjectNode = -1;
39 gint ett_opcua_array_ObjectNode = -1;
40 gint ett_opcua_ObjectTypeNode = -1;
41 gint ett_opcua_array_ObjectTypeNode = -1;
42 gint ett_opcua_VariableNode = -1;
43 gint ett_opcua_array_VariableNode = -1;
44 gint ett_opcua_VariableTypeNode = -1;
45 gint ett_opcua_array_VariableTypeNode = -1;
46 gint ett_opcua_ReferenceTypeNode = -1;
47 gint ett_opcua_array_ReferenceTypeNode = -1;
48 gint ett_opcua_MethodNode = -1;
49 gint ett_opcua_array_MethodNode = -1;
50 gint ett_opcua_ViewNode = -1;
51 gint ett_opcua_array_ViewNode = -1;
52 gint ett_opcua_DataTypeNode = -1;
53 gint ett_opcua_array_DataTypeNode = -1;
54 gint ett_opcua_ReferenceNode = -1;
55 gint ett_opcua_array_ReferenceNode = -1;
56 gint ett_opcua_Argument = -1;
57 gint ett_opcua_array_Argument = -1;
58 gint ett_opcua_EnumValueType = -1;
59 gint ett_opcua_array_EnumValueType = -1;
60 gint ett_opcua_OptionSet = -1;
61 gint ett_opcua_array_OptionSet = -1;
62 gint ett_opcua_TimeZoneDataType = -1;
63 gint ett_opcua_array_TimeZoneDataType = -1;
64 gint ett_opcua_ApplicationDescription = -1;
65 gint ett_opcua_array_ApplicationDescription = -1;
66 gint ett_opcua_RequestHeader = -1;
67 gint ett_opcua_array_RequestHeader = -1;
68 gint ett_opcua_ResponseHeader = -1;
69 gint ett_opcua_array_ResponseHeader = -1;
70 gint ett_opcua_ServerOnNetwork = -1;
71 gint ett_opcua_array_ServerOnNetwork = -1;
72 gint ett_opcua_UserTokenPolicy = -1;
73 gint ett_opcua_array_UserTokenPolicy = -1;
74 gint ett_opcua_EndpointDescription = -1;
75 gint ett_opcua_array_EndpointDescription = -1;
76 gint ett_opcua_RegisteredServer = -1;
77 gint ett_opcua_array_RegisteredServer = -1;
78 gint ett_opcua_MdnsDiscoveryConfiguration = -1;
79 gint ett_opcua_array_MdnsDiscoveryConfiguration = -1;
80 gint ett_opcua_ChannelSecurityToken = -1;
81 gint ett_opcua_array_ChannelSecurityToken = -1;
82 gint ett_opcua_SignedSoftwareCertificate = -1;
83 gint ett_opcua_array_SignedSoftwareCertificate = -1;
84 gint ett_opcua_SignatureData = -1;
85 gint ett_opcua_array_SignatureData = -1;
86 gint ett_opcua_UserIdentityToken = -1;
87 gint ett_opcua_array_UserIdentityToken = -1;
88 gint ett_opcua_AnonymousIdentityToken = -1;
89 gint ett_opcua_array_AnonymousIdentityToken = -1;
90 gint ett_opcua_UserNameIdentityToken = -1;
91 gint ett_opcua_array_UserNameIdentityToken = -1;
92 gint ett_opcua_X509IdentityToken = -1;
93 gint ett_opcua_array_X509IdentityToken = -1;
94 gint ett_opcua_KerberosIdentityToken = -1;
95 gint ett_opcua_array_KerberosIdentityToken = -1;
96 gint ett_opcua_IssuedIdentityToken = -1;
97 gint ett_opcua_array_IssuedIdentityToken = -1;
98 gint ett_opcua_NodeAttributes = -1;
99 gint ett_opcua_array_NodeAttributes = -1;
100 gint ett_opcua_ObjectAttributes = -1;
101 gint ett_opcua_array_ObjectAttributes = -1;
102 gint ett_opcua_VariableAttributes = -1;
103 gint ett_opcua_array_VariableAttributes = -1;
104 gint ett_opcua_MethodAttributes = -1;
105 gint ett_opcua_array_MethodAttributes = -1;
106 gint ett_opcua_ObjectTypeAttributes = -1;
107 gint ett_opcua_array_ObjectTypeAttributes = -1;
108 gint ett_opcua_VariableTypeAttributes = -1;
109 gint ett_opcua_array_VariableTypeAttributes = -1;
110 gint ett_opcua_ReferenceTypeAttributes = -1;
111 gint ett_opcua_array_ReferenceTypeAttributes = -1;
112 gint ett_opcua_DataTypeAttributes = -1;
113 gint ett_opcua_array_DataTypeAttributes = -1;
114 gint ett_opcua_ViewAttributes = -1;
115 gint ett_opcua_array_ViewAttributes = -1;
116 gint ett_opcua_AddNodesItem = -1;
117 gint ett_opcua_array_AddNodesItem = -1;
118 gint ett_opcua_AddNodesResult = -1;
119 gint ett_opcua_array_AddNodesResult = -1;
120 gint ett_opcua_AddReferencesItem = -1;
121 gint ett_opcua_array_AddReferencesItem = -1;
122 gint ett_opcua_DeleteNodesItem = -1;
123 gint ett_opcua_array_DeleteNodesItem = -1;
124 gint ett_opcua_DeleteReferencesItem = -1;
125 gint ett_opcua_array_DeleteReferencesItem = -1;
126 gint ett_opcua_ViewDescription = -1;
127 gint ett_opcua_array_ViewDescription = -1;
128 gint ett_opcua_BrowseDescription = -1;
129 gint ett_opcua_array_BrowseDescription = -1;
130 gint ett_opcua_ReferenceDescription = -1;
131 gint ett_opcua_array_ReferenceDescription = -1;
132 gint ett_opcua_BrowseResult = -1;
133 gint ett_opcua_array_BrowseResult = -1;
134 gint ett_opcua_RelativePathElement = -1;
135 gint ett_opcua_array_RelativePathElement = -1;
136 gint ett_opcua_RelativePath = -1;
137 gint ett_opcua_array_RelativePath = -1;
138 gint ett_opcua_BrowsePath = -1;
139 gint ett_opcua_array_BrowsePath = -1;
140 gint ett_opcua_BrowsePathTarget = -1;
141 gint ett_opcua_array_BrowsePathTarget = -1;
142 gint ett_opcua_BrowsePathResult = -1;
143 gint ett_opcua_array_BrowsePathResult = -1;
144 gint ett_opcua_EndpointConfiguration = -1;
145 gint ett_opcua_array_EndpointConfiguration = -1;
146 gint ett_opcua_SupportedProfile = -1;
147 gint ett_opcua_array_SupportedProfile = -1;
148 gint ett_opcua_SoftwareCertificate = -1;
149 gint ett_opcua_array_SoftwareCertificate = -1;
150 gint ett_opcua_QueryDataDescription = -1;
151 gint ett_opcua_array_QueryDataDescription = -1;
152 gint ett_opcua_NodeTypeDescription = -1;
153 gint ett_opcua_array_NodeTypeDescription = -1;
154 gint ett_opcua_QueryDataSet = -1;
155 gint ett_opcua_array_QueryDataSet = -1;
156 gint ett_opcua_NodeReference = -1;
157 gint ett_opcua_array_NodeReference = -1;
158 gint ett_opcua_ContentFilterElement = -1;
159 gint ett_opcua_array_ContentFilterElement = -1;
160 gint ett_opcua_ContentFilter = -1;
161 gint ett_opcua_array_ContentFilter = -1;
162 gint ett_opcua_ElementOperand = -1;
163 gint ett_opcua_array_ElementOperand = -1;
164 gint ett_opcua_LiteralOperand = -1;
165 gint ett_opcua_array_LiteralOperand = -1;
166 gint ett_opcua_AttributeOperand = -1;
167 gint ett_opcua_array_AttributeOperand = -1;
168 gint ett_opcua_SimpleAttributeOperand = -1;
169 gint ett_opcua_array_SimpleAttributeOperand = -1;
170 gint ett_opcua_ContentFilterElementResult = -1;
171 gint ett_opcua_array_ContentFilterElementResult = -1;
172 gint ett_opcua_ContentFilterResult = -1;
173 gint ett_opcua_array_ContentFilterResult = -1;
174 gint ett_opcua_ParsingResult = -1;
175 gint ett_opcua_array_ParsingResult = -1;
176 gint ett_opcua_ReadValueId = -1;
177 gint ett_opcua_array_ReadValueId = -1;
178 gint ett_opcua_HistoryReadValueId = -1;
179 gint ett_opcua_array_HistoryReadValueId = -1;
180 gint ett_opcua_HistoryReadResult = -1;
181 gint ett_opcua_array_HistoryReadResult = -1;
182 gint ett_opcua_ReadEventDetails = -1;
183 gint ett_opcua_array_ReadEventDetails = -1;
184 gint ett_opcua_ReadRawModifiedDetails = -1;
185 gint ett_opcua_array_ReadRawModifiedDetails = -1;
186 gint ett_opcua_ReadProcessedDetails = -1;
187 gint ett_opcua_array_ReadProcessedDetails = -1;
188 gint ett_opcua_ReadAtTimeDetails = -1;
189 gint ett_opcua_array_ReadAtTimeDetails = -1;
190 gint ett_opcua_HistoryData = -1;
191 gint ett_opcua_array_HistoryData = -1;
192 gint ett_opcua_ModificationInfo = -1;
193 gint ett_opcua_array_ModificationInfo = -1;
194 gint ett_opcua_HistoryModifiedData = -1;
195 gint ett_opcua_array_HistoryModifiedData = -1;
196 gint ett_opcua_HistoryEvent = -1;
197 gint ett_opcua_array_HistoryEvent = -1;
198 gint ett_opcua_WriteValue = -1;
199 gint ett_opcua_array_WriteValue = -1;
200 gint ett_opcua_HistoryUpdateDetails = -1;
201 gint ett_opcua_array_HistoryUpdateDetails = -1;
202 gint ett_opcua_UpdateDataDetails = -1;
203 gint ett_opcua_array_UpdateDataDetails = -1;
204 gint ett_opcua_UpdateStructureDataDetails = -1;
205 gint ett_opcua_array_UpdateStructureDataDetails = -1;
206 gint ett_opcua_UpdateEventDetails = -1;
207 gint ett_opcua_array_UpdateEventDetails = -1;
208 gint ett_opcua_DeleteRawModifiedDetails = -1;
209 gint ett_opcua_array_DeleteRawModifiedDetails = -1;
210 gint ett_opcua_DeleteAtTimeDetails = -1;
211 gint ett_opcua_array_DeleteAtTimeDetails = -1;
212 gint ett_opcua_DeleteEventDetails = -1;
213 gint ett_opcua_array_DeleteEventDetails = -1;
214 gint ett_opcua_HistoryUpdateResult = -1;
215 gint ett_opcua_array_HistoryUpdateResult = -1;
216 gint ett_opcua_CallMethodRequest = -1;
217 gint ett_opcua_array_CallMethodRequest = -1;
218 gint ett_opcua_CallMethodResult = -1;
219 gint ett_opcua_array_CallMethodResult = -1;
220 gint ett_opcua_DataChangeFilter = -1;
221 gint ett_opcua_array_DataChangeFilter = -1;
222 gint ett_opcua_EventFilter = -1;
223 gint ett_opcua_array_EventFilter = -1;
224 gint ett_opcua_AggregateConfiguration = -1;
225 gint ett_opcua_array_AggregateConfiguration = -1;
226 gint ett_opcua_AggregateFilter = -1;
227 gint ett_opcua_array_AggregateFilter = -1;
228 gint ett_opcua_EventFilterResult = -1;
229 gint ett_opcua_array_EventFilterResult = -1;
230 gint ett_opcua_AggregateFilterResult = -1;
231 gint ett_opcua_array_AggregateFilterResult = -1;
232 gint ett_opcua_MonitoringParameters = -1;
233 gint ett_opcua_array_MonitoringParameters = -1;
234 gint ett_opcua_MonitoredItemCreateRequest = -1;
235 gint ett_opcua_array_MonitoredItemCreateRequest = -1;
236 gint ett_opcua_MonitoredItemCreateResult = -1;
237 gint ett_opcua_array_MonitoredItemCreateResult = -1;
238 gint ett_opcua_MonitoredItemModifyRequest = -1;
239 gint ett_opcua_array_MonitoredItemModifyRequest = -1;
240 gint ett_opcua_MonitoredItemModifyResult = -1;
241 gint ett_opcua_array_MonitoredItemModifyResult = -1;
242 gint ett_opcua_NotificationMessage = -1;
243 gint ett_opcua_array_NotificationMessage = -1;
244 gint ett_opcua_DataChangeNotification = -1;
245 gint ett_opcua_array_DataChangeNotification = -1;
246 gint ett_opcua_MonitoredItemNotification = -1;
247 gint ett_opcua_array_MonitoredItemNotification = -1;
248 gint ett_opcua_EventNotificationList = -1;
249 gint ett_opcua_array_EventNotificationList = -1;
250 gint ett_opcua_EventFieldList = -1;
251 gint ett_opcua_array_EventFieldList = -1;
252 gint ett_opcua_HistoryEventFieldList = -1;
253 gint ett_opcua_array_HistoryEventFieldList = -1;
254 gint ett_opcua_StatusChangeNotification = -1;
255 gint ett_opcua_array_StatusChangeNotification = -1;
256 gint ett_opcua_SubscriptionAcknowledgement = -1;
257 gint ett_opcua_array_SubscriptionAcknowledgement = -1;
258 gint ett_opcua_TransferResult = -1;
259 gint ett_opcua_array_TransferResult = -1;
260 gint ett_opcua_ScalarTestType = -1;
261 gint ett_opcua_array_ScalarTestType = -1;
262 gint ett_opcua_ArrayTestType = -1;
263 gint ett_opcua_array_ArrayTestType = -1;
264 gint ett_opcua_CompositeTestType = -1;
265 gint ett_opcua_array_CompositeTestType = -1;
266 gint ett_opcua_BuildInfo = -1;
267 gint ett_opcua_array_BuildInfo = -1;
268 gint ett_opcua_RedundantServerDataType = -1;
269 gint ett_opcua_array_RedundantServerDataType = -1;
270 gint ett_opcua_EndpointUrlListDataType = -1;
271 gint ett_opcua_array_EndpointUrlListDataType = -1;
272 gint ett_opcua_NetworkGroupDataType = -1;
273 gint ett_opcua_array_NetworkGroupDataType = -1;
274 gint ett_opcua_SamplingIntervalDiagnosticsDataType = -1;
275 gint ett_opcua_array_SamplingIntervalDiagnosticsDataType = -1;
276 gint ett_opcua_ServerDiagnosticsSummaryDataType = -1;
277 gint ett_opcua_array_ServerDiagnosticsSummaryDataType = -1;
278 gint ett_opcua_ServerStatusDataType = -1;
279 gint ett_opcua_array_ServerStatusDataType = -1;
280 gint ett_opcua_SessionDiagnosticsDataType = -1;
281 gint ett_opcua_array_SessionDiagnosticsDataType = -1;
282 gint ett_opcua_SessionSecurityDiagnosticsDataType = -1;
283 gint ett_opcua_array_SessionSecurityDiagnosticsDataType = -1;
284 gint ett_opcua_ServiceCounterDataType = -1;
285 gint ett_opcua_array_ServiceCounterDataType = -1;
286 gint ett_opcua_StatusResult = -1;
287 gint ett_opcua_array_StatusResult = -1;
288 gint ett_opcua_SubscriptionDiagnosticsDataType = -1;
289 gint ett_opcua_array_SubscriptionDiagnosticsDataType = -1;
290 gint ett_opcua_ModelChangeStructureDataType = -1;
291 gint ett_opcua_array_ModelChangeStructureDataType = -1;
292 gint ett_opcua_SemanticChangeStructureDataType = -1;
293 gint ett_opcua_array_SemanticChangeStructureDataType = -1;
294 gint ett_opcua_Range = -1;
295 gint ett_opcua_array_Range = -1;
296 gint ett_opcua_EUInformation = -1;
297 gint ett_opcua_array_EUInformation = -1;
298 gint ett_opcua_ComplexNumberType = -1;
299 gint ett_opcua_array_ComplexNumberType = -1;
300 gint ett_opcua_DoubleComplexNumberType = -1;
301 gint ett_opcua_array_DoubleComplexNumberType = -1;
302 gint ett_opcua_AxisInformation = -1;
303 gint ett_opcua_array_AxisInformation = -1;
304 gint ett_opcua_XVType = -1;
305 gint ett_opcua_array_XVType = -1;
306 gint ett_opcua_ProgramDiagnosticDataType = -1;
307 gint ett_opcua_array_ProgramDiagnosticDataType = -1;
308 gint ett_opcua_Annotation = -1;
309 gint ett_opcua_array_Annotation = -1;
310  
311 void parseTrustListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
312 {
313 proto_item *ti;
314 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TrustListDataType, &ti, "%s: TrustListDataType", szFieldName);
315 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedLists);
316 /* Array length field ignored: NoOfTrustedCertificates */
317 parseArraySimple(subtree, tvb, pinfo, pOffset, "TrustedCertificates", "ByteString", hf_opcua_TrustedCertificates, parseByteString, ett_opcua_array_ByteString);
318 /* Array length field ignored: NoOfTrustedCrls */
319 parseArraySimple(subtree, tvb, pinfo, pOffset, "TrustedCrls", "ByteString", hf_opcua_TrustedCrls, parseByteString, ett_opcua_array_ByteString);
320 /* Array length field ignored: NoOfIssuerCertificates */
321 parseArraySimple(subtree, tvb, pinfo, pOffset, "IssuerCertificates", "ByteString", hf_opcua_IssuerCertificates, parseByteString, ett_opcua_array_ByteString);
322 /* Array length field ignored: NoOfIssuerCrls */
323 parseArraySimple(subtree, tvb, pinfo, pOffset, "IssuerCrls", "ByteString", hf_opcua_IssuerCrls, parseByteString, ett_opcua_array_ByteString);
324 proto_item_set_end(ti, tvb, *pOffset);
325 }
326 void parseNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
327 {
328 proto_item *ti;
329 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Node, &ti, "%s: Node", szFieldName);
330 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
331 parseNodeClass(subtree, tvb, pinfo, pOffset);
332 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
333 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
334 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
335 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
336 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
337 /* Array length field ignored: NoOfReferences */
338 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
339 proto_item_set_end(ti, tvb, *pOffset);
340 }
341 void parseInstanceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
342 {
343 proto_item *ti;
344 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_InstanceNode, &ti, "%s: InstanceNode", szFieldName);
345 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
346 parseNodeClass(subtree, tvb, pinfo, pOffset);
347 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
348 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
349 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
350 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
351 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
352 /* Array length field ignored: NoOfReferences */
353 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
354 proto_item_set_end(ti, tvb, *pOffset);
355 }
356 void parseTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
357 {
358 proto_item *ti;
359 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TypeNode, &ti, "%s: TypeNode", szFieldName);
360 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
361 parseNodeClass(subtree, tvb, pinfo, pOffset);
362 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
363 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
364 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
365 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
366 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
367 /* Array length field ignored: NoOfReferences */
368 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
369 proto_item_set_end(ti, tvb, *pOffset);
370 }
371 void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
372 {
373 proto_item *ti;
374 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectNode, &ti, "%s: ObjectNode", szFieldName);
375 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
376 parseNodeClass(subtree, tvb, pinfo, pOffset);
377 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
378 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
379 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
380 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
381 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
382 /* Array length field ignored: NoOfReferences */
383 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
384 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
385 proto_item_set_end(ti, tvb, *pOffset);
386 }
387 void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
388 {
389 proto_item *ti;
390 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectTypeNode, &ti, "%s: ObjectTypeNode", szFieldName);
391 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
392 parseNodeClass(subtree, tvb, pinfo, pOffset);
393 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
394 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
395 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
396 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
397 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
398 /* Array length field ignored: NoOfReferences */
399 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
400 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
401 proto_item_set_end(ti, tvb, *pOffset);
402 }
403 void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
404 {
405 proto_item *ti;
406 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableNode, &ti, "%s: VariableNode", szFieldName);
407 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
408 parseNodeClass(subtree, tvb, pinfo, pOffset);
409 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
410 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
411 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
412 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
413 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
414 /* Array length field ignored: NoOfReferences */
415 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
416 parseVariant(subtree, tvb, pinfo, pOffset, "Value");
417 parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
418 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
419 /* Array length field ignored: NoOfArrayDimensions */
420 parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
421 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_AccessLevel);
422 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_UserAccessLevel);
423 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_MinimumSamplingInterval);
424 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Historizing);
425 proto_item_set_end(ti, tvb, *pOffset);
426 }
427 void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
428 {
429 proto_item *ti;
430 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableTypeNode, &ti, "%s: VariableTypeNode", szFieldName);
431 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
432 parseNodeClass(subtree, tvb, pinfo, pOffset);
433 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
434 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
435 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
436 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
437 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
438 /* Array length field ignored: NoOfReferences */
439 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
440 parseVariant(subtree, tvb, pinfo, pOffset, "Value");
441 parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
442 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
443 /* Array length field ignored: NoOfArrayDimensions */
444 parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
445 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
446 proto_item_set_end(ti, tvb, *pOffset);
447 }
448 void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
449 {
450 proto_item *ti;
451 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceTypeNode, &ti, "%s: ReferenceTypeNode", szFieldName);
452 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
453 parseNodeClass(subtree, tvb, pinfo, pOffset);
454 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
455 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
456 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
457 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
458 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
459 /* Array length field ignored: NoOfReferences */
460 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
461 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
462 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Symmetric);
463 parseLocalizedText(subtree, tvb, pinfo, pOffset, "InverseName");
464 proto_item_set_end(ti, tvb, *pOffset);
465 }
466 void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
467 {
468 proto_item *ti;
469 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MethodNode, &ti, "%s: MethodNode", szFieldName);
470 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
471 parseNodeClass(subtree, tvb, pinfo, pOffset);
472 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
473 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
474 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
475 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
476 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
477 /* Array length field ignored: NoOfReferences */
478 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
479 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Executable);
480 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UserExecutable);
481 proto_item_set_end(ti, tvb, *pOffset);
482 }
483 void parseViewNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
484 {
485 proto_item *ti;
486 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewNode, &ti, "%s: ViewNode", szFieldName);
487 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
488 parseNodeClass(subtree, tvb, pinfo, pOffset);
489 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
490 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
491 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
492 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
493 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
494 /* Array length field ignored: NoOfReferences */
495 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
496 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ContainsNoLoops);
497 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
498 proto_item_set_end(ti, tvb, *pOffset);
499 }
500 void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
501 {
502 proto_item *ti;
503 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataTypeNode, &ti, "%s: DataTypeNode", szFieldName);
504 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
505 parseNodeClass(subtree, tvb, pinfo, pOffset);
506 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
507 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
508 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
509 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
510 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
511 /* Array length field ignored: NoOfReferences */
512 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
513 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
514 proto_item_set_end(ti, tvb, *pOffset);
515 }
516 void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
517 {
518 proto_item *ti;
519 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceNode, &ti, "%s: ReferenceNode", szFieldName);
520 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
521 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsInverse);
522 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetId");
523 proto_item_set_end(ti, tvb, *pOffset);
524 }
525 void parseArgument(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
526 {
527 proto_item *ti;
528 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Argument, &ti, "%s: Argument", szFieldName);
529 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Name);
530 parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
531 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
532 /* Array length field ignored: NoOfArrayDimensions */
533 parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
534 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
535 proto_item_set_end(ti, tvb, *pOffset);
536 }
537 void parseEnumValueType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
538 {
539 proto_item *ti;
540 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EnumValueType, &ti, "%s: EnumValueType", szFieldName);
541 parseInt64(subtree, tvb, pinfo, pOffset, hf_opcua_Value);
542 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
543 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
544 proto_item_set_end(ti, tvb, *pOffset);
545 }
546 void parseOptionSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
547 {
548 proto_item *ti;
549 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_OptionSet, &ti, "%s: OptionSet", szFieldName);
550 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Value);
551 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ValidBits);
552 proto_item_set_end(ti, tvb, *pOffset);
553 }
554 void parseTimeZoneDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
555 {
556 proto_item *ti;
557 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TimeZoneDataType, &ti, "%s: TimeZoneDataType", szFieldName);
558 parseInt16(subtree, tvb, pinfo, pOffset, hf_opcua_Offset);
559 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DaylightSavingInOffset);
560 proto_item_set_end(ti, tvb, *pOffset);
561 }
562 void parseApplicationDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
563 {
564 proto_item *ti;
565 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ApplicationDescription, &ti, "%s: ApplicationDescription", szFieldName);
566 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ApplicationUri);
567 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
568 parseLocalizedText(subtree, tvb, pinfo, pOffset, "ApplicationName");
569 parseApplicationType(subtree, tvb, pinfo, pOffset);
570 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_GatewayServerUri);
571 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_DiscoveryProfileUri);
572 /* Array length field ignored: NoOfDiscoveryUrls */
573 parseArraySimple(subtree, tvb, pinfo, pOffset, "DiscoveryUrls", "String", hf_opcua_DiscoveryUrls, parseString, ett_opcua_array_String);
574 proto_item_set_end(ti, tvb, *pOffset);
575 }
576 void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
577 {
578 static const int *returnDiagnostics_mask[] = {
579 &hf_opcua_returnDiag_mask_sl_symbolicId,
580 &hf_opcua_returnDiag_mask_sl_localizedText,
581 &hf_opcua_returnDiag_mask_sl_additionalinfo,
582 &hf_opcua_returnDiag_mask_sl_innerstatuscode,
583 &hf_opcua_returnDiag_mask_sl_innerdiagnostics,
584 &hf_opcua_returnDiag_mask_ol_symbolicId,
585 &hf_opcua_returnDiag_mask_ol_localizedText,
586 &hf_opcua_returnDiag_mask_ol_additionalinfo,
587 &hf_opcua_returnDiag_mask_ol_innerstatuscode,
588 &hf_opcua_returnDiag_mask_ol_innerdiagnostics,
589 NULL};
590  
591 proto_item *ti;
592 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RequestHeader, &ti, "%s: RequestHeader", szFieldName);
593 parseNodeId(subtree, tvb, pinfo, pOffset, "AuthenticationToken");
594 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_Timestamp);
595 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestHandle);
596 proto_tree_add_bitmask(subtree, tvb, *pOffset, hf_opcua_returnDiag, ett_opcua_returnDiagnostics, returnDiagnostics_mask, ENC_LITTLE_ENDIAN); *pOffset += 4;
597 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_AuditEntryId);
598 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TimeoutHint);
599 parseExtensionObject(subtree, tvb, pinfo, pOffset, "AdditionalHeader");
600 proto_item_set_end(ti, tvb, *pOffset);
601 }
602 void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
603 {
604 proto_item *ti;
605 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ResponseHeader, &ti, "%s: ResponseHeader", szFieldName);
606 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_Timestamp);
607 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestHandle);
608 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_ServiceResult);
609 parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "ServiceDiagnostics");
610 /* Array length field ignored: NoOfStringTable */
611 parseArraySimple(subtree, tvb, pinfo, pOffset, "StringTable", "String", hf_opcua_StringTable, parseString, ett_opcua_array_String);
612 parseExtensionObject(subtree, tvb, pinfo, pOffset, "AdditionalHeader");
613 proto_item_set_end(ti, tvb, *pOffset);
614 }
615 void parseServerOnNetwork(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
616 {
617 proto_item *ti;
618 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerOnNetwork, &ti, "%s: ServerOnNetwork", szFieldName);
619 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RecordId);
620 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerName);
621 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_DiscoveryUrl);
622 /* Array length field ignored: NoOfServerCapabilities */
623 parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilities", "String", hf_opcua_ServerCapabilities, parseString, ett_opcua_array_String);
624 proto_item_set_end(ti, tvb, *pOffset);
625 }
626 void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
627 {
628 proto_item *ti;
629 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserTokenPolicy, &ti, "%s: UserTokenPolicy", szFieldName);
630 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
631 parseUserTokenType(subtree, tvb, pinfo, pOffset);
632 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IssuedTokenType);
633 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IssuerEndpointUrl);
634 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
635 proto_item_set_end(ti, tvb, *pOffset);
636 }
637 void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
638 {
639 proto_item *ti;
640 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointDescription, &ti, "%s: EndpointDescription", szFieldName);
641 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EndpointUrl);
642 parseApplicationDescription(subtree, tvb, pinfo, pOffset, "Server");
643 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerCertificate);
644 parseMessageSecurityMode(subtree, tvb, pinfo, pOffset);
645 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
646 /* Array length field ignored: NoOfUserIdentityTokens */
647 parseArrayComplex(subtree, tvb, pinfo, pOffset, "UserIdentityTokens", "UserTokenPolicy", parseUserTokenPolicy, ett_opcua_array_UserTokenPolicy);
648 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_TransportProfileUri);
649 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityLevel);
650 proto_item_set_end(ti, tvb, *pOffset);
651 }
652 void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
653 {
654 proto_item *ti;
655 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RegisteredServer, &ti, "%s: RegisteredServer", szFieldName);
656 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerUri);
657 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
658 /* Array length field ignored: NoOfServerNames */
659 parseArrayComplex(subtree, tvb, pinfo, pOffset, "ServerNames", "LocalizedText", parseLocalizedText, ett_opcua_array_LocalizedText);
660 parseApplicationType(subtree, tvb, pinfo, pOffset);
661 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_GatewayServerUri);
662 /* Array length field ignored: NoOfDiscoveryUrls */
663 parseArraySimple(subtree, tvb, pinfo, pOffset, "DiscoveryUrls", "String", hf_opcua_DiscoveryUrls, parseString, ett_opcua_array_String);
664 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SemaphoreFilePath);
665 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsOnline);
666 proto_item_set_end(ti, tvb, *pOffset);
667 }
668 void parseMdnsDiscoveryConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
669 {
670 proto_item *ti;
671 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MdnsDiscoveryConfiguration, &ti, "%s: MdnsDiscoveryConfiguration", szFieldName);
672 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_MdnsServerName);
673 /* Array length field ignored: NoOfServerCapabilities */
674 parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilities", "String", hf_opcua_ServerCapabilities, parseString, ett_opcua_array_String);
675 proto_item_set_end(ti, tvb, *pOffset);
676 }
677 void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
678 {
679 proto_item *ti;
680 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ChannelSecurityToken, &ti, "%s: ChannelSecurityToken", szFieldName);
681 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ChannelId);
682 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TokenId);
683 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_CreatedAt);
684 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedLifetime);
685 proto_item_set_end(ti, tvb, *pOffset);
686 }
687 void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
688 {
689 proto_item *ti;
690 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SignedSoftwareCertificate, &ti, "%s: SignedSoftwareCertificate", szFieldName);
691 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_CertificateData);
692 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Signature);
693 proto_item_set_end(ti, tvb, *pOffset);
694 }
695 void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
696 {
697 proto_item *ti;
698 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SignatureData, &ti, "%s: SignatureData", szFieldName);
699 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Algorithm);
700 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Signature);
701 proto_item_set_end(ti, tvb, *pOffset);
702 }
703 void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
704 {
705 proto_item *ti;
706 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserIdentityToken, &ti, "%s: UserIdentityToken", szFieldName);
707 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
708 proto_item_set_end(ti, tvb, *pOffset);
709 }
710 void parseAnonymousIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
711 {
712 proto_item *ti;
713 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AnonymousIdentityToken, &ti, "%s: AnonymousIdentityToken", szFieldName);
714 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
715 proto_item_set_end(ti, tvb, *pOffset);
716 }
717 void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
718 {
719 proto_item *ti;
720 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserNameIdentityToken, &ti, "%s: UserNameIdentityToken", szFieldName);
721 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
722 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_UserName);
723 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Password);
724 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EncryptionAlgorithm);
725 proto_item_set_end(ti, tvb, *pOffset);
726 }
727 void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
728 {
729 proto_item *ti;
730 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_X509IdentityToken, &ti, "%s: X509IdentityToken", szFieldName);
731 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
732 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_CertificateData);
733 proto_item_set_end(ti, tvb, *pOffset);
734 }
735 void parseKerberosIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
736 {
737 proto_item *ti;
738 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_KerberosIdentityToken, &ti, "%s: KerberosIdentityToken", szFieldName);
739 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
740 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_TicketData);
741 proto_item_set_end(ti, tvb, *pOffset);
742 }
743 void parseIssuedIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
744 {
745 proto_item *ti;
746 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_IssuedIdentityToken, &ti, "%s: IssuedIdentityToken", szFieldName);
747 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
748 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_TokenData);
749 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EncryptionAlgorithm);
750 proto_item_set_end(ti, tvb, *pOffset);
751 }
752 void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
753 {
754 proto_item *ti;
755 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeAttributes, &ti, "%s: NodeAttributes", szFieldName);
756 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
757 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
758 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
759 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
760 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
761 proto_item_set_end(ti, tvb, *pOffset);
762 }
763 void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
764 {
765 proto_item *ti;
766 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectAttributes, &ti, "%s: ObjectAttributes", szFieldName);
767 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
768 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
769 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
770 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
771 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
772 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
773 proto_item_set_end(ti, tvb, *pOffset);
774 }
775 void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
776 {
777 proto_item *ti;
778 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableAttributes, &ti, "%s: VariableAttributes", szFieldName);
779 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
780 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
781 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
782 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
783 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
784 parseVariant(subtree, tvb, pinfo, pOffset, "Value");
785 parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
786 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
787 /* Array length field ignored: NoOfArrayDimensions */
788 parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
789 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_AccessLevel);
790 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_UserAccessLevel);
791 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_MinimumSamplingInterval);
792 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Historizing);
793 proto_item_set_end(ti, tvb, *pOffset);
794 }
795 void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
796 {
797 proto_item *ti;
798 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MethodAttributes, &ti, "%s: MethodAttributes", szFieldName);
799 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
800 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
801 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
802 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
803 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
804 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Executable);
805 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UserExecutable);
806 proto_item_set_end(ti, tvb, *pOffset);
807 }
808 void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
809 {
810 proto_item *ti;
811 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectTypeAttributes, &ti, "%s: ObjectTypeAttributes", szFieldName);
812 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
813 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
814 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
815 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
816 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
817 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
818 proto_item_set_end(ti, tvb, *pOffset);
819 }
820 void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
821 {
822 proto_item *ti;
823 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableTypeAttributes, &ti, "%s: VariableTypeAttributes", szFieldName);
824 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
825 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
826 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
827 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
828 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
829 parseVariant(subtree, tvb, pinfo, pOffset, "Value");
830 parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
831 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
832 /* Array length field ignored: NoOfArrayDimensions */
833 parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
834 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
835 proto_item_set_end(ti, tvb, *pOffset);
836 }
837 void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
838 {
839 proto_item *ti;
840 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceTypeAttributes, &ti, "%s: ReferenceTypeAttributes", szFieldName);
841 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
842 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
843 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
844 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
845 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
846 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
847 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Symmetric);
848 parseLocalizedText(subtree, tvb, pinfo, pOffset, "InverseName");
849 proto_item_set_end(ti, tvb, *pOffset);
850 }
851 void parseDataTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
852 {
853 proto_item *ti;
854 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataTypeAttributes, &ti, "%s: DataTypeAttributes", szFieldName);
855 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
856 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
857 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
858 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
859 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
860 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
861 proto_item_set_end(ti, tvb, *pOffset);
862 }
863 void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
864 {
865 proto_item *ti;
866 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewAttributes, &ti, "%s: ViewAttributes", szFieldName);
867 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
868 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
869 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
870 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
871 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
872 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ContainsNoLoops);
873 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
874 proto_item_set_end(ti, tvb, *pOffset);
875 }
876 void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
877 {
878 proto_item *ti;
879 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddNodesItem, &ti, "%s: AddNodesItem", szFieldName);
880 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "ParentNodeId");
881 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
882 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "RequestedNewNodeId");
883 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
884 parseNodeClass(subtree, tvb, pinfo, pOffset);
885 parseExtensionObject(subtree, tvb, pinfo, pOffset, "NodeAttributes");
886 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinition");
887 proto_item_set_end(ti, tvb, *pOffset);
888 }
889 void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
890 {
891 proto_item *ti;
892 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddNodesResult, &ti, "%s: AddNodesResult", szFieldName);
893 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
894 parseNodeId(subtree, tvb, pinfo, pOffset, "AddedNodeId");
895 proto_item_set_end(ti, tvb, *pOffset);
896 }
897 void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
898 {
899 proto_item *ti;
900 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddReferencesItem, &ti, "%s: AddReferencesItem", szFieldName);
901 parseNodeId(subtree, tvb, pinfo, pOffset, "SourceNodeId");
902 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
903 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
904 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_TargetServerUri);
905 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetNodeId");
906 parseNodeClass(subtree, tvb, pinfo, pOffset);
907 proto_item_set_end(ti, tvb, *pOffset);
908 }
909 void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
910 {
911 proto_item *ti;
912 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteNodesItem, &ti, "%s: DeleteNodesItem", szFieldName);
913 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
914 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteTargetReferences);
915 proto_item_set_end(ti, tvb, *pOffset);
916 }
917 void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
918 {
919 proto_item *ti;
920 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteReferencesItem, &ti, "%s: DeleteReferencesItem", szFieldName);
921 parseNodeId(subtree, tvb, pinfo, pOffset, "SourceNodeId");
922 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
923 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
924 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetNodeId");
925 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteBidirectional);
926 proto_item_set_end(ti, tvb, *pOffset);
927 }
928 void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
929 {
930 proto_item *ti;
931 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewDescription, &ti, "%s: ViewDescription", szFieldName);
932 parseNodeId(subtree, tvb, pinfo, pOffset, "ViewId");
933 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_Timestamp);
934 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ViewVersion);
935 proto_item_set_end(ti, tvb, *pOffset);
936 }
937 void parseBrowseDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
938 {
939 proto_item *ti;
940 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowseDescription, &ti, "%s: BrowseDescription", szFieldName);
941 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
942 parseBrowseDirection(subtree, tvb, pinfo, pOffset);
943 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
944 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IncludeSubtypes);
945 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NodeClassMask);
946 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ResultMask);
947 proto_item_set_end(ti, tvb, *pOffset);
948 }
949 void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
950 {
951 proto_item *ti;
952 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceDescription, &ti, "%s: ReferenceDescription", szFieldName);
953 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
954 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
955 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
956 parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
957 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
958 parseNodeClass(subtree, tvb, pinfo, pOffset);
959 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinition");
960 proto_item_set_end(ti, tvb, *pOffset);
961 }
962 void parseBrowseResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
963 {
964 proto_item *ti;
965 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowseResult, &ti, "%s: BrowseResult", szFieldName);
966 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
967 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
968 /* Array length field ignored: NoOfReferences */
969 parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceDescription", parseReferenceDescription, ett_opcua_array_ReferenceDescription);
970 proto_item_set_end(ti, tvb, *pOffset);
971 }
972 void parseRelativePathElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
973 {
974 proto_item *ti;
975 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RelativePathElement, &ti, "%s: RelativePathElement", szFieldName);
976 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
977 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsInverse);
978 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IncludeSubtypes);
979 parseQualifiedName(subtree, tvb, pinfo, pOffset, "TargetName");
980 proto_item_set_end(ti, tvb, *pOffset);
981 }
982 void parseRelativePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
983 {
984 proto_item *ti;
985 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RelativePath, &ti, "%s: RelativePath", szFieldName);
986 /* Array length field ignored: NoOfElements */
987 parseArrayComplex(subtree, tvb, pinfo, pOffset, "Elements", "RelativePathElement", parseRelativePathElement, ett_opcua_array_RelativePathElement);
988 proto_item_set_end(ti, tvb, *pOffset);
989 }
990 void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
991 {
992 proto_item *ti;
993 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePath, &ti, "%s: BrowsePath", szFieldName);
994 parseNodeId(subtree, tvb, pinfo, pOffset, "StartingNode");
995 parseRelativePath(subtree, tvb, pinfo, pOffset, "RelativePath");
996 proto_item_set_end(ti, tvb, *pOffset);
997 }
998 void parseBrowsePathTarget(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
999 {
1000 proto_item *ti;
1001 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePathTarget, &ti, "%s: BrowsePathTarget", szFieldName);
1002 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetId");
1003 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RemainingPathIndex);
1004 proto_item_set_end(ti, tvb, *pOffset);
1005 }
1006 void parseBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1007 {
1008 proto_item *ti;
1009 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePathResult, &ti, "%s: BrowsePathResult", szFieldName);
1010 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1011 /* Array length field ignored: NoOfTargets */
1012 parseArrayComplex(subtree, tvb, pinfo, pOffset, "Targets", "BrowsePathTarget", parseBrowsePathTarget, ett_opcua_array_BrowsePathTarget);
1013 proto_item_set_end(ti, tvb, *pOffset);
1014 }
1015 void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1016 {
1017 proto_item *ti;
1018 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointConfiguration, &ti, "%s: EndpointConfiguration", szFieldName);
1019 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_OperationTimeout);
1020 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseBinaryEncoding);
1021 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxStringLength);
1022 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxByteStringLength);
1023 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxArrayLength);
1024 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxMessageSize);
1025 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxBufferSize);
1026 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ChannelLifetime);
1027 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityTokenLifetime);
1028 proto_item_set_end(ti, tvb, *pOffset);
1029 }
1030 void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1031 {
1032 proto_item *ti;
1033 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SupportedProfile, &ti, "%s: SupportedProfile", szFieldName);
1034 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_OrganizationUri);
1035 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProfileId);
1036 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ComplianceTool);
1037 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ComplianceDate);
1038 parseComplianceLevel(subtree, tvb, pinfo, pOffset);
1039 /* Array length field ignored: NoOfUnsupportedUnitIds */
1040 parseArraySimple(subtree, tvb, pinfo, pOffset, "UnsupportedUnitIds", "String", hf_opcua_UnsupportedUnitIds, parseString, ett_opcua_array_String);
1041 proto_item_set_end(ti, tvb, *pOffset);
1042 }
1043 void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1044 {
1045 proto_item *ti;
1046 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SoftwareCertificate, &ti, "%s: SoftwareCertificate", szFieldName);
1047 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductName);
1048 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
1049 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_VendorName);
1050 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_VendorProductCertificate);
1051 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SoftwareVersion);
1052 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_BuildNumber);
1053 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_BuildDate);
1054 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IssuedBy);
1055 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_IssueDate);
1056 /* Array length field ignored: NoOfSupportedProfiles */
1057 parseArrayComplex(subtree, tvb, pinfo, pOffset, "SupportedProfiles", "SupportedProfile", parseSupportedProfile, ett_opcua_array_SupportedProfile);
1058 proto_item_set_end(ti, tvb, *pOffset);
1059 }
1060 void parseQueryDataDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1061 {
1062 proto_item *ti;
1063 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_QueryDataDescription, &ti, "%s: QueryDataDescription", szFieldName);
1064 parseRelativePath(subtree, tvb, pinfo, pOffset, "RelativePath");
1065 parseAttributeId(subtree, tvb, pinfo, pOffset);
1066 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
1067 proto_item_set_end(ti, tvb, *pOffset);
1068 }
1069 void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1070 {
1071 proto_item *ti;
1072 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeTypeDescription, &ti, "%s: NodeTypeDescription", szFieldName);
1073 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinitionNode");
1074 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IncludeSubTypes);
1075 /* Array length field ignored: NoOfDataToReturn */
1076 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataToReturn", "QueryDataDescription", parseQueryDataDescription, ett_opcua_array_QueryDataDescription);
1077 proto_item_set_end(ti, tvb, *pOffset);
1078 }
1079 void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1080 {
1081 proto_item *ti;
1082 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_QueryDataSet, &ti, "%s: QueryDataSet", szFieldName);
1083 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1084 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinitionNode");
1085 /* Array length field ignored: NoOfValues */
1086 parseArrayComplex(subtree, tvb, pinfo, pOffset, "Values", "Variant", parseVariant, ett_opcua_array_Variant);
1087 proto_item_set_end(ti, tvb, *pOffset);
1088 }
1089 void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1090 {
1091 proto_item *ti;
1092 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeReference, &ti, "%s: NodeReference", szFieldName);
1093 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1094 parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
1095 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
1096 /* Array length field ignored: NoOfReferencedNodeIds */
1097 parseArrayComplex(subtree, tvb, pinfo, pOffset, "ReferencedNodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId);
1098 proto_item_set_end(ti, tvb, *pOffset);
1099 }
1100 void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1101 {
1102 proto_item *ti;
1103 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterElement, &ti, "%s: ContentFilterElement", szFieldName);
1104 parseFilterOperator(subtree, tvb, pinfo, pOffset);
1105 /* Array length field ignored: NoOfFilterOperands */
1106 parseArrayComplex(subtree, tvb, pinfo, pOffset, "FilterOperands", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
1107 proto_item_set_end(ti, tvb, *pOffset);
1108 }
1109 void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1110 {
1111 proto_item *ti;
1112 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilter, &ti, "%s: ContentFilter", szFieldName);
1113 /* Array length field ignored: NoOfElements */
1114 parseArrayComplex(subtree, tvb, pinfo, pOffset, "Elements", "ContentFilterElement", parseContentFilterElement, ett_opcua_array_ContentFilterElement);
1115 proto_item_set_end(ti, tvb, *pOffset);
1116 }
1117 void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1118 {
1119 proto_item *ti;
1120 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ElementOperand, &ti, "%s: ElementOperand", szFieldName);
1121 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_Index);
1122 proto_item_set_end(ti, tvb, *pOffset);
1123 }
1124 void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1125 {
1126 proto_item *ti;
1127 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_LiteralOperand, &ti, "%s: LiteralOperand", szFieldName);
1128 parseVariant(subtree, tvb, pinfo, pOffset, "Value");
1129 proto_item_set_end(ti, tvb, *pOffset);
1130 }
1131 void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1132 {
1133 proto_item *ti;
1134 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AttributeOperand, &ti, "%s: AttributeOperand", szFieldName);
1135 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1136 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Alias);
1137 parseRelativePath(subtree, tvb, pinfo, pOffset, "BrowsePath");
1138 parseAttributeId(subtree, tvb, pinfo, pOffset);
1139 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
1140 proto_item_set_end(ti, tvb, *pOffset);
1141 }
1142 void parseSimpleAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1143 {
1144 proto_item *ti;
1145 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SimpleAttributeOperand, &ti, "%s: SimpleAttributeOperand", szFieldName);
1146 parseNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinitionId");
1147 /* Array length field ignored: NoOfBrowsePath */
1148 parseArrayComplex(subtree, tvb, pinfo, pOffset, "BrowsePath", "QualifiedName", parseQualifiedName, ett_opcua_array_QualifiedName);
1149 parseAttributeId(subtree, tvb, pinfo, pOffset);
1150 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
1151 proto_item_set_end(ti, tvb, *pOffset);
1152 }
1153 void parseContentFilterElementResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1154 {
1155 proto_item *ti;
1156 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterElementResult, &ti, "%s: ContentFilterElementResult", szFieldName);
1157 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1158 /* Array length field ignored: NoOfOperandStatusCodes */
1159 parseArraySimple(subtree, tvb, pinfo, pOffset, "OperandStatusCodes", "StatusCode", hf_opcua_OperandStatusCodes, parseStatusCode, ett_opcua_array_StatusCode);
1160 /* Array length field ignored: NoOfOperandDiagnosticInfos */
1161 parseArrayComplex(subtree, tvb, pinfo, pOffset, "OperandDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1162 proto_item_set_end(ti, tvb, *pOffset);
1163 }
1164 void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1165 {
1166 proto_item *ti;
1167 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterResult, &ti, "%s: ContentFilterResult", szFieldName);
1168 /* Array length field ignored: NoOfElementResults */
1169 parseArrayComplex(subtree, tvb, pinfo, pOffset, "ElementResults", "ContentFilterElementResult", parseContentFilterElementResult, ett_opcua_array_ContentFilterElementResult);
1170 /* Array length field ignored: NoOfElementDiagnosticInfos */
1171 parseArrayComplex(subtree, tvb, pinfo, pOffset, "ElementDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1172 proto_item_set_end(ti, tvb, *pOffset);
1173 }
1174 void parseParsingResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1175 {
1176 proto_item *ti;
1177 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ParsingResult, &ti, "%s: ParsingResult", szFieldName);
1178 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1179 /* Array length field ignored: NoOfDataStatusCodes */
1180 parseArraySimple(subtree, tvb, pinfo, pOffset, "DataStatusCodes", "StatusCode", hf_opcua_DataStatusCodes, parseStatusCode, ett_opcua_array_StatusCode);
1181 /* Array length field ignored: NoOfDataDiagnosticInfos */
1182 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1183 proto_item_set_end(ti, tvb, *pOffset);
1184 }
1185 void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1186 {
1187 proto_item *ti;
1188 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadValueId, &ti, "%s: ReadValueId", szFieldName);
1189 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1190 parseAttributeId(subtree, tvb, pinfo, pOffset);
1191 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
1192 parseQualifiedName(subtree, tvb, pinfo, pOffset, "DataEncoding");
1193 proto_item_set_end(ti, tvb, *pOffset);
1194 }
1195 void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1196 {
1197 proto_item *ti;
1198 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadValueId, &ti, "%s: HistoryReadValueId", szFieldName);
1199 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1200 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
1201 parseQualifiedName(subtree, tvb, pinfo, pOffset, "DataEncoding");
1202 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
1203 proto_item_set_end(ti, tvb, *pOffset);
1204 }
1205 void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1206 {
1207 proto_item *ti;
1208 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadResult, &ti, "%s: HistoryReadResult", szFieldName);
1209 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1210 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
1211 parseExtensionObject(subtree, tvb, pinfo, pOffset, "HistoryData");
1212 proto_item_set_end(ti, tvb, *pOffset);
1213 }
1214 void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1215 {
1216 proto_item *ti;
1217 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadEventDetails, &ti, "%s: ReadEventDetails", szFieldName);
1218 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NumValuesPerNode);
1219 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
1220 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
1221 parseEventFilter(subtree, tvb, pinfo, pOffset, "Filter");
1222 proto_item_set_end(ti, tvb, *pOffset);
1223 }
1224 void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1225 {
1226 proto_item *ti;
1227 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadRawModifiedDetails, &ti, "%s: ReadRawModifiedDetails", szFieldName);
1228 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsReadModified);
1229 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
1230 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
1231 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NumValuesPerNode);
1232 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ReturnBounds);
1233 proto_item_set_end(ti, tvb, *pOffset);
1234 }
1235 void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1236 {
1237 proto_item *ti;
1238 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadProcessedDetails, &ti, "%s: ReadProcessedDetails", szFieldName);
1239 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
1240 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
1241 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_ProcessingInterval);
1242 /* Array length field ignored: NoOfAggregateType */
1243 parseArrayComplex(subtree, tvb, pinfo, pOffset, "AggregateType", "NodeId", parseNodeId, ett_opcua_array_NodeId);
1244 parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "AggregateConfiguration");
1245 proto_item_set_end(ti, tvb, *pOffset);
1246 }
1247 void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1248 {
1249 proto_item *ti;
1250 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadAtTimeDetails, &ti, "%s: ReadAtTimeDetails", szFieldName);
1251 /* Array length field ignored: NoOfReqTimes */
1252 parseArraySimple(subtree, tvb, pinfo, pOffset, "ReqTimes", "DateTime", hf_opcua_ReqTimes, parseDateTime, ett_opcua_array_DateTime);
1253 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseSimpleBounds);
1254 proto_item_set_end(ti, tvb, *pOffset);
1255 }
1256 void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1257 {
1258 proto_item *ti;
1259 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryData, &ti, "%s: HistoryData", szFieldName);
1260 /* Array length field ignored: NoOfDataValues */
1261 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
1262 proto_item_set_end(ti, tvb, *pOffset);
1263 }
1264 void parseModificationInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1265 {
1266 proto_item *ti;
1267 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ModificationInfo, &ti, "%s: ModificationInfo", szFieldName);
1268 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ModificationTime);
1269 parseHistoryUpdateType(subtree, tvb, pinfo, pOffset);
1270 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_UserName);
1271 proto_item_set_end(ti, tvb, *pOffset);
1272 }
1273 void parseHistoryModifiedData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1274 {
1275 proto_item *ti;
1276 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryModifiedData, &ti, "%s: HistoryModifiedData", szFieldName);
1277 /* Array length field ignored: NoOfDataValues */
1278 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
1279 /* Array length field ignored: NoOfModificationInfos */
1280 parseArrayComplex(subtree, tvb, pinfo, pOffset, "ModificationInfos", "ModificationInfo", parseModificationInfo, ett_opcua_array_ModificationInfo);
1281 proto_item_set_end(ti, tvb, *pOffset);
1282 }
1283 void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1284 {
1285 proto_item *ti;
1286 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryEvent, &ti, "%s: HistoryEvent", szFieldName);
1287 /* Array length field ignored: NoOfEvents */
1288 parseArrayComplex(subtree, tvb, pinfo, pOffset, "Events", "HistoryEventFieldList", parseHistoryEventFieldList, ett_opcua_array_HistoryEventFieldList);
1289 proto_item_set_end(ti, tvb, *pOffset);
1290 }
1291 void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1292 {
1293 proto_item *ti;
1294 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_WriteValue, &ti, "%s: WriteValue", szFieldName);
1295 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1296 parseAttributeId(subtree, tvb, pinfo, pOffset);
1297 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
1298 parseDataValue(subtree, tvb, pinfo, pOffset, "Value");
1299 proto_item_set_end(ti, tvb, *pOffset);
1300 }
1301 void parseHistoryUpdateDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1302 {
1303 proto_item *ti;
1304 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateDetails, &ti, "%s: HistoryUpdateDetails", szFieldName);
1305 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1306 proto_item_set_end(ti, tvb, *pOffset);
1307 }
1308 void parseUpdateDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1309 {
1310 proto_item *ti;
1311 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateDataDetails, &ti, "%s: UpdateDataDetails", szFieldName);
1312 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1313 parsePerformUpdateType(subtree, tvb, pinfo, pOffset);
1314 /* Array length field ignored: NoOfUpdateValues */
1315 parseArrayComplex(subtree, tvb, pinfo, pOffset, "UpdateValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
1316 proto_item_set_end(ti, tvb, *pOffset);
1317 }
1318 void parseUpdateStructureDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1319 {
1320 proto_item *ti;
1321 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateStructureDataDetails, &ti, "%s: UpdateStructureDataDetails", szFieldName);
1322 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1323 parsePerformUpdateType(subtree, tvb, pinfo, pOffset);
1324 /* Array length field ignored: NoOfUpdateValues */
1325 parseArrayComplex(subtree, tvb, pinfo, pOffset, "UpdateValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
1326 proto_item_set_end(ti, tvb, *pOffset);
1327 }
1328 void parseUpdateEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1329 {
1330 proto_item *ti;
1331 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateEventDetails, &ti, "%s: UpdateEventDetails", szFieldName);
1332 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1333 parsePerformUpdateType(subtree, tvb, pinfo, pOffset);
1334 parseEventFilter(subtree, tvb, pinfo, pOffset, "Filter");
1335 /* Array length field ignored: NoOfEventData */
1336 parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventData", "HistoryEventFieldList", parseHistoryEventFieldList, ett_opcua_array_HistoryEventFieldList);
1337 proto_item_set_end(ti, tvb, *pOffset);
1338 }
1339 void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1340 {
1341 proto_item *ti;
1342 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteRawModifiedDetails, &ti, "%s: DeleteRawModifiedDetails", szFieldName);
1343 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1344 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsDeleteModified);
1345 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
1346 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
1347 proto_item_set_end(ti, tvb, *pOffset);
1348 }
1349 void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1350 {
1351 proto_item *ti;
1352 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteAtTimeDetails, &ti, "%s: DeleteAtTimeDetails", szFieldName);
1353 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1354 /* Array length field ignored: NoOfReqTimes */
1355 parseArraySimple(subtree, tvb, pinfo, pOffset, "ReqTimes", "DateTime", hf_opcua_ReqTimes, parseDateTime, ett_opcua_array_DateTime);
1356 proto_item_set_end(ti, tvb, *pOffset);
1357 }
1358 void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1359 {
1360 proto_item *ti;
1361 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteEventDetails, &ti, "%s: DeleteEventDetails", szFieldName);
1362 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1363 /* Array length field ignored: NoOfEventIds */
1364 parseArraySimple(subtree, tvb, pinfo, pOffset, "EventIds", "ByteString", hf_opcua_EventIds, parseByteString, ett_opcua_array_ByteString);
1365 proto_item_set_end(ti, tvb, *pOffset);
1366 }
1367 void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1368 {
1369 proto_item *ti;
1370 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateResult, &ti, "%s: HistoryUpdateResult", szFieldName);
1371 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1372 /* Array length field ignored: NoOfOperationResults */
1373 parseArraySimple(subtree, tvb, pinfo, pOffset, "OperationResults", "StatusCode", hf_opcua_OperationResults, parseStatusCode, ett_opcua_array_StatusCode);
1374 /* Array length field ignored: NoOfDiagnosticInfos */
1375 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1376 proto_item_set_end(ti, tvb, *pOffset);
1377 }
1378 void parseCallMethodRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1379 {
1380 proto_item *ti;
1381 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CallMethodRequest, &ti, "%s: CallMethodRequest", szFieldName);
1382 parseNodeId(subtree, tvb, pinfo, pOffset, "ObjectId");
1383 parseNodeId(subtree, tvb, pinfo, pOffset, "MethodId");
1384 /* Array length field ignored: NoOfInputArguments */
1385 parseArrayComplex(subtree, tvb, pinfo, pOffset, "InputArguments", "Variant", parseVariant, ett_opcua_array_Variant);
1386 proto_item_set_end(ti, tvb, *pOffset);
1387 }
1388 void parseCallMethodResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1389 {
1390 proto_item *ti;
1391 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CallMethodResult, &ti, "%s: CallMethodResult", szFieldName);
1392 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1393 /* Array length field ignored: NoOfInputArgumentResults */
1394 parseArraySimple(subtree, tvb, pinfo, pOffset, "InputArgumentResults", "StatusCode", hf_opcua_InputArgumentResults, parseStatusCode, ett_opcua_array_StatusCode);
1395 /* Array length field ignored: NoOfInputArgumentDiagnosticInfos */
1396 parseArrayComplex(subtree, tvb, pinfo, pOffset, "InputArgumentDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1397 /* Array length field ignored: NoOfOutputArguments */
1398 parseArrayComplex(subtree, tvb, pinfo, pOffset, "OutputArguments", "Variant", parseVariant, ett_opcua_array_Variant);
1399 proto_item_set_end(ti, tvb, *pOffset);
1400 }
1401 void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1402 {
1403 proto_item *ti;
1404 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataChangeFilter, &ti, "%s: DataChangeFilter", szFieldName);
1405 parseDataChangeTrigger(subtree, tvb, pinfo, pOffset);
1406 parseDeadbandType(subtree, tvb, pinfo, pOffset);
1407 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_DeadbandValue);
1408 proto_item_set_end(ti, tvb, *pOffset);
1409 }
1410 void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1411 {
1412 proto_item *ti;
1413 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFilter, &ti, "%s: EventFilter", szFieldName);
1414 /* Array length field ignored: NoOfSelectClauses */
1415 parseArrayComplex(subtree, tvb, pinfo, pOffset, "SelectClauses", "SimpleAttributeOperand", parseSimpleAttributeOperand, ett_opcua_array_SimpleAttributeOperand);
1416 parseContentFilter(subtree, tvb, pinfo, pOffset, "WhereClause");
1417 proto_item_set_end(ti, tvb, *pOffset);
1418 }
1419 void parseAggregateConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1420 {
1421 proto_item *ti;
1422 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateConfiguration, &ti, "%s: AggregateConfiguration", szFieldName);
1423 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseServerCapabilitiesDefaults);
1424 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_TreatUncertainAsBad);
1425 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_PercentDataBad);
1426 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_PercentDataGood);
1427 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseSlopedExtrapolation);
1428 proto_item_set_end(ti, tvb, *pOffset);
1429 }
1430 void parseAggregateFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1431 {
1432 proto_item *ti;
1433 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateFilter, &ti, "%s: AggregateFilter", szFieldName);
1434 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
1435 parseNodeId(subtree, tvb, pinfo, pOffset, "AggregateType");
1436 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_ProcessingInterval);
1437 parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "AggregateConfiguration");
1438 proto_item_set_end(ti, tvb, *pOffset);
1439 }
1440 void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1441 {
1442 proto_item *ti;
1443 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFilterResult, &ti, "%s: EventFilterResult", szFieldName);
1444 /* Array length field ignored: NoOfSelectClauseResults */
1445 parseArraySimple(subtree, tvb, pinfo, pOffset, "SelectClauseResults", "StatusCode", hf_opcua_SelectClauseResults, parseStatusCode, ett_opcua_array_StatusCode);
1446 /* Array length field ignored: NoOfSelectClauseDiagnosticInfos */
1447 parseArrayComplex(subtree, tvb, pinfo, pOffset, "SelectClauseDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1448 parseContentFilterResult(subtree, tvb, pinfo, pOffset, "WhereClauseResult");
1449 proto_item_set_end(ti, tvb, *pOffset);
1450 }
1451 void parseAggregateFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1452 {
1453 proto_item *ti;
1454 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateFilterResult, &ti, "%s: AggregateFilterResult", szFieldName);
1455 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedStartTime);
1456 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedProcessingInterval);
1457 parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "RevisedAggregateConfiguration");
1458 proto_item_set_end(ti, tvb, *pOffset);
1459 }
1460 void parseMonitoringParameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1461 {
1462 proto_item *ti;
1463 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoringParameters, &ti, "%s: MonitoringParameters", szFieldName);
1464 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ClientHandle);
1465 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_SamplingInterval);
1466 parseExtensionObject(subtree, tvb, pinfo, pOffset, "Filter");
1467 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_QueueSize);
1468 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DiscardOldest);
1469 proto_item_set_end(ti, tvb, *pOffset);
1470 }
1471 void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1472 {
1473 proto_item *ti;
1474 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemCreateRequest, &ti, "%s: MonitoredItemCreateRequest", szFieldName);
1475 parseReadValueId(subtree, tvb, pinfo, pOffset, "ItemToMonitor");
1476 parseMonitoringMode(subtree, tvb, pinfo, pOffset);
1477 parseMonitoringParameters(subtree, tvb, pinfo, pOffset, "RequestedParameters");
1478 proto_item_set_end(ti, tvb, *pOffset);
1479 }
1480 void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1481 {
1482 proto_item *ti;
1483 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemCreateResult, &ti, "%s: MonitoredItemCreateResult", szFieldName);
1484 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1485 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemId);
1486 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedSamplingInterval);
1487 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedQueueSize);
1488 parseExtensionObject(subtree, tvb, pinfo, pOffset, "FilterResult");
1489 proto_item_set_end(ti, tvb, *pOffset);
1490 }
1491 void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1492 {
1493 proto_item *ti;
1494 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemModifyRequest, &ti, "%s: MonitoredItemModifyRequest", szFieldName);
1495 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemId);
1496 parseMonitoringParameters(subtree, tvb, pinfo, pOffset, "RequestedParameters");
1497 proto_item_set_end(ti, tvb, *pOffset);
1498 }
1499 void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1500 {
1501 proto_item *ti;
1502 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemModifyResult, &ti, "%s: MonitoredItemModifyResult", szFieldName);
1503 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1504 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedSamplingInterval);
1505 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedQueueSize);
1506 parseExtensionObject(subtree, tvb, pinfo, pOffset, "FilterResult");
1507 proto_item_set_end(ti, tvb, *pOffset);
1508 }
1509 void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1510 {
1511 proto_item *ti;
1512 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NotificationMessage, &ti, "%s: NotificationMessage", szFieldName);
1513 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SequenceNumber);
1514 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_PublishTime);
1515 /* Array length field ignored: NoOfNotificationData */
1516 parseArrayComplex(subtree, tvb, pinfo, pOffset, "NotificationData", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
1517 proto_item_set_end(ti, tvb, *pOffset);
1518 }
1519 void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1520 {
1521 proto_item *ti;
1522 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataChangeNotification, &ti, "%s: DataChangeNotification", szFieldName);
1523 /* Array length field ignored: NoOfMonitoredItems */
1524 parseArrayComplex(subtree, tvb, pinfo, pOffset, "MonitoredItems", "MonitoredItemNotification", parseMonitoredItemNotification, ett_opcua_array_MonitoredItemNotification);
1525 /* Array length field ignored: NoOfDiagnosticInfos */
1526 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1527 proto_item_set_end(ti, tvb, *pOffset);
1528 }
1529 void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1530 {
1531 proto_item *ti;
1532 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemNotification, &ti, "%s: MonitoredItemNotification", szFieldName);
1533 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ClientHandle);
1534 parseDataValue(subtree, tvb, pinfo, pOffset, "Value");
1535 proto_item_set_end(ti, tvb, *pOffset);
1536 }
1537 void parseEventNotificationList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1538 {
1539 proto_item *ti;
1540 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventNotificationList, &ti, "%s: EventNotificationList", szFieldName);
1541 /* Array length field ignored: NoOfEvents */
1542 parseArrayComplex(subtree, tvb, pinfo, pOffset, "Events", "EventFieldList", parseEventFieldList, ett_opcua_array_EventFieldList);
1543 proto_item_set_end(ti, tvb, *pOffset);
1544 }
1545 void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1546 {
1547 proto_item *ti;
1548 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFieldList, &ti, "%s: EventFieldList", szFieldName);
1549 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ClientHandle);
1550 /* Array length field ignored: NoOfEventFields */
1551 parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventFields", "Variant", parseVariant, ett_opcua_array_Variant);
1552 proto_item_set_end(ti, tvb, *pOffset);
1553 }
1554 void parseHistoryEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1555 {
1556 proto_item *ti;
1557 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryEventFieldList, &ti, "%s: HistoryEventFieldList", szFieldName);
1558 /* Array length field ignored: NoOfEventFields */
1559 parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventFields", "Variant", parseVariant, ett_opcua_array_Variant);
1560 proto_item_set_end(ti, tvb, *pOffset);
1561 }
1562 void parseStatusChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1563 {
1564 proto_item *ti;
1565 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_StatusChangeNotification, &ti, "%s: StatusChangeNotification", szFieldName);
1566 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_Status);
1567 parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
1568 proto_item_set_end(ti, tvb, *pOffset);
1569 }
1570 void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1571 {
1572 proto_item *ti;
1573 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SubscriptionAcknowledgement, &ti, "%s: SubscriptionAcknowledgement", szFieldName);
1574 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId);
1575 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SequenceNumber);
1576 proto_item_set_end(ti, tvb, *pOffset);
1577 }
1578 void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1579 {
1580 proto_item *ti;
1581 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TransferResult, &ti, "%s: TransferResult", szFieldName);
1582 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1583 /* Array length field ignored: NoOfAvailableSequenceNumbers */
1584 parseArraySimple(subtree, tvb, pinfo, pOffset, "AvailableSequenceNumbers", "UInt32", hf_opcua_AvailableSequenceNumbers, parseUInt32, ett_opcua_array_UInt32);
1585 proto_item_set_end(ti, tvb, *pOffset);
1586 }
1587 void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1588 {
1589 proto_item *ti;
1590 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ScalarTestType, &ti, "%s: ScalarTestType", szFieldName);
1591 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Boolean);
1592 parseSByte(subtree, tvb, pinfo, pOffset, hf_opcua_SByte);
1593 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Byte);
1594 parseInt16(subtree, tvb, pinfo, pOffset, hf_opcua_Int16);
1595 parseUInt16(subtree, tvb, pinfo, pOffset, hf_opcua_UInt16);
1596 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_Int32);
1597 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UInt32);
1598 parseInt64(subtree, tvb, pinfo, pOffset, hf_opcua_Int64);
1599 parseUInt64(subtree, tvb, pinfo, pOffset, hf_opcua_UInt64);
1600 parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Float);
1601 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Double);
1602 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_String);
1603 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_DateTime);
1604 parseGuid(subtree, tvb, pinfo, pOffset, hf_opcua_Guid);
1605 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ByteString);
1606 parseXmlElement(subtree, tvb, pinfo, pOffset, hf_opcua_XmlElement);
1607 parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
1608 parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "ExpandedNodeId");
1609 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1610 parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
1611 parseQualifiedName(subtree, tvb, pinfo, pOffset, "QualifiedName");
1612 parseLocalizedText(subtree, tvb, pinfo, pOffset, "LocalizedText");
1613 parseExtensionObject(subtree, tvb, pinfo, pOffset, "ExtensionObject");
1614 parseDataValue(subtree, tvb, pinfo, pOffset, "DataValue");
1615 parseEnumeratedTestType(subtree, tvb, pinfo, pOffset);
1616 proto_item_set_end(ti, tvb, *pOffset);
1617 }
1618 void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1619 {
1620 proto_item *ti;
1621 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ArrayTestType, &ti, "%s: ArrayTestType", szFieldName);
1622 /* Array length field ignored: NoOfBooleans */
1623 parseArraySimple(subtree, tvb, pinfo, pOffset, "Booleans", "Boolean", hf_opcua_Booleans, parseBoolean, ett_opcua_array_Boolean);
1624 /* Array length field ignored: NoOfSBytes */
1625 parseArraySimple(subtree, tvb, pinfo, pOffset, "SBytes", "SByte", hf_opcua_SBytes, parseSByte, ett_opcua_array_SByte);
1626 /* Array length field ignored: NoOfInt16s */
1627 parseArraySimple(subtree, tvb, pinfo, pOffset, "Int16s", "Int16", hf_opcua_Int16s, parseInt16, ett_opcua_array_Int16);
1628 /* Array length field ignored: NoOfUInt16s */
1629 parseArraySimple(subtree, tvb, pinfo, pOffset, "UInt16s", "UInt16", hf_opcua_UInt16s, parseUInt16, ett_opcua_array_UInt16);
1630 /* Array length field ignored: NoOfInt32s */
1631 parseArraySimple(subtree, tvb, pinfo, pOffset, "Int32s", "Int32", hf_opcua_Int32s, parseInt32, ett_opcua_array_Int32);
1632 /* Array length field ignored: NoOfUInt32s */
1633 parseArraySimple(subtree, tvb, pinfo, pOffset, "UInt32s", "UInt32", hf_opcua_UInt32s, parseUInt32, ett_opcua_array_UInt32);
1634 /* Array length field ignored: NoOfInt64s */
1635 parseArraySimple(subtree, tvb, pinfo, pOffset, "Int64s", "Int64", hf_opcua_Int64s, parseInt64, ett_opcua_array_Int64);
1636 /* Array length field ignored: NoOfUInt64s */
1637 parseArraySimple(subtree, tvb, pinfo, pOffset, "UInt64s", "UInt64", hf_opcua_UInt64s, parseUInt64, ett_opcua_array_UInt64);
1638 /* Array length field ignored: NoOfFloats */
1639 parseArraySimple(subtree, tvb, pinfo, pOffset, "Floats", "Float", hf_opcua_Floats, parseFloat, ett_opcua_array_Float);
1640 /* Array length field ignored: NoOfDoubles */
1641 parseArraySimple(subtree, tvb, pinfo, pOffset, "Doubles", "Double", hf_opcua_Doubles, parseDouble, ett_opcua_array_Double);
1642 /* Array length field ignored: NoOfStrings */
1643 parseArraySimple(subtree, tvb, pinfo, pOffset, "Strings", "String", hf_opcua_Strings, parseString, ett_opcua_array_String);
1644 /* Array length field ignored: NoOfDateTimes */
1645 parseArraySimple(subtree, tvb, pinfo, pOffset, "DateTimes", "DateTime", hf_opcua_DateTimes, parseDateTime, ett_opcua_array_DateTime);
1646 /* Array length field ignored: NoOfGuids */
1647 parseArraySimple(subtree, tvb, pinfo, pOffset, "Guids", "Guid", hf_opcua_Guids, parseGuid, ett_opcua_array_Guid);
1648 /* Array length field ignored: NoOfByteStrings */
1649 parseArraySimple(subtree, tvb, pinfo, pOffset, "ByteStrings", "ByteString", hf_opcua_ByteStrings, parseByteString, ett_opcua_array_ByteString);
1650 /* Array length field ignored: NoOfXmlElements */
1651 parseArraySimple(subtree, tvb, pinfo, pOffset, "XmlElements", "XmlElement", hf_opcua_XmlElements, parseXmlElement, ett_opcua_array_XmlElement);
1652 /* Array length field ignored: NoOfNodeIds */
1653 parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId);
1654 /* Array length field ignored: NoOfExpandedNodeIds */
1655 parseArrayComplex(subtree, tvb, pinfo, pOffset, "ExpandedNodeIds", "ExpandedNodeId", parseExpandedNodeId, ett_opcua_array_ExpandedNodeId);
1656 /* Array length field ignored: NoOfStatusCodes */
1657 parseArraySimple(subtree, tvb, pinfo, pOffset, "StatusCodes", "StatusCode", hf_opcua_StatusCodes, parseStatusCode, ett_opcua_array_StatusCode);
1658 /* Array length field ignored: NoOfDiagnosticInfos */
1659 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
1660 /* Array length field ignored: NoOfQualifiedNames */
1661 parseArrayComplex(subtree, tvb, pinfo, pOffset, "QualifiedNames", "QualifiedName", parseQualifiedName, ett_opcua_array_QualifiedName);
1662 /* Array length field ignored: NoOfLocalizedTexts */
1663 parseArrayComplex(subtree, tvb, pinfo, pOffset, "LocalizedTexts", "LocalizedText", parseLocalizedText, ett_opcua_array_LocalizedText);
1664 /* Array length field ignored: NoOfExtensionObjects */
1665 parseArrayComplex(subtree, tvb, pinfo, pOffset, "ExtensionObjects", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
1666 /* Array length field ignored: NoOfDataValues */
1667 parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
1668 /* Array length field ignored: NoOfVariants */
1669 parseArrayComplex(subtree, tvb, pinfo, pOffset, "Variants", "Variant", parseVariant, ett_opcua_array_Variant);
1670 /* Array length field ignored: NoOfEnumeratedValues */
1671 parseArrayEnum(subtree, tvb, pinfo, pOffset, "EnumeratedValues", "EnumeratedTestType", parseEnumeratedTestType, ett_opcua_array_EnumeratedTestType);
1672 proto_item_set_end(ti, tvb, *pOffset);
1673 }
1674 void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1675 {
1676 proto_item *ti;
1677 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CompositeTestType, &ti, "%s: CompositeTestType", szFieldName);
1678 parseScalarTestType(subtree, tvb, pinfo, pOffset, "Field1");
1679 parseArrayTestType(subtree, tvb, pinfo, pOffset, "Field2");
1680 proto_item_set_end(ti, tvb, *pOffset);
1681 }
1682 void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1683 {
1684 proto_item *ti;
1685 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BuildInfo, &ti, "%s: BuildInfo", szFieldName);
1686 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
1687 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ManufacturerName);
1688 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductName);
1689 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SoftwareVersion);
1690 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_BuildNumber);
1691 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_BuildDate);
1692 proto_item_set_end(ti, tvb, *pOffset);
1693 }
1694 void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1695 {
1696 proto_item *ti;
1697 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RedundantServerDataType, &ti, "%s: RedundantServerDataType", szFieldName);
1698 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerId);
1699 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_ServiceLevel);
1700 parseServerState(subtree, tvb, pinfo, pOffset);
1701 proto_item_set_end(ti, tvb, *pOffset);
1702 }
1703 void parseEndpointUrlListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1704 {
1705 proto_item *ti;
1706 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointUrlListDataType, &ti, "%s: EndpointUrlListDataType", szFieldName);
1707 /* Array length field ignored: NoOfEndpointUrlList */
1708 parseArraySimple(subtree, tvb, pinfo, pOffset, "EndpointUrlList", "String", hf_opcua_EndpointUrlList, parseString, ett_opcua_array_String);
1709 proto_item_set_end(ti, tvb, *pOffset);
1710 }
1711 void parseNetworkGroupDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1712 {
1713 proto_item *ti;
1714 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NetworkGroupDataType, &ti, "%s: NetworkGroupDataType", szFieldName);
1715 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerUri);
1716 /* Array length field ignored: NoOfNetworkPaths */
1717 parseArrayComplex(subtree, tvb, pinfo, pOffset, "NetworkPaths", "EndpointUrlListDataType", parseEndpointUrlListDataType, ett_opcua_array_EndpointUrlListDataType);
1718 proto_item_set_end(ti, tvb, *pOffset);
1719 }
1720 void parseSamplingIntervalDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1721 {
1722 proto_item *ti;
1723 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SamplingIntervalDiagnosticsDataType, &ti, "%s: SamplingIntervalDiagnosticsDataType", szFieldName);
1724 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_SamplingInterval);
1725 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemCount);
1726 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxMonitoredItemCount);
1727 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DisabledMonitoredItemCount);
1728 proto_item_set_end(ti, tvb, *pOffset);
1729 }
1730 void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1731 {
1732 proto_item *ti;
1733 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerDiagnosticsSummaryDataType, &ti, "%s: ServerDiagnosticsSummaryDataType", szFieldName);
1734 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ServerViewCount);
1735 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentSessionCount);
1736 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CumulatedSessionCount);
1737 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityRejectedSessionCount);
1738 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RejectedSessionCount);
1739 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SessionTimeoutCount);
1740 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SessionAbortCount);
1741 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentSubscriptionCount);
1742 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CumulatedSubscriptionCount);
1743 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingIntervalCount);
1744 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityRejectedRequestsCount);
1745 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RejectedRequestsCount);
1746 proto_item_set_end(ti, tvb, *pOffset);
1747 }
1748 void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1749 {
1750 proto_item *ti;
1751 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerStatusDataType, &ti, "%s: ServerStatusDataType", szFieldName);
1752 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
1753 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentTime);
1754 parseServerState(subtree, tvb, pinfo, pOffset);
1755 parseBuildInfo(subtree, tvb, pinfo, pOffset, "BuildInfo");
1756 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecondsTillShutdown);
1757 parseLocalizedText(subtree, tvb, pinfo, pOffset, "ShutdownReason");
1758 proto_item_set_end(ti, tvb, *pOffset);
1759 }
1760 void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1761 {
1762 proto_item *ti;
1763 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SessionDiagnosticsDataType, &ti, "%s: SessionDiagnosticsDataType", szFieldName);
1764 parseNodeId(subtree, tvb, pinfo, pOffset, "SessionId");
1765 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SessionName);
1766 parseApplicationDescription(subtree, tvb, pinfo, pOffset, "ClientDescription");
1767 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerUri);
1768 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EndpointUrl);
1769 /* Array length field ignored: NoOfLocaleIds */
1770 parseArraySimple(subtree, tvb, pinfo, pOffset, "LocaleIds", "String", hf_opcua_LocaleIds, parseString, ett_opcua_array_String);
1771 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_ActualSessionTimeout);
1772 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxResponseMessageSize);
1773 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ClientConnectionTime);
1774 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ClientLastContactTime);
1775 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentSubscriptionsCount);
1776 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentMonitoredItemsCount);
1777 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentPublishRequestsInQueue);
1778 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "TotalRequestCount");
1779 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UnauthorizedRequestCount);
1780 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "ReadCount");
1781 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "HistoryReadCount");
1782 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "WriteCount");
1783 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "HistoryUpdateCount");
1784 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "CallCount");
1785 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "CreateMonitoredItemsCount");
1786 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "ModifyMonitoredItemsCount");
1787 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "SetMonitoringModeCount");
1788 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "SetTriggeringCount");
1789 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteMonitoredItemsCount");
1790 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "CreateSubscriptionCount");
1791 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "ModifySubscriptionCount");
1792 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "SetPublishingModeCount");
1793 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "PublishCount");
1794 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "RepublishCount");
1795 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "TransferSubscriptionsCount");
1796 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteSubscriptionsCount");
1797 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "AddNodesCount");
1798 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "AddReferencesCount");
1799 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteNodesCount");
1800 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteReferencesCount");
1801 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "BrowseCount");
1802 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "BrowseNextCount");
1803 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "TranslateBrowsePathsToNodeIdsCount");
1804 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "QueryFirstCount");
1805 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "QueryNextCount");
1806 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "RegisterNodesCount");
1807 parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "UnregisterNodesCount");
1808 proto_item_set_end(ti, tvb, *pOffset);
1809 }
1810 void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1811 {
1812 proto_item *ti;
1813 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SessionSecurityDiagnosticsDataType, &ti, "%s: SessionSecurityDiagnosticsDataType", szFieldName);
1814 parseNodeId(subtree, tvb, pinfo, pOffset, "SessionId");
1815 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientUserIdOfSession);
1816 /* Array length field ignored: NoOfClientUserIdHistory */
1817 parseArraySimple(subtree, tvb, pinfo, pOffset, "ClientUserIdHistory", "String", hf_opcua_ClientUserIdHistory, parseString, ett_opcua_array_String);
1818 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_AuthenticationMechanism);
1819 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Encoding);
1820 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_TransportProtocol);
1821 parseMessageSecurityMode(subtree, tvb, pinfo, pOffset);
1822 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
1823 parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientCertificate);
1824 proto_item_set_end(ti, tvb, *pOffset);
1825 }
1826 void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1827 {
1828 proto_item *ti;
1829 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServiceCounterDataType, &ti, "%s: ServiceCounterDataType", szFieldName);
1830 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TotalCount);
1831 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ErrorCount);
1832 proto_item_set_end(ti, tvb, *pOffset);
1833 }
1834 void parseStatusResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1835 {
1836 proto_item *ti;
1837 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_StatusResult, &ti, "%s: StatusResult", szFieldName);
1838 parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
1839 parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
1840 proto_item_set_end(ti, tvb, *pOffset);
1841 }
1842 void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1843 {
1844 proto_item *ti;
1845 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SubscriptionDiagnosticsDataType, &ti, "%s: SubscriptionDiagnosticsDataType", szFieldName);
1846 parseNodeId(subtree, tvb, pinfo, pOffset, "SessionId");
1847 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId);
1848 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Priority);
1849 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingInterval);
1850 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxKeepAliveCount);
1851 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxLifetimeCount);
1852 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxNotificationsPerPublish);
1853 parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingEnabled);
1854 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ModifyCount);
1855 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_EnableCount);
1856 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DisableCount);
1857 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RepublishRequestCount);
1858 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RepublishMessageRequestCount);
1859 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RepublishMessageCount);
1860 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TransferRequestCount);
1861 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TransferredToAltClientCount);
1862 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TransferredToSameClientCount);
1863 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_PublishRequestCount);
1864 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DataChangeNotificationsCount);
1865 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotificationsCount);
1866 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NotificationsCount);
1867 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_LatePublishRequestCount);
1868 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentKeepAliveCount);
1869 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentLifetimeCount);
1870 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UnacknowledgedMessageCount);
1871 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DiscardedMessageCount);
1872 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemCount);
1873 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DisabledMonitoredItemCount);
1874 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoringQueueOverflowCount);
1875 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NextSequenceNumber);
1876 parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_EventQueueOverFlowCount);
1877 proto_item_set_end(ti, tvb, *pOffset);
1878 }
1879 void parseModelChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1880 {
1881 proto_item *ti;
1882 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ModelChangeStructureDataType, &ti, "%s: ModelChangeStructureDataType", szFieldName);
1883 parseNodeId(subtree, tvb, pinfo, pOffset, "Affected");
1884 parseNodeId(subtree, tvb, pinfo, pOffset, "AffectedType");
1885 parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Verb);
1886 proto_item_set_end(ti, tvb, *pOffset);
1887 }
1888 void parseSemanticChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1889 {
1890 proto_item *ti;
1891 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SemanticChangeStructureDataType, &ti, "%s: SemanticChangeStructureDataType", szFieldName);
1892 parseNodeId(subtree, tvb, pinfo, pOffset, "Affected");
1893 parseNodeId(subtree, tvb, pinfo, pOffset, "AffectedType");
1894 proto_item_set_end(ti, tvb, *pOffset);
1895 }
1896 void parseRange(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1897 {
1898 proto_item *ti;
1899 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Range, &ti, "%s: Range", szFieldName);
1900 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Low);
1901 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_High);
1902 proto_item_set_end(ti, tvb, *pOffset);
1903 }
1904 void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1905 {
1906 proto_item *ti;
1907 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EUInformation, &ti, "%s: EUInformation", szFieldName);
1908 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_NamespaceUri);
1909 parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UnitId);
1910 parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
1911 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
1912 proto_item_set_end(ti, tvb, *pOffset);
1913 }
1914 void parseComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1915 {
1916 proto_item *ti;
1917 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ComplexNumberType, &ti, "%s: ComplexNumberType", szFieldName);
1918 parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Real);
1919 parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Imaginary);
1920 proto_item_set_end(ti, tvb, *pOffset);
1921 }
1922 void parseDoubleComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1923 {
1924 proto_item *ti;
1925 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DoubleComplexNumberType, &ti, "%s: DoubleComplexNumberType", szFieldName);
1926 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Real);
1927 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Imaginary);
1928 proto_item_set_end(ti, tvb, *pOffset);
1929 }
1930 void parseAxisInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1931 {
1932 proto_item *ti;
1933 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AxisInformation, &ti, "%s: AxisInformation", szFieldName);
1934 parseEUInformation(subtree, tvb, pinfo, pOffset, "EngineeringUnits");
1935 parseRange(subtree, tvb, pinfo, pOffset, "EURange");
1936 parseLocalizedText(subtree, tvb, pinfo, pOffset, "Title");
1937 parseAxisScaleEnumeration(subtree, tvb, pinfo, pOffset);
1938 /* Array length field ignored: NoOfAxisSteps */
1939 parseArraySimple(subtree, tvb, pinfo, pOffset, "AxisSteps", "Double", hf_opcua_AxisSteps, parseDouble, ett_opcua_array_Double);
1940 proto_item_set_end(ti, tvb, *pOffset);
1941 }
1942 void parseXVType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1943 {
1944 proto_item *ti;
1945 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_XVType, &ti, "%s: XVType", szFieldName);
1946 parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_X);
1947 parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Value);
1948 proto_item_set_end(ti, tvb, *pOffset);
1949 }
1950 void parseProgramDiagnosticDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1951 {
1952 proto_item *ti;
1953 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ProgramDiagnosticDataType, &ti, "%s: ProgramDiagnosticDataType", szFieldName);
1954 parseNodeId(subtree, tvb, pinfo, pOffset, "CreateSessionId");
1955 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_CreateClientName);
1956 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_InvocationCreationTime);
1957 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_LastTransitionTime);
1958 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_LastMethodCall);
1959 parseNodeId(subtree, tvb, pinfo, pOffset, "LastMethodSessionId");
1960 /* Array length field ignored: NoOfLastMethodInputArguments */
1961 parseArrayComplex(subtree, tvb, pinfo, pOffset, "LastMethodInputArguments", "Argument", parseArgument, ett_opcua_array_Argument);
1962 /* Array length field ignored: NoOfLastMethodOutputArguments */
1963 parseArrayComplex(subtree, tvb, pinfo, pOffset, "LastMethodOutputArguments", "Argument", parseArgument, ett_opcua_array_Argument);
1964 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_LastMethodCallTime);
1965 parseStatusResult(subtree, tvb, pinfo, pOffset, "LastMethodReturnStatus");
1966 proto_item_set_end(ti, tvb, *pOffset);
1967 }
1968 void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
1969 {
1970 proto_item *ti;
1971 proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Annotation, &ti, "%s: Annotation", szFieldName);
1972 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Message);
1973 parseString(subtree, tvb, pinfo, pOffset, hf_opcua_UserName);
1974 parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_AnnotationTime);
1975 proto_item_set_end(ti, tvb, *pOffset);
1976 }
1977  
1978 /** Setup protocol subtree array */
1979 static gint *ett[] =
1980 {
1981 &ett_opcua_TrustListDataType,
1982 &ett_opcua_array_TrustListDataType,
1983 &ett_opcua_Node,
1984 &ett_opcua_array_Node,
1985 &ett_opcua_InstanceNode,
1986 &ett_opcua_array_InstanceNode,
1987 &ett_opcua_TypeNode,
1988 &ett_opcua_array_TypeNode,
1989 &ett_opcua_ObjectNode,
1990 &ett_opcua_array_ObjectNode,
1991 &ett_opcua_ObjectTypeNode,
1992 &ett_opcua_array_ObjectTypeNode,
1993 &ett_opcua_VariableNode,
1994 &ett_opcua_array_VariableNode,
1995 &ett_opcua_VariableTypeNode,
1996 &ett_opcua_array_VariableTypeNode,
1997 &ett_opcua_ReferenceTypeNode,
1998 &ett_opcua_array_ReferenceTypeNode,
1999 &ett_opcua_MethodNode,
2000 &ett_opcua_array_MethodNode,
2001 &ett_opcua_ViewNode,
2002 &ett_opcua_array_ViewNode,
2003 &ett_opcua_DataTypeNode,
2004 &ett_opcua_array_DataTypeNode,
2005 &ett_opcua_ReferenceNode,
2006 &ett_opcua_array_ReferenceNode,
2007 &ett_opcua_Argument,
2008 &ett_opcua_array_Argument,
2009 &ett_opcua_EnumValueType,
2010 &ett_opcua_array_EnumValueType,
2011 &ett_opcua_OptionSet,
2012 &ett_opcua_array_OptionSet,
2013 &ett_opcua_TimeZoneDataType,
2014 &ett_opcua_array_TimeZoneDataType,
2015 &ett_opcua_ApplicationDescription,
2016 &ett_opcua_array_ApplicationDescription,
2017 &ett_opcua_RequestHeader,
2018 &ett_opcua_array_RequestHeader,
2019 &ett_opcua_ResponseHeader,
2020 &ett_opcua_array_ResponseHeader,
2021 &ett_opcua_ServerOnNetwork,
2022 &ett_opcua_array_ServerOnNetwork,
2023 &ett_opcua_UserTokenPolicy,
2024 &ett_opcua_array_UserTokenPolicy,
2025 &ett_opcua_EndpointDescription,
2026 &ett_opcua_array_EndpointDescription,
2027 &ett_opcua_RegisteredServer,
2028 &ett_opcua_array_RegisteredServer,
2029 &ett_opcua_MdnsDiscoveryConfiguration,
2030 &ett_opcua_array_MdnsDiscoveryConfiguration,
2031 &ett_opcua_ChannelSecurityToken,
2032 &ett_opcua_array_ChannelSecurityToken,
2033 &ett_opcua_SignedSoftwareCertificate,
2034 &ett_opcua_array_SignedSoftwareCertificate,
2035 &ett_opcua_SignatureData,
2036 &ett_opcua_array_SignatureData,
2037 &ett_opcua_UserIdentityToken,
2038 &ett_opcua_array_UserIdentityToken,
2039 &ett_opcua_AnonymousIdentityToken,
2040 &ett_opcua_array_AnonymousIdentityToken,
2041 &ett_opcua_UserNameIdentityToken,
2042 &ett_opcua_array_UserNameIdentityToken,
2043 &ett_opcua_X509IdentityToken,
2044 &ett_opcua_array_X509IdentityToken,
2045 &ett_opcua_KerberosIdentityToken,
2046 &ett_opcua_array_KerberosIdentityToken,
2047 &ett_opcua_IssuedIdentityToken,
2048 &ett_opcua_array_IssuedIdentityToken,
2049 &ett_opcua_NodeAttributes,
2050 &ett_opcua_array_NodeAttributes,
2051 &ett_opcua_ObjectAttributes,
2052 &ett_opcua_array_ObjectAttributes,
2053 &ett_opcua_VariableAttributes,
2054 &ett_opcua_array_VariableAttributes,
2055 &ett_opcua_MethodAttributes,
2056 &ett_opcua_array_MethodAttributes,
2057 &ett_opcua_ObjectTypeAttributes,
2058 &ett_opcua_array_ObjectTypeAttributes,
2059 &ett_opcua_VariableTypeAttributes,
2060 &ett_opcua_array_VariableTypeAttributes,
2061 &ett_opcua_ReferenceTypeAttributes,
2062 &ett_opcua_array_ReferenceTypeAttributes,
2063 &ett_opcua_DataTypeAttributes,
2064 &ett_opcua_array_DataTypeAttributes,
2065 &ett_opcua_ViewAttributes,
2066 &ett_opcua_array_ViewAttributes,
2067 &ett_opcua_AddNodesItem,
2068 &ett_opcua_array_AddNodesItem,
2069 &ett_opcua_AddNodesResult,
2070 &ett_opcua_array_AddNodesResult,
2071 &ett_opcua_AddReferencesItem,
2072 &ett_opcua_array_AddReferencesItem,
2073 &ett_opcua_DeleteNodesItem,
2074 &ett_opcua_array_DeleteNodesItem,
2075 &ett_opcua_DeleteReferencesItem,
2076 &ett_opcua_array_DeleteReferencesItem,
2077 &ett_opcua_ViewDescription,
2078 &ett_opcua_array_ViewDescription,
2079 &ett_opcua_BrowseDescription,
2080 &ett_opcua_array_BrowseDescription,
2081 &ett_opcua_ReferenceDescription,
2082 &ett_opcua_array_ReferenceDescription,
2083 &ett_opcua_BrowseResult,
2084 &ett_opcua_array_BrowseResult,
2085 &ett_opcua_RelativePathElement,
2086 &ett_opcua_array_RelativePathElement,
2087 &ett_opcua_RelativePath,
2088 &ett_opcua_array_RelativePath,
2089 &ett_opcua_BrowsePath,
2090 &ett_opcua_array_BrowsePath,
2091 &ett_opcua_BrowsePathTarget,
2092 &ett_opcua_array_BrowsePathTarget,
2093 &ett_opcua_BrowsePathResult,
2094 &ett_opcua_array_BrowsePathResult,
2095 &ett_opcua_EndpointConfiguration,
2096 &ett_opcua_array_EndpointConfiguration,
2097 &ett_opcua_SupportedProfile,
2098 &ett_opcua_array_SupportedProfile,
2099 &ett_opcua_SoftwareCertificate,
2100 &ett_opcua_array_SoftwareCertificate,
2101 &ett_opcua_QueryDataDescription,
2102 &ett_opcua_array_QueryDataDescription,
2103 &ett_opcua_NodeTypeDescription,
2104 &ett_opcua_array_NodeTypeDescription,
2105 &ett_opcua_QueryDataSet,
2106 &ett_opcua_array_QueryDataSet,
2107 &ett_opcua_NodeReference,
2108 &ett_opcua_array_NodeReference,
2109 &ett_opcua_ContentFilterElement,
2110 &ett_opcua_array_ContentFilterElement,
2111 &ett_opcua_ContentFilter,
2112 &ett_opcua_array_ContentFilter,
2113 &ett_opcua_ElementOperand,
2114 &ett_opcua_array_ElementOperand,
2115 &ett_opcua_LiteralOperand,
2116 &ett_opcua_array_LiteralOperand,
2117 &ett_opcua_AttributeOperand,
2118 &ett_opcua_array_AttributeOperand,
2119 &ett_opcua_SimpleAttributeOperand,
2120 &ett_opcua_array_SimpleAttributeOperand,
2121 &ett_opcua_ContentFilterElementResult,
2122 &ett_opcua_array_ContentFilterElementResult,
2123 &ett_opcua_ContentFilterResult,
2124 &ett_opcua_array_ContentFilterResult,
2125 &ett_opcua_ParsingResult,
2126 &ett_opcua_array_ParsingResult,
2127 &ett_opcua_ReadValueId,
2128 &ett_opcua_array_ReadValueId,
2129 &ett_opcua_HistoryReadValueId,
2130 &ett_opcua_array_HistoryReadValueId,
2131 &ett_opcua_HistoryReadResult,
2132 &ett_opcua_array_HistoryReadResult,
2133 &ett_opcua_ReadEventDetails,
2134 &ett_opcua_array_ReadEventDetails,
2135 &ett_opcua_ReadRawModifiedDetails,
2136 &ett_opcua_array_ReadRawModifiedDetails,
2137 &ett_opcua_ReadProcessedDetails,
2138 &ett_opcua_array_ReadProcessedDetails,
2139 &ett_opcua_ReadAtTimeDetails,
2140 &ett_opcua_array_ReadAtTimeDetails,
2141 &ett_opcua_HistoryData,
2142 &ett_opcua_array_HistoryData,
2143 &ett_opcua_ModificationInfo,
2144 &ett_opcua_array_ModificationInfo,
2145 &ett_opcua_HistoryModifiedData,
2146 &ett_opcua_array_HistoryModifiedData,
2147 &ett_opcua_HistoryEvent,
2148 &ett_opcua_array_HistoryEvent,
2149 &ett_opcua_WriteValue,
2150 &ett_opcua_array_WriteValue,
2151 &ett_opcua_HistoryUpdateDetails,
2152 &ett_opcua_array_HistoryUpdateDetails,
2153 &ett_opcua_UpdateDataDetails,
2154 &ett_opcua_array_UpdateDataDetails,
2155 &ett_opcua_UpdateStructureDataDetails,
2156 &ett_opcua_array_UpdateStructureDataDetails,
2157 &ett_opcua_UpdateEventDetails,
2158 &ett_opcua_array_UpdateEventDetails,
2159 &ett_opcua_DeleteRawModifiedDetails,
2160 &ett_opcua_array_DeleteRawModifiedDetails,
2161 &ett_opcua_DeleteAtTimeDetails,
2162 &ett_opcua_array_DeleteAtTimeDetails,
2163 &ett_opcua_DeleteEventDetails,
2164 &ett_opcua_array_DeleteEventDetails,
2165 &ett_opcua_HistoryUpdateResult,
2166 &ett_opcua_array_HistoryUpdateResult,
2167 &ett_opcua_CallMethodRequest,
2168 &ett_opcua_array_CallMethodRequest,
2169 &ett_opcua_CallMethodResult,
2170 &ett_opcua_array_CallMethodResult,
2171 &ett_opcua_DataChangeFilter,
2172 &ett_opcua_array_DataChangeFilter,
2173 &ett_opcua_EventFilter,
2174 &ett_opcua_array_EventFilter,
2175 &ett_opcua_AggregateConfiguration,
2176 &ett_opcua_array_AggregateConfiguration,
2177 &ett_opcua_AggregateFilter,
2178 &ett_opcua_array_AggregateFilter,
2179 &ett_opcua_EventFilterResult,
2180 &ett_opcua_array_EventFilterResult,
2181 &ett_opcua_AggregateFilterResult,
2182 &ett_opcua_array_AggregateFilterResult,
2183 &ett_opcua_MonitoringParameters,
2184 &ett_opcua_array_MonitoringParameters,
2185 &ett_opcua_MonitoredItemCreateRequest,
2186 &ett_opcua_array_MonitoredItemCreateRequest,
2187 &ett_opcua_MonitoredItemCreateResult,
2188 &ett_opcua_array_MonitoredItemCreateResult,
2189 &ett_opcua_MonitoredItemModifyRequest,
2190 &ett_opcua_array_MonitoredItemModifyRequest,
2191 &ett_opcua_MonitoredItemModifyResult,
2192 &ett_opcua_array_MonitoredItemModifyResult,
2193 &ett_opcua_NotificationMessage,
2194 &ett_opcua_array_NotificationMessage,
2195 &ett_opcua_DataChangeNotification,
2196 &ett_opcua_array_DataChangeNotification,
2197 &ett_opcua_MonitoredItemNotification,
2198 &ett_opcua_array_MonitoredItemNotification,
2199 &ett_opcua_EventNotificationList,
2200 &ett_opcua_array_EventNotificationList,
2201 &ett_opcua_EventFieldList,
2202 &ett_opcua_array_EventFieldList,
2203 &ett_opcua_HistoryEventFieldList,
2204 &ett_opcua_array_HistoryEventFieldList,
2205 &ett_opcua_StatusChangeNotification,
2206 &ett_opcua_array_StatusChangeNotification,
2207 &ett_opcua_SubscriptionAcknowledgement,
2208 &ett_opcua_array_SubscriptionAcknowledgement,
2209 &ett_opcua_TransferResult,
2210 &ett_opcua_array_TransferResult,
2211 &ett_opcua_ScalarTestType,
2212 &ett_opcua_array_ScalarTestType,
2213 &ett_opcua_ArrayTestType,
2214 &ett_opcua_array_ArrayTestType,
2215 &ett_opcua_CompositeTestType,
2216 &ett_opcua_array_CompositeTestType,
2217 &ett_opcua_BuildInfo,
2218 &ett_opcua_array_BuildInfo,
2219 &ett_opcua_RedundantServerDataType,
2220 &ett_opcua_array_RedundantServerDataType,
2221 &ett_opcua_EndpointUrlListDataType,
2222 &ett_opcua_array_EndpointUrlListDataType,
2223 &ett_opcua_NetworkGroupDataType,
2224 &ett_opcua_array_NetworkGroupDataType,
2225 &ett_opcua_SamplingIntervalDiagnosticsDataType,
2226 &ett_opcua_array_SamplingIntervalDiagnosticsDataType,
2227 &ett_opcua_ServerDiagnosticsSummaryDataType,
2228 &ett_opcua_array_ServerDiagnosticsSummaryDataType,
2229 &ett_opcua_ServerStatusDataType,
2230 &ett_opcua_array_ServerStatusDataType,
2231 &ett_opcua_SessionDiagnosticsDataType,
2232 &ett_opcua_array_SessionDiagnosticsDataType,
2233 &ett_opcua_SessionSecurityDiagnosticsDataType,
2234 &ett_opcua_array_SessionSecurityDiagnosticsDataType,
2235 &ett_opcua_ServiceCounterDataType,
2236 &ett_opcua_array_ServiceCounterDataType,
2237 &ett_opcua_StatusResult,
2238 &ett_opcua_array_StatusResult,
2239 &ett_opcua_SubscriptionDiagnosticsDataType,
2240 &ett_opcua_array_SubscriptionDiagnosticsDataType,
2241 &ett_opcua_ModelChangeStructureDataType,
2242 &ett_opcua_array_ModelChangeStructureDataType,
2243 &ett_opcua_SemanticChangeStructureDataType,
2244 &ett_opcua_array_SemanticChangeStructureDataType,
2245 &ett_opcua_Range,
2246 &ett_opcua_array_Range,
2247 &ett_opcua_EUInformation,
2248 &ett_opcua_array_EUInformation,
2249 &ett_opcua_ComplexNumberType,
2250 &ett_opcua_array_ComplexNumberType,
2251 &ett_opcua_DoubleComplexNumberType,
2252 &ett_opcua_array_DoubleComplexNumberType,
2253 &ett_opcua_AxisInformation,
2254 &ett_opcua_array_AxisInformation,
2255 &ett_opcua_XVType,
2256 &ett_opcua_array_XVType,
2257 &ett_opcua_ProgramDiagnosticDataType,
2258 &ett_opcua_array_ProgramDiagnosticDataType,
2259 &ett_opcua_Annotation,
2260 &ett_opcua_array_Annotation,
2261 };
2262  
2263 void registerComplexTypes(void)
2264 {
2265 proto_register_subtree_array(ett, array_length(ett));
2266 }
2267