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