2255 lines
128 KiB
C
2255 lines
128 KiB
C
/******************************************************************************
|
|
** Copyright (C) 2006-2015 ascolab GmbH. All Rights Reserved.
|
|
** Web: http://www.ascolab.com
|
|
**
|
|
** This program is free software; you can redistribute it and/or
|
|
** modify it under the terms of the GNU General Public License
|
|
** as published by the Free Software Foundation; either version 2
|
|
** of the License, or (at your option) any later version.
|
|
**
|
|
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
|
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
**
|
|
** Project: OpcUa Wireshark Plugin
|
|
**
|
|
** Description: OpcUa Complex Type Parser
|
|
**
|
|
** This file was autogenerated on 13.10.2015.
|
|
** DON'T MODIFY THIS FILE!
|
|
**
|
|
******************************************************************************/
|
|
|
|
#include "config.h"
|
|
|
|
#include <epan/packet.h>
|
|
#include "opcua_complextypeparser.h"
|
|
#include "opcua_enumparser.h"
|
|
#include "opcua_simpletypes.h"
|
|
#include "opcua_hfindeces.h"
|
|
|
|
gint ett_opcua_TrustListDataType = -1;
|
|
gint ett_opcua_array_TrustListDataType = -1;
|
|
gint ett_opcua_Node = -1;
|
|
gint ett_opcua_array_Node = -1;
|
|
gint ett_opcua_InstanceNode = -1;
|
|
gint ett_opcua_array_InstanceNode = -1;
|
|
gint ett_opcua_TypeNode = -1;
|
|
gint ett_opcua_array_TypeNode = -1;
|
|
gint ett_opcua_ObjectNode = -1;
|
|
gint ett_opcua_array_ObjectNode = -1;
|
|
gint ett_opcua_ObjectTypeNode = -1;
|
|
gint ett_opcua_array_ObjectTypeNode = -1;
|
|
gint ett_opcua_VariableNode = -1;
|
|
gint ett_opcua_array_VariableNode = -1;
|
|
gint ett_opcua_VariableTypeNode = -1;
|
|
gint ett_opcua_array_VariableTypeNode = -1;
|
|
gint ett_opcua_ReferenceTypeNode = -1;
|
|
gint ett_opcua_array_ReferenceTypeNode = -1;
|
|
gint ett_opcua_MethodNode = -1;
|
|
gint ett_opcua_array_MethodNode = -1;
|
|
gint ett_opcua_ViewNode = -1;
|
|
gint ett_opcua_array_ViewNode = -1;
|
|
gint ett_opcua_DataTypeNode = -1;
|
|
gint ett_opcua_array_DataTypeNode = -1;
|
|
gint ett_opcua_ReferenceNode = -1;
|
|
gint ett_opcua_array_ReferenceNode = -1;
|
|
gint ett_opcua_Argument = -1;
|
|
gint ett_opcua_array_Argument = -1;
|
|
gint ett_opcua_EnumValueType = -1;
|
|
gint ett_opcua_array_EnumValueType = -1;
|
|
gint ett_opcua_OptionSet = -1;
|
|
gint ett_opcua_array_OptionSet = -1;
|
|
gint ett_opcua_TimeZoneDataType = -1;
|
|
gint ett_opcua_array_TimeZoneDataType = -1;
|
|
gint ett_opcua_ApplicationDescription = -1;
|
|
gint ett_opcua_array_ApplicationDescription = -1;
|
|
gint ett_opcua_RequestHeader = -1;
|
|
gint ett_opcua_array_RequestHeader = -1;
|
|
gint ett_opcua_ResponseHeader = -1;
|
|
gint ett_opcua_array_ResponseHeader = -1;
|
|
gint ett_opcua_ServerOnNetwork = -1;
|
|
gint ett_opcua_array_ServerOnNetwork = -1;
|
|
gint ett_opcua_UserTokenPolicy = -1;
|
|
gint ett_opcua_array_UserTokenPolicy = -1;
|
|
gint ett_opcua_EndpointDescription = -1;
|
|
gint ett_opcua_array_EndpointDescription = -1;
|
|
gint ett_opcua_RegisteredServer = -1;
|
|
gint ett_opcua_array_RegisteredServer = -1;
|
|
gint ett_opcua_MdnsDiscoveryConfiguration = -1;
|
|
gint ett_opcua_array_MdnsDiscoveryConfiguration = -1;
|
|
gint ett_opcua_ChannelSecurityToken = -1;
|
|
gint ett_opcua_array_ChannelSecurityToken = -1;
|
|
gint ett_opcua_SignedSoftwareCertificate = -1;
|
|
gint ett_opcua_array_SignedSoftwareCertificate = -1;
|
|
gint ett_opcua_SignatureData = -1;
|
|
gint ett_opcua_array_SignatureData = -1;
|
|
gint ett_opcua_UserIdentityToken = -1;
|
|
gint ett_opcua_array_UserIdentityToken = -1;
|
|
gint ett_opcua_AnonymousIdentityToken = -1;
|
|
gint ett_opcua_array_AnonymousIdentityToken = -1;
|
|
gint ett_opcua_UserNameIdentityToken = -1;
|
|
gint ett_opcua_array_UserNameIdentityToken = -1;
|
|
gint ett_opcua_X509IdentityToken = -1;
|
|
gint ett_opcua_array_X509IdentityToken = -1;
|
|
gint ett_opcua_KerberosIdentityToken = -1;
|
|
gint ett_opcua_array_KerberosIdentityToken = -1;
|
|
gint ett_opcua_IssuedIdentityToken = -1;
|
|
gint ett_opcua_array_IssuedIdentityToken = -1;
|
|
gint ett_opcua_NodeAttributes = -1;
|
|
gint ett_opcua_array_NodeAttributes = -1;
|
|
gint ett_opcua_ObjectAttributes = -1;
|
|
gint ett_opcua_array_ObjectAttributes = -1;
|
|
gint ett_opcua_VariableAttributes = -1;
|
|
gint ett_opcua_array_VariableAttributes = -1;
|
|
gint ett_opcua_MethodAttributes = -1;
|
|
gint ett_opcua_array_MethodAttributes = -1;
|
|
gint ett_opcua_ObjectTypeAttributes = -1;
|
|
gint ett_opcua_array_ObjectTypeAttributes = -1;
|
|
gint ett_opcua_VariableTypeAttributes = -1;
|
|
gint ett_opcua_array_VariableTypeAttributes = -1;
|
|
gint ett_opcua_ReferenceTypeAttributes = -1;
|
|
gint ett_opcua_array_ReferenceTypeAttributes = -1;
|
|
gint ett_opcua_DataTypeAttributes = -1;
|
|
gint ett_opcua_array_DataTypeAttributes = -1;
|
|
gint ett_opcua_ViewAttributes = -1;
|
|
gint ett_opcua_array_ViewAttributes = -1;
|
|
gint ett_opcua_AddNodesItem = -1;
|
|
gint ett_opcua_array_AddNodesItem = -1;
|
|
gint ett_opcua_AddNodesResult = -1;
|
|
gint ett_opcua_array_AddNodesResult = -1;
|
|
gint ett_opcua_AddReferencesItem = -1;
|
|
gint ett_opcua_array_AddReferencesItem = -1;
|
|
gint ett_opcua_DeleteNodesItem = -1;
|
|
gint ett_opcua_array_DeleteNodesItem = -1;
|
|
gint ett_opcua_DeleteReferencesItem = -1;
|
|
gint ett_opcua_array_DeleteReferencesItem = -1;
|
|
gint ett_opcua_ViewDescription = -1;
|
|
gint ett_opcua_array_ViewDescription = -1;
|
|
gint ett_opcua_BrowseDescription = -1;
|
|
gint ett_opcua_array_BrowseDescription = -1;
|
|
gint ett_opcua_ReferenceDescription = -1;
|
|
gint ett_opcua_array_ReferenceDescription = -1;
|
|
gint ett_opcua_BrowseResult = -1;
|
|
gint ett_opcua_array_BrowseResult = -1;
|
|
gint ett_opcua_RelativePathElement = -1;
|
|
gint ett_opcua_array_RelativePathElement = -1;
|
|
gint ett_opcua_RelativePath = -1;
|
|
gint ett_opcua_array_RelativePath = -1;
|
|
gint ett_opcua_BrowsePath = -1;
|
|
gint ett_opcua_array_BrowsePath = -1;
|
|
gint ett_opcua_BrowsePathTarget = -1;
|
|
gint ett_opcua_array_BrowsePathTarget = -1;
|
|
gint ett_opcua_BrowsePathResult = -1;
|
|
gint ett_opcua_array_BrowsePathResult = -1;
|
|
gint ett_opcua_EndpointConfiguration = -1;
|
|
gint ett_opcua_array_EndpointConfiguration = -1;
|
|
gint ett_opcua_SupportedProfile = -1;
|
|
gint ett_opcua_array_SupportedProfile = -1;
|
|
gint ett_opcua_SoftwareCertificate = -1;
|
|
gint ett_opcua_array_SoftwareCertificate = -1;
|
|
gint ett_opcua_QueryDataDescription = -1;
|
|
gint ett_opcua_array_QueryDataDescription = -1;
|
|
gint ett_opcua_NodeTypeDescription = -1;
|
|
gint ett_opcua_array_NodeTypeDescription = -1;
|
|
gint ett_opcua_QueryDataSet = -1;
|
|
gint ett_opcua_array_QueryDataSet = -1;
|
|
gint ett_opcua_NodeReference = -1;
|
|
gint ett_opcua_array_NodeReference = -1;
|
|
gint ett_opcua_ContentFilterElement = -1;
|
|
gint ett_opcua_array_ContentFilterElement = -1;
|
|
gint ett_opcua_ContentFilter = -1;
|
|
gint ett_opcua_array_ContentFilter = -1;
|
|
gint ett_opcua_ElementOperand = -1;
|
|
gint ett_opcua_array_ElementOperand = -1;
|
|
gint ett_opcua_LiteralOperand = -1;
|
|
gint ett_opcua_array_LiteralOperand = -1;
|
|
gint ett_opcua_AttributeOperand = -1;
|
|
gint ett_opcua_array_AttributeOperand = -1;
|
|
gint ett_opcua_SimpleAttributeOperand = -1;
|
|
gint ett_opcua_array_SimpleAttributeOperand = -1;
|
|
gint ett_opcua_ContentFilterElementResult = -1;
|
|
gint ett_opcua_array_ContentFilterElementResult = -1;
|
|
gint ett_opcua_ContentFilterResult = -1;
|
|
gint ett_opcua_array_ContentFilterResult = -1;
|
|
gint ett_opcua_ParsingResult = -1;
|
|
gint ett_opcua_array_ParsingResult = -1;
|
|
gint ett_opcua_ReadValueId = -1;
|
|
gint ett_opcua_array_ReadValueId = -1;
|
|
gint ett_opcua_HistoryReadValueId = -1;
|
|
gint ett_opcua_array_HistoryReadValueId = -1;
|
|
gint ett_opcua_HistoryReadResult = -1;
|
|
gint ett_opcua_array_HistoryReadResult = -1;
|
|
gint ett_opcua_ReadEventDetails = -1;
|
|
gint ett_opcua_array_ReadEventDetails = -1;
|
|
gint ett_opcua_ReadRawModifiedDetails = -1;
|
|
gint ett_opcua_array_ReadRawModifiedDetails = -1;
|
|
gint ett_opcua_ReadProcessedDetails = -1;
|
|
gint ett_opcua_array_ReadProcessedDetails = -1;
|
|
gint ett_opcua_ReadAtTimeDetails = -1;
|
|
gint ett_opcua_array_ReadAtTimeDetails = -1;
|
|
gint ett_opcua_HistoryData = -1;
|
|
gint ett_opcua_array_HistoryData = -1;
|
|
gint ett_opcua_ModificationInfo = -1;
|
|
gint ett_opcua_array_ModificationInfo = -1;
|
|
gint ett_opcua_HistoryModifiedData = -1;
|
|
gint ett_opcua_array_HistoryModifiedData = -1;
|
|
gint ett_opcua_HistoryEvent = -1;
|
|
gint ett_opcua_array_HistoryEvent = -1;
|
|
gint ett_opcua_WriteValue = -1;
|
|
gint ett_opcua_array_WriteValue = -1;
|
|
gint ett_opcua_HistoryUpdateDetails = -1;
|
|
gint ett_opcua_array_HistoryUpdateDetails = -1;
|
|
gint ett_opcua_UpdateDataDetails = -1;
|
|
gint ett_opcua_array_UpdateDataDetails = -1;
|
|
gint ett_opcua_UpdateStructureDataDetails = -1;
|
|
gint ett_opcua_array_UpdateStructureDataDetails = -1;
|
|
gint ett_opcua_UpdateEventDetails = -1;
|
|
gint ett_opcua_array_UpdateEventDetails = -1;
|
|
gint ett_opcua_DeleteRawModifiedDetails = -1;
|
|
gint ett_opcua_array_DeleteRawModifiedDetails = -1;
|
|
gint ett_opcua_DeleteAtTimeDetails = -1;
|
|
gint ett_opcua_array_DeleteAtTimeDetails = -1;
|
|
gint ett_opcua_DeleteEventDetails = -1;
|
|
gint ett_opcua_array_DeleteEventDetails = -1;
|
|
gint ett_opcua_HistoryUpdateResult = -1;
|
|
gint ett_opcua_array_HistoryUpdateResult = -1;
|
|
gint ett_opcua_CallMethodRequest = -1;
|
|
gint ett_opcua_array_CallMethodRequest = -1;
|
|
gint ett_opcua_CallMethodResult = -1;
|
|
gint ett_opcua_array_CallMethodResult = -1;
|
|
gint ett_opcua_DataChangeFilter = -1;
|
|
gint ett_opcua_array_DataChangeFilter = -1;
|
|
gint ett_opcua_EventFilter = -1;
|
|
gint ett_opcua_array_EventFilter = -1;
|
|
gint ett_opcua_AggregateConfiguration = -1;
|
|
gint ett_opcua_array_AggregateConfiguration = -1;
|
|
gint ett_opcua_AggregateFilter = -1;
|
|
gint ett_opcua_array_AggregateFilter = -1;
|
|
gint ett_opcua_EventFilterResult = -1;
|
|
gint ett_opcua_array_EventFilterResult = -1;
|
|
gint ett_opcua_AggregateFilterResult = -1;
|
|
gint ett_opcua_array_AggregateFilterResult = -1;
|
|
gint ett_opcua_MonitoringParameters = -1;
|
|
gint ett_opcua_array_MonitoringParameters = -1;
|
|
gint ett_opcua_MonitoredItemCreateRequest = -1;
|
|
gint ett_opcua_array_MonitoredItemCreateRequest = -1;
|
|
gint ett_opcua_MonitoredItemCreateResult = -1;
|
|
gint ett_opcua_array_MonitoredItemCreateResult = -1;
|
|
gint ett_opcua_MonitoredItemModifyRequest = -1;
|
|
gint ett_opcua_array_MonitoredItemModifyRequest = -1;
|
|
gint ett_opcua_MonitoredItemModifyResult = -1;
|
|
gint ett_opcua_array_MonitoredItemModifyResult = -1;
|
|
gint ett_opcua_NotificationMessage = -1;
|
|
gint ett_opcua_array_NotificationMessage = -1;
|
|
gint ett_opcua_DataChangeNotification = -1;
|
|
gint ett_opcua_array_DataChangeNotification = -1;
|
|
gint ett_opcua_MonitoredItemNotification = -1;
|
|
gint ett_opcua_array_MonitoredItemNotification = -1;
|
|
gint ett_opcua_EventNotificationList = -1;
|
|
gint ett_opcua_array_EventNotificationList = -1;
|
|
gint ett_opcua_EventFieldList = -1;
|
|
gint ett_opcua_array_EventFieldList = -1;
|
|
gint ett_opcua_HistoryEventFieldList = -1;
|
|
gint ett_opcua_array_HistoryEventFieldList = -1;
|
|
gint ett_opcua_StatusChangeNotification = -1;
|
|
gint ett_opcua_array_StatusChangeNotification = -1;
|
|
gint ett_opcua_SubscriptionAcknowledgement = -1;
|
|
gint ett_opcua_array_SubscriptionAcknowledgement = -1;
|
|
gint ett_opcua_TransferResult = -1;
|
|
gint ett_opcua_array_TransferResult = -1;
|
|
gint ett_opcua_ScalarTestType = -1;
|
|
gint ett_opcua_array_ScalarTestType = -1;
|
|
gint ett_opcua_ArrayTestType = -1;
|
|
gint ett_opcua_array_ArrayTestType = -1;
|
|
gint ett_opcua_CompositeTestType = -1;
|
|
gint ett_opcua_array_CompositeTestType = -1;
|
|
gint ett_opcua_BuildInfo = -1;
|
|
gint ett_opcua_array_BuildInfo = -1;
|
|
gint ett_opcua_RedundantServerDataType = -1;
|
|
gint ett_opcua_array_RedundantServerDataType = -1;
|
|
gint ett_opcua_EndpointUrlListDataType = -1;
|
|
gint ett_opcua_array_EndpointUrlListDataType = -1;
|
|
gint ett_opcua_NetworkGroupDataType = -1;
|
|
gint ett_opcua_array_NetworkGroupDataType = -1;
|
|
gint ett_opcua_SamplingIntervalDiagnosticsDataType = -1;
|
|
gint ett_opcua_array_SamplingIntervalDiagnosticsDataType = -1;
|
|
gint ett_opcua_ServerDiagnosticsSummaryDataType = -1;
|
|
gint ett_opcua_array_ServerDiagnosticsSummaryDataType = -1;
|
|
gint ett_opcua_ServerStatusDataType = -1;
|
|
gint ett_opcua_array_ServerStatusDataType = -1;
|
|
gint ett_opcua_SessionDiagnosticsDataType = -1;
|
|
gint ett_opcua_array_SessionDiagnosticsDataType = -1;
|
|
gint ett_opcua_SessionSecurityDiagnosticsDataType = -1;
|
|
gint ett_opcua_array_SessionSecurityDiagnosticsDataType = -1;
|
|
gint ett_opcua_ServiceCounterDataType = -1;
|
|
gint ett_opcua_array_ServiceCounterDataType = -1;
|
|
gint ett_opcua_StatusResult = -1;
|
|
gint ett_opcua_array_StatusResult = -1;
|
|
gint ett_opcua_SubscriptionDiagnosticsDataType = -1;
|
|
gint ett_opcua_array_SubscriptionDiagnosticsDataType = -1;
|
|
gint ett_opcua_ModelChangeStructureDataType = -1;
|
|
gint ett_opcua_array_ModelChangeStructureDataType = -1;
|
|
gint ett_opcua_SemanticChangeStructureDataType = -1;
|
|
gint ett_opcua_array_SemanticChangeStructureDataType = -1;
|
|
gint ett_opcua_Range = -1;
|
|
gint ett_opcua_array_Range = -1;
|
|
gint ett_opcua_EUInformation = -1;
|
|
gint ett_opcua_array_EUInformation = -1;
|
|
gint ett_opcua_ComplexNumberType = -1;
|
|
gint ett_opcua_array_ComplexNumberType = -1;
|
|
gint ett_opcua_DoubleComplexNumberType = -1;
|
|
gint ett_opcua_array_DoubleComplexNumberType = -1;
|
|
gint ett_opcua_AxisInformation = -1;
|
|
gint ett_opcua_array_AxisInformation = -1;
|
|
gint ett_opcua_XVType = -1;
|
|
gint ett_opcua_array_XVType = -1;
|
|
gint ett_opcua_ProgramDiagnosticDataType = -1;
|
|
gint ett_opcua_array_ProgramDiagnosticDataType = -1;
|
|
gint ett_opcua_Annotation = -1;
|
|
gint ett_opcua_array_Annotation = -1;
|
|
|
|
void parseTrustListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TrustListDataType, &ti, "%s: TrustListDataType", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedLists);
|
|
/* Array length field ignored: NoOfTrustedCertificates */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "TrustedCertificates", "ByteString", hf_opcua_TrustedCertificates, parseByteString, ett_opcua_array_ByteString);
|
|
/* Array length field ignored: NoOfTrustedCrls */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "TrustedCrls", "ByteString", hf_opcua_TrustedCrls, parseByteString, ett_opcua_array_ByteString);
|
|
/* Array length field ignored: NoOfIssuerCertificates */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "IssuerCertificates", "ByteString", hf_opcua_IssuerCertificates, parseByteString, ett_opcua_array_ByteString);
|
|
/* Array length field ignored: NoOfIssuerCrls */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "IssuerCrls", "ByteString", hf_opcua_IssuerCrls, parseByteString, ett_opcua_array_ByteString);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Node, &ti, "%s: Node", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseInstanceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_InstanceNode, &ti, "%s: InstanceNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TypeNode, &ti, "%s: TypeNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectNode, &ti, "%s: ObjectNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectTypeNode, &ti, "%s: ObjectTypeNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableNode, &ti, "%s: VariableNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseVariant(subtree, tvb, pinfo, pOffset, "Value");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
|
|
/* Array length field ignored: NoOfArrayDimensions */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_AccessLevel);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_UserAccessLevel);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_MinimumSamplingInterval);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Historizing);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableTypeNode, &ti, "%s: VariableTypeNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseVariant(subtree, tvb, pinfo, pOffset, "Value");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
|
|
/* Array length field ignored: NoOfArrayDimensions */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceTypeNode, &ti, "%s: ReferenceTypeNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Symmetric);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "InverseName");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MethodNode, &ti, "%s: MethodNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Executable);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UserExecutable);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseViewNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewNode, &ti, "%s: ViewNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ContainsNoLoops);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataTypeNode, &ti, "%s: DataTypeNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceNode, &ti, "%s: ReferenceNode", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsInverse);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetId");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseArgument(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Argument, &ti, "%s: Argument", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Name);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
|
|
/* Array length field ignored: NoOfArrayDimensions */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEnumValueType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EnumValueType, &ti, "%s: EnumValueType", szFieldName);
|
|
parseInt64(subtree, tvb, pinfo, pOffset, hf_opcua_Value);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseOptionSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_OptionSet, &ti, "%s: OptionSet", szFieldName);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Value);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ValidBits);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseTimeZoneDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TimeZoneDataType, &ti, "%s: TimeZoneDataType", szFieldName);
|
|
parseInt16(subtree, tvb, pinfo, pOffset, hf_opcua_Offset);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DaylightSavingInOffset);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseApplicationDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ApplicationDescription, &ti, "%s: ApplicationDescription", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ApplicationUri);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "ApplicationName");
|
|
parseApplicationType(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_GatewayServerUri);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_DiscoveryProfileUri);
|
|
/* Array length field ignored: NoOfDiscoveryUrls */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "DiscoveryUrls", "String", hf_opcua_DiscoveryUrls, parseString, ett_opcua_array_String);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RequestHeader, &ti, "%s: RequestHeader", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "AuthenticationToken");
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_Timestamp);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestHandle);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ReturnDiagnostics);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_AuditEntryId);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TimeoutHint);
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "AdditionalHeader");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ResponseHeader, &ti, "%s: ResponseHeader", szFieldName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_Timestamp);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestHandle);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_ServiceResult);
|
|
parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "ServiceDiagnostics");
|
|
/* Array length field ignored: NoOfStringTable */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "StringTable", "String", hf_opcua_StringTable, parseString, ett_opcua_array_String);
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "AdditionalHeader");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseServerOnNetwork(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerOnNetwork, &ti, "%s: ServerOnNetwork", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RecordId);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_DiscoveryUrl);
|
|
/* Array length field ignored: NoOfServerCapabilities */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilities", "String", hf_opcua_ServerCapabilities, parseString, ett_opcua_array_String);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserTokenPolicy, &ti, "%s: UserTokenPolicy", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
|
|
parseUserTokenType(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IssuedTokenType);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IssuerEndpointUrl);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointDescription, &ti, "%s: EndpointDescription", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EndpointUrl);
|
|
parseApplicationDescription(subtree, tvb, pinfo, pOffset, "Server");
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerCertificate);
|
|
parseMessageSecurityMode(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
|
|
/* Array length field ignored: NoOfUserIdentityTokens */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "UserIdentityTokens", "UserTokenPolicy", parseUserTokenPolicy, ett_opcua_array_UserTokenPolicy);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_TransportProfileUri);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityLevel);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RegisteredServer, &ti, "%s: RegisteredServer", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerUri);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
|
|
/* Array length field ignored: NoOfServerNames */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ServerNames", "LocalizedText", parseLocalizedText, ett_opcua_array_LocalizedText);
|
|
parseApplicationType(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_GatewayServerUri);
|
|
/* Array length field ignored: NoOfDiscoveryUrls */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "DiscoveryUrls", "String", hf_opcua_DiscoveryUrls, parseString, ett_opcua_array_String);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SemaphoreFilePath);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsOnline);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMdnsDiscoveryConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MdnsDiscoveryConfiguration, &ti, "%s: MdnsDiscoveryConfiguration", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_MdnsServerName);
|
|
/* Array length field ignored: NoOfServerCapabilities */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilities", "String", hf_opcua_ServerCapabilities, parseString, ett_opcua_array_String);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ChannelSecurityToken, &ti, "%s: ChannelSecurityToken", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ChannelId);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TokenId);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_CreatedAt);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedLifetime);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SignedSoftwareCertificate, &ti, "%s: SignedSoftwareCertificate", szFieldName);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_CertificateData);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Signature);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SignatureData, &ti, "%s: SignatureData", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Algorithm);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Signature);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserIdentityToken, &ti, "%s: UserIdentityToken", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAnonymousIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AnonymousIdentityToken, &ti, "%s: AnonymousIdentityToken", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserNameIdentityToken, &ti, "%s: UserNameIdentityToken", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_UserName);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Password);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EncryptionAlgorithm);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_X509IdentityToken, &ti, "%s: X509IdentityToken", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_CertificateData);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseKerberosIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_KerberosIdentityToken, &ti, "%s: KerberosIdentityToken", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_TicketData);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseIssuedIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_IssuedIdentityToken, &ti, "%s: IssuedIdentityToken", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_TokenData);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EncryptionAlgorithm);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeAttributes, &ti, "%s: NodeAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectAttributes, &ti, "%s: ObjectAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableAttributes, &ti, "%s: VariableAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseVariant(subtree, tvb, pinfo, pOffset, "Value");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
|
|
/* Array length field ignored: NoOfArrayDimensions */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_AccessLevel);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_UserAccessLevel);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_MinimumSamplingInterval);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Historizing);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MethodAttributes, &ti, "%s: MethodAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Executable);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UserExecutable);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectTypeAttributes, &ti, "%s: ObjectTypeAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableTypeAttributes, &ti, "%s: VariableTypeAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseVariant(subtree, tvb, pinfo, pOffset, "Value");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "DataType");
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ValueRank);
|
|
/* Array length field ignored: NoOfArrayDimensions */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ArrayDimensions", "UInt32", hf_opcua_ArrayDimensions, parseUInt32, ett_opcua_array_UInt32);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceTypeAttributes, &ti, "%s: ReferenceTypeAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Symmetric);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "InverseName");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDataTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataTypeAttributes, &ti, "%s: DataTypeAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewAttributes, &ti, "%s: ViewAttributes", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SpecifiedAttributes);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_WriteMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ContainsNoLoops);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddNodesItem, &ti, "%s: AddNodesItem", szFieldName);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "ParentNodeId");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "RequestedNewNodeId");
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "NodeAttributes");
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinition");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddNodesResult, &ti, "%s: AddNodesResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "AddedNodeId");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddReferencesItem, &ti, "%s: AddReferencesItem", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "SourceNodeId");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_TargetServerUri);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetNodeId");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteNodesItem, &ti, "%s: DeleteNodesItem", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteTargetReferences);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteReferencesItem, &ti, "%s: DeleteReferencesItem", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "SourceNodeId");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetNodeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteBidirectional);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewDescription, &ti, "%s: ViewDescription", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ViewId");
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_Timestamp);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ViewVersion);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseBrowseDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowseDescription, &ti, "%s: BrowseDescription", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseBrowseDirection(subtree, tvb, pinfo, pOffset);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IncludeSubtypes);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NodeClassMask);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ResultMask);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceDescription, &ti, "%s: ReferenceDescription", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "BrowseName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseNodeClass(subtree, tvb, pinfo, pOffset);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinition");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseBrowseResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowseResult, &ti, "%s: BrowseResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
|
|
/* Array length field ignored: NoOfReferences */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceDescription", parseReferenceDescription, ett_opcua_array_ReferenceDescription);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseRelativePathElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RelativePathElement, &ti, "%s: RelativePathElement", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsInverse);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IncludeSubtypes);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "TargetName");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseRelativePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RelativePath, &ti, "%s: RelativePath", szFieldName);
|
|
/* Array length field ignored: NoOfElements */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Elements", "RelativePathElement", parseRelativePathElement, ett_opcua_array_RelativePathElement);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePath, &ti, "%s: BrowsePath", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "StartingNode");
|
|
parseRelativePath(subtree, tvb, pinfo, pOffset, "RelativePath");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseBrowsePathTarget(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePathTarget, &ti, "%s: BrowsePathTarget", szFieldName);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetId");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RemainingPathIndex);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePathResult, &ti, "%s: BrowsePathResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
/* Array length field ignored: NoOfTargets */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Targets", "BrowsePathTarget", parseBrowsePathTarget, ett_opcua_array_BrowsePathTarget);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointConfiguration, &ti, "%s: EndpointConfiguration", szFieldName);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_OperationTimeout);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseBinaryEncoding);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxStringLength);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxByteStringLength);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxArrayLength);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxMessageSize);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxBufferSize);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ChannelLifetime);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityTokenLifetime);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SupportedProfile, &ti, "%s: SupportedProfile", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_OrganizationUri);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProfileId);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ComplianceTool);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ComplianceDate);
|
|
parseComplianceLevel(subtree, tvb, pinfo, pOffset);
|
|
/* Array length field ignored: NoOfUnsupportedUnitIds */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "UnsupportedUnitIds", "String", hf_opcua_UnsupportedUnitIds, parseString, ett_opcua_array_String);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SoftwareCertificate, &ti, "%s: SoftwareCertificate", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_VendorName);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_VendorProductCertificate);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SoftwareVersion);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_BuildNumber);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_BuildDate);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IssuedBy);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_IssueDate);
|
|
/* Array length field ignored: NoOfSupportedProfiles */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "SupportedProfiles", "SupportedProfile", parseSupportedProfile, ett_opcua_array_SupportedProfile);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseQueryDataDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_QueryDataDescription, &ti, "%s: QueryDataDescription", szFieldName);
|
|
parseRelativePath(subtree, tvb, pinfo, pOffset, "RelativePath");
|
|
parseAttributeId(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeTypeDescription, &ti, "%s: NodeTypeDescription", szFieldName);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinitionNode");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IncludeSubTypes);
|
|
/* Array length field ignored: NoOfDataToReturn */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataToReturn", "QueryDataDescription", parseQueryDataDescription, ett_opcua_array_QueryDataDescription);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_QueryDataSet, &ti, "%s: QueryDataSet", szFieldName);
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinitionNode");
|
|
/* Array length field ignored: NoOfValues */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Values", "Variant", parseVariant, ett_opcua_array_Variant);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeReference, &ti, "%s: NodeReference", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ReferenceTypeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsForward);
|
|
/* Array length field ignored: NoOfReferencedNodeIds */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ReferencedNodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterElement, &ti, "%s: ContentFilterElement", szFieldName);
|
|
parseFilterOperator(subtree, tvb, pinfo, pOffset);
|
|
/* Array length field ignored: NoOfFilterOperands */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "FilterOperands", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilter, &ti, "%s: ContentFilter", szFieldName);
|
|
/* Array length field ignored: NoOfElements */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Elements", "ContentFilterElement", parseContentFilterElement, ett_opcua_array_ContentFilterElement);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ElementOperand, &ti, "%s: ElementOperand", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_Index);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_LiteralOperand, &ti, "%s: LiteralOperand", szFieldName);
|
|
parseVariant(subtree, tvb, pinfo, pOffset, "Value");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AttributeOperand, &ti, "%s: AttributeOperand", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Alias);
|
|
parseRelativePath(subtree, tvb, pinfo, pOffset, "BrowsePath");
|
|
parseAttributeId(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSimpleAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SimpleAttributeOperand, &ti, "%s: SimpleAttributeOperand", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinitionId");
|
|
/* Array length field ignored: NoOfBrowsePath */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "BrowsePath", "QualifiedName", parseQualifiedName, ett_opcua_array_QualifiedName);
|
|
parseAttributeId(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseContentFilterElementResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterElementResult, &ti, "%s: ContentFilterElementResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
/* Array length field ignored: NoOfOperandStatusCodes */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "OperandStatusCodes", "StatusCode", hf_opcua_OperandStatusCodes, parseStatusCode, ett_opcua_array_StatusCode);
|
|
/* Array length field ignored: NoOfOperandDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "OperandDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterResult, &ti, "%s: ContentFilterResult", szFieldName);
|
|
/* Array length field ignored: NoOfElementResults */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ElementResults", "ContentFilterElementResult", parseContentFilterElementResult, ett_opcua_array_ContentFilterElementResult);
|
|
/* Array length field ignored: NoOfElementDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ElementDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseParsingResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ParsingResult, &ti, "%s: ParsingResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
/* Array length field ignored: NoOfDataStatusCodes */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "DataStatusCodes", "StatusCode", hf_opcua_DataStatusCodes, parseStatusCode, ett_opcua_array_StatusCode);
|
|
/* Array length field ignored: NoOfDataDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadValueId, &ti, "%s: ReadValueId", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseAttributeId(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "DataEncoding");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadValueId, &ti, "%s: HistoryReadValueId", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "DataEncoding");
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadResult, &ti, "%s: HistoryReadResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "HistoryData");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadEventDetails, &ti, "%s: ReadEventDetails", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NumValuesPerNode);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
|
|
parseEventFilter(subtree, tvb, pinfo, pOffset, "Filter");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadRawModifiedDetails, &ti, "%s: ReadRawModifiedDetails", szFieldName);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsReadModified);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NumValuesPerNode);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ReturnBounds);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadProcessedDetails, &ti, "%s: ReadProcessedDetails", szFieldName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_ProcessingInterval);
|
|
/* Array length field ignored: NoOfAggregateType */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "AggregateType", "NodeId", parseNodeId, ett_opcua_array_NodeId);
|
|
parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "AggregateConfiguration");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadAtTimeDetails, &ti, "%s: ReadAtTimeDetails", szFieldName);
|
|
/* Array length field ignored: NoOfReqTimes */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ReqTimes", "DateTime", hf_opcua_ReqTimes, parseDateTime, ett_opcua_array_DateTime);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseSimpleBounds);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryData, &ti, "%s: HistoryData", szFieldName);
|
|
/* Array length field ignored: NoOfDataValues */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseModificationInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ModificationInfo, &ti, "%s: ModificationInfo", szFieldName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ModificationTime);
|
|
parseHistoryUpdateType(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_UserName);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryModifiedData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryModifiedData, &ti, "%s: HistoryModifiedData", szFieldName);
|
|
/* Array length field ignored: NoOfDataValues */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
|
|
/* Array length field ignored: NoOfModificationInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ModificationInfos", "ModificationInfo", parseModificationInfo, ett_opcua_array_ModificationInfo);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryEvent, &ti, "%s: HistoryEvent", szFieldName);
|
|
/* Array length field ignored: NoOfEvents */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Events", "HistoryEventFieldList", parseHistoryEventFieldList, ett_opcua_array_HistoryEventFieldList);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_WriteValue, &ti, "%s: WriteValue", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseAttributeId(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
|
|
parseDataValue(subtree, tvb, pinfo, pOffset, "Value");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryUpdateDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateDetails, &ti, "%s: HistoryUpdateDetails", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseUpdateDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateDataDetails, &ti, "%s: UpdateDataDetails", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parsePerformUpdateType(subtree, tvb, pinfo, pOffset);
|
|
/* Array length field ignored: NoOfUpdateValues */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "UpdateValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseUpdateStructureDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateStructureDataDetails, &ti, "%s: UpdateStructureDataDetails", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parsePerformUpdateType(subtree, tvb, pinfo, pOffset);
|
|
/* Array length field ignored: NoOfUpdateValues */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "UpdateValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseUpdateEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateEventDetails, &ti, "%s: UpdateEventDetails", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parsePerformUpdateType(subtree, tvb, pinfo, pOffset);
|
|
parseEventFilter(subtree, tvb, pinfo, pOffset, "Filter");
|
|
/* Array length field ignored: NoOfEventData */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventData", "HistoryEventFieldList", parseHistoryEventFieldList, ett_opcua_array_HistoryEventFieldList);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteRawModifiedDetails, &ti, "%s: DeleteRawModifiedDetails", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsDeleteModified);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteAtTimeDetails, &ti, "%s: DeleteAtTimeDetails", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
/* Array length field ignored: NoOfReqTimes */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ReqTimes", "DateTime", hf_opcua_ReqTimes, parseDateTime, ett_opcua_array_DateTime);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteEventDetails, &ti, "%s: DeleteEventDetails", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
/* Array length field ignored: NoOfEventIds */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "EventIds", "ByteString", hf_opcua_EventIds, parseByteString, ett_opcua_array_ByteString);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateResult, &ti, "%s: HistoryUpdateResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
/* Array length field ignored: NoOfOperationResults */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "OperationResults", "StatusCode", hf_opcua_OperationResults, parseStatusCode, ett_opcua_array_StatusCode);
|
|
/* Array length field ignored: NoOfDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseCallMethodRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CallMethodRequest, &ti, "%s: CallMethodRequest", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "ObjectId");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "MethodId");
|
|
/* Array length field ignored: NoOfInputArguments */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "InputArguments", "Variant", parseVariant, ett_opcua_array_Variant);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseCallMethodResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CallMethodResult, &ti, "%s: CallMethodResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
/* Array length field ignored: NoOfInputArgumentResults */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "InputArgumentResults", "StatusCode", hf_opcua_InputArgumentResults, parseStatusCode, ett_opcua_array_StatusCode);
|
|
/* Array length field ignored: NoOfInputArgumentDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "InputArgumentDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
/* Array length field ignored: NoOfOutputArguments */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "OutputArguments", "Variant", parseVariant, ett_opcua_array_Variant);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataChangeFilter, &ti, "%s: DataChangeFilter", szFieldName);
|
|
parseDataChangeTrigger(subtree, tvb, pinfo, pOffset);
|
|
parseDeadbandType(subtree, tvb, pinfo, pOffset);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_DeadbandValue);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFilter, &ti, "%s: EventFilter", szFieldName);
|
|
/* Array length field ignored: NoOfSelectClauses */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "SelectClauses", "SimpleAttributeOperand", parseSimpleAttributeOperand, ett_opcua_array_SimpleAttributeOperand);
|
|
parseContentFilter(subtree, tvb, pinfo, pOffset, "WhereClause");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAggregateConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateConfiguration, &ti, "%s: AggregateConfiguration", szFieldName);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseServerCapabilitiesDefaults);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_TreatUncertainAsBad);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_PercentDataBad);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_PercentDataGood);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseSlopedExtrapolation);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAggregateFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateFilter, &ti, "%s: AggregateFilter", szFieldName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "AggregateType");
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_ProcessingInterval);
|
|
parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "AggregateConfiguration");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFilterResult, &ti, "%s: EventFilterResult", szFieldName);
|
|
/* Array length field ignored: NoOfSelectClauseResults */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "SelectClauseResults", "StatusCode", hf_opcua_SelectClauseResults, parseStatusCode, ett_opcua_array_StatusCode);
|
|
/* Array length field ignored: NoOfSelectClauseDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "SelectClauseDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
parseContentFilterResult(subtree, tvb, pinfo, pOffset, "WhereClauseResult");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAggregateFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateFilterResult, &ti, "%s: AggregateFilterResult", szFieldName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedStartTime);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedProcessingInterval);
|
|
parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "RevisedAggregateConfiguration");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMonitoringParameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoringParameters, &ti, "%s: MonitoringParameters", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ClientHandle);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_SamplingInterval);
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "Filter");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_QueueSize);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DiscardOldest);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemCreateRequest, &ti, "%s: MonitoredItemCreateRequest", szFieldName);
|
|
parseReadValueId(subtree, tvb, pinfo, pOffset, "ItemToMonitor");
|
|
parseMonitoringMode(subtree, tvb, pinfo, pOffset);
|
|
parseMonitoringParameters(subtree, tvb, pinfo, pOffset, "RequestedParameters");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemCreateResult, &ti, "%s: MonitoredItemCreateResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemId);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedSamplingInterval);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedQueueSize);
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "FilterResult");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemModifyRequest, &ti, "%s: MonitoredItemModifyRequest", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemId);
|
|
parseMonitoringParameters(subtree, tvb, pinfo, pOffset, "RequestedParameters");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemModifyResult, &ti, "%s: MonitoredItemModifyResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedSamplingInterval);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedQueueSize);
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "FilterResult");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NotificationMessage, &ti, "%s: NotificationMessage", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SequenceNumber);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_PublishTime);
|
|
/* Array length field ignored: NoOfNotificationData */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NotificationData", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataChangeNotification, &ti, "%s: DataChangeNotification", szFieldName);
|
|
/* Array length field ignored: NoOfMonitoredItems */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "MonitoredItems", "MonitoredItemNotification", parseMonitoredItemNotification, ett_opcua_array_MonitoredItemNotification);
|
|
/* Array length field ignored: NoOfDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemNotification, &ti, "%s: MonitoredItemNotification", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ClientHandle);
|
|
parseDataValue(subtree, tvb, pinfo, pOffset, "Value");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEventNotificationList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventNotificationList, &ti, "%s: EventNotificationList", szFieldName);
|
|
/* Array length field ignored: NoOfEvents */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Events", "EventFieldList", parseEventFieldList, ett_opcua_array_EventFieldList);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFieldList, &ti, "%s: EventFieldList", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ClientHandle);
|
|
/* Array length field ignored: NoOfEventFields */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventFields", "Variant", parseVariant, ett_opcua_array_Variant);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseHistoryEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryEventFieldList, &ti, "%s: HistoryEventFieldList", szFieldName);
|
|
/* Array length field ignored: NoOfEventFields */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventFields", "Variant", parseVariant, ett_opcua_array_Variant);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseStatusChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_StatusChangeNotification, &ti, "%s: StatusChangeNotification", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_Status);
|
|
parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SubscriptionAcknowledgement, &ti, "%s: SubscriptionAcknowledgement", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SequenceNumber);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TransferResult, &ti, "%s: TransferResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
/* Array length field ignored: NoOfAvailableSequenceNumbers */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "AvailableSequenceNumbers", "UInt32", hf_opcua_AvailableSequenceNumbers, parseUInt32, ett_opcua_array_UInt32);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ScalarTestType, &ti, "%s: ScalarTestType", szFieldName);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Boolean);
|
|
parseSByte(subtree, tvb, pinfo, pOffset, hf_opcua_SByte);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Byte);
|
|
parseInt16(subtree, tvb, pinfo, pOffset, hf_opcua_Int16);
|
|
parseUInt16(subtree, tvb, pinfo, pOffset, hf_opcua_UInt16);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_Int32);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UInt32);
|
|
parseInt64(subtree, tvb, pinfo, pOffset, hf_opcua_Int64);
|
|
parseUInt64(subtree, tvb, pinfo, pOffset, hf_opcua_UInt64);
|
|
parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Float);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Double);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_String);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_DateTime);
|
|
parseGuid(subtree, tvb, pinfo, pOffset, hf_opcua_Guid);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ByteString);
|
|
parseXmlElement(subtree, tvb, pinfo, pOffset, hf_opcua_XmlElement);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
|
|
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "ExpandedNodeId");
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
|
|
parseQualifiedName(subtree, tvb, pinfo, pOffset, "QualifiedName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "LocalizedText");
|
|
parseExtensionObject(subtree, tvb, pinfo, pOffset, "ExtensionObject");
|
|
parseDataValue(subtree, tvb, pinfo, pOffset, "DataValue");
|
|
parseEnumeratedTestType(subtree, tvb, pinfo, pOffset);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ArrayTestType, &ti, "%s: ArrayTestType", szFieldName);
|
|
/* Array length field ignored: NoOfBooleans */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Booleans", "Boolean", hf_opcua_Booleans, parseBoolean, ett_opcua_array_Boolean);
|
|
/* Array length field ignored: NoOfSBytes */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "SBytes", "SByte", hf_opcua_SBytes, parseSByte, ett_opcua_array_SByte);
|
|
/* Array length field ignored: NoOfInt16s */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Int16s", "Int16", hf_opcua_Int16s, parseInt16, ett_opcua_array_Int16);
|
|
/* Array length field ignored: NoOfUInt16s */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "UInt16s", "UInt16", hf_opcua_UInt16s, parseUInt16, ett_opcua_array_UInt16);
|
|
/* Array length field ignored: NoOfInt32s */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Int32s", "Int32", hf_opcua_Int32s, parseInt32, ett_opcua_array_Int32);
|
|
/* Array length field ignored: NoOfUInt32s */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "UInt32s", "UInt32", hf_opcua_UInt32s, parseUInt32, ett_opcua_array_UInt32);
|
|
/* Array length field ignored: NoOfInt64s */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Int64s", "Int64", hf_opcua_Int64s, parseInt64, ett_opcua_array_Int64);
|
|
/* Array length field ignored: NoOfUInt64s */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "UInt64s", "UInt64", hf_opcua_UInt64s, parseUInt64, ett_opcua_array_UInt64);
|
|
/* Array length field ignored: NoOfFloats */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Floats", "Float", hf_opcua_Floats, parseFloat, ett_opcua_array_Float);
|
|
/* Array length field ignored: NoOfDoubles */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Doubles", "Double", hf_opcua_Doubles, parseDouble, ett_opcua_array_Double);
|
|
/* Array length field ignored: NoOfStrings */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Strings", "String", hf_opcua_Strings, parseString, ett_opcua_array_String);
|
|
/* Array length field ignored: NoOfDateTimes */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "DateTimes", "DateTime", hf_opcua_DateTimes, parseDateTime, ett_opcua_array_DateTime);
|
|
/* Array length field ignored: NoOfGuids */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "Guids", "Guid", hf_opcua_Guids, parseGuid, ett_opcua_array_Guid);
|
|
/* Array length field ignored: NoOfByteStrings */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ByteStrings", "ByteString", hf_opcua_ByteStrings, parseByteString, ett_opcua_array_ByteString);
|
|
/* Array length field ignored: NoOfXmlElements */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "XmlElements", "XmlElement", hf_opcua_XmlElements, parseXmlElement, ett_opcua_array_XmlElement);
|
|
/* Array length field ignored: NoOfNodeIds */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId);
|
|
/* Array length field ignored: NoOfExpandedNodeIds */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ExpandedNodeIds", "ExpandedNodeId", parseExpandedNodeId, ett_opcua_array_ExpandedNodeId);
|
|
/* Array length field ignored: NoOfStatusCodes */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "StatusCodes", "StatusCode", hf_opcua_StatusCodes, parseStatusCode, ett_opcua_array_StatusCode);
|
|
/* Array length field ignored: NoOfDiagnosticInfos */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
|
|
/* Array length field ignored: NoOfQualifiedNames */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "QualifiedNames", "QualifiedName", parseQualifiedName, ett_opcua_array_QualifiedName);
|
|
/* Array length field ignored: NoOfLocalizedTexts */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "LocalizedTexts", "LocalizedText", parseLocalizedText, ett_opcua_array_LocalizedText);
|
|
/* Array length field ignored: NoOfExtensionObjects */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ExtensionObjects", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
|
|
/* Array length field ignored: NoOfDataValues */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
|
|
/* Array length field ignored: NoOfVariants */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Variants", "Variant", parseVariant, ett_opcua_array_Variant);
|
|
/* Array length field ignored: NoOfEnumeratedValues */
|
|
parseArrayEnum(subtree, tvb, pinfo, pOffset, "EnumeratedValues", "EnumeratedTestType", parseEnumeratedTestType, ett_opcua_array_EnumeratedTestType);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CompositeTestType, &ti, "%s: CompositeTestType", szFieldName);
|
|
parseScalarTestType(subtree, tvb, pinfo, pOffset, "Field1");
|
|
parseArrayTestType(subtree, tvb, pinfo, pOffset, "Field2");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BuildInfo, &ti, "%s: BuildInfo", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductUri);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ManufacturerName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ProductName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SoftwareVersion);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_BuildNumber);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_BuildDate);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RedundantServerDataType, &ti, "%s: RedundantServerDataType", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerId);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_ServiceLevel);
|
|
parseServerState(subtree, tvb, pinfo, pOffset);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEndpointUrlListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointUrlListDataType, &ti, "%s: EndpointUrlListDataType", szFieldName);
|
|
/* Array length field ignored: NoOfEndpointUrlList */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "EndpointUrlList", "String", hf_opcua_EndpointUrlList, parseString, ett_opcua_array_String);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseNetworkGroupDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NetworkGroupDataType, &ti, "%s: NetworkGroupDataType", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerUri);
|
|
/* Array length field ignored: NoOfNetworkPaths */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NetworkPaths", "EndpointUrlListDataType", parseEndpointUrlListDataType, ett_opcua_array_EndpointUrlListDataType);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSamplingIntervalDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SamplingIntervalDiagnosticsDataType, &ti, "%s: SamplingIntervalDiagnosticsDataType", szFieldName);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_SamplingInterval);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxMonitoredItemCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DisabledMonitoredItemCount);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerDiagnosticsSummaryDataType, &ti, "%s: ServerDiagnosticsSummaryDataType", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ServerViewCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentSessionCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CumulatedSessionCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityRejectedSessionCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RejectedSessionCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SessionTimeoutCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SessionAbortCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentSubscriptionCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CumulatedSubscriptionCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingIntervalCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityRejectedRequestsCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RejectedRequestsCount);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerStatusDataType, &ti, "%s: ServerStatusDataType", szFieldName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_StartTime);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentTime);
|
|
parseServerState(subtree, tvb, pinfo, pOffset);
|
|
parseBuildInfo(subtree, tvb, pinfo, pOffset, "BuildInfo");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecondsTillShutdown);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "ShutdownReason");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SessionDiagnosticsDataType, &ti, "%s: SessionDiagnosticsDataType", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "SessionId");
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SessionName);
|
|
parseApplicationDescription(subtree, tvb, pinfo, pOffset, "ClientDescription");
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerUri);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EndpointUrl);
|
|
/* Array length field ignored: NoOfLocaleIds */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "LocaleIds", "String", hf_opcua_LocaleIds, parseString, ett_opcua_array_String);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_ActualSessionTimeout);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxResponseMessageSize);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ClientConnectionTime);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_ClientLastContactTime);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentSubscriptionsCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentMonitoredItemsCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentPublishRequestsInQueue);
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "TotalRequestCount");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UnauthorizedRequestCount);
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "ReadCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "HistoryReadCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "WriteCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "HistoryUpdateCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "CallCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "CreateMonitoredItemsCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "ModifyMonitoredItemsCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "SetMonitoringModeCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "SetTriggeringCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteMonitoredItemsCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "CreateSubscriptionCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "ModifySubscriptionCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "SetPublishingModeCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "PublishCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "RepublishCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "TransferSubscriptionsCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteSubscriptionsCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "AddNodesCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "AddReferencesCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteNodesCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "DeleteReferencesCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "BrowseCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "BrowseNextCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "TranslateBrowsePathsToNodeIdsCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "QueryFirstCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "QueryNextCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "RegisterNodesCount");
|
|
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "UnregisterNodesCount");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SessionSecurityDiagnosticsDataType, &ti, "%s: SessionSecurityDiagnosticsDataType", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "SessionId");
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientUserIdOfSession);
|
|
/* Array length field ignored: NoOfClientUserIdHistory */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "ClientUserIdHistory", "String", hf_opcua_ClientUserIdHistory, parseString, ett_opcua_array_String);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_AuthenticationMechanism);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Encoding);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_TransportProtocol);
|
|
parseMessageSecurityMode(subtree, tvb, pinfo, pOffset);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
|
|
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientCertificate);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServiceCounterDataType, &ti, "%s: ServiceCounterDataType", szFieldName);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TotalCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ErrorCount);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseStatusResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_StatusResult, &ti, "%s: StatusResult", szFieldName);
|
|
parseStatusCode(subtree, tvb, pinfo, pOffset, hf_opcua_StatusCode);
|
|
parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SubscriptionDiagnosticsDataType, &ti, "%s: SubscriptionDiagnosticsDataType", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "SessionId");
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId);
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Priority);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingInterval);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxKeepAliveCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxLifetimeCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxNotificationsPerPublish);
|
|
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingEnabled);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ModifyCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_EnableCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DisableCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RepublishRequestCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RepublishMessageRequestCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RepublishMessageCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TransferRequestCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TransferredToAltClientCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TransferredToSameClientCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_PublishRequestCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DataChangeNotificationsCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotificationsCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NotificationsCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_LatePublishRequestCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentKeepAliveCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CurrentLifetimeCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UnacknowledgedMessageCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DiscardedMessageCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoredItemCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DisabledMonitoredItemCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MonitoringQueueOverflowCount);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_NextSequenceNumber);
|
|
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_EventQueueOverFlowCount);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseModelChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ModelChangeStructureDataType, &ti, "%s: ModelChangeStructureDataType", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "Affected");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "AffectedType");
|
|
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Verb);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseSemanticChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SemanticChangeStructureDataType, &ti, "%s: SemanticChangeStructureDataType", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "Affected");
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "AffectedType");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseRange(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Range, &ti, "%s: Range", szFieldName);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Low);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_High);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EUInformation, &ti, "%s: EUInformation", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_NamespaceUri);
|
|
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UnitId);
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "DisplayName");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ComplexNumberType, &ti, "%s: ComplexNumberType", szFieldName);
|
|
parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Real);
|
|
parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Imaginary);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseDoubleComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DoubleComplexNumberType, &ti, "%s: DoubleComplexNumberType", szFieldName);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Real);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Imaginary);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAxisInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AxisInformation, &ti, "%s: AxisInformation", szFieldName);
|
|
parseEUInformation(subtree, tvb, pinfo, pOffset, "EngineeringUnits");
|
|
parseRange(subtree, tvb, pinfo, pOffset, "EURange");
|
|
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Title");
|
|
parseAxisScaleEnumeration(subtree, tvb, pinfo, pOffset);
|
|
/* Array length field ignored: NoOfAxisSteps */
|
|
parseArraySimple(subtree, tvb, pinfo, pOffset, "AxisSteps", "Double", hf_opcua_AxisSteps, parseDouble, ett_opcua_array_Double);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseXVType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_XVType, &ti, "%s: XVType", szFieldName);
|
|
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_X);
|
|
parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Value);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseProgramDiagnosticDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ProgramDiagnosticDataType, &ti, "%s: ProgramDiagnosticDataType", szFieldName);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "CreateSessionId");
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_CreateClientName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_InvocationCreationTime);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_LastTransitionTime);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_LastMethodCall);
|
|
parseNodeId(subtree, tvb, pinfo, pOffset, "LastMethodSessionId");
|
|
/* Array length field ignored: NoOfLastMethodInputArguments */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "LastMethodInputArguments", "Argument", parseArgument, ett_opcua_array_Argument);
|
|
/* Array length field ignored: NoOfLastMethodOutputArguments */
|
|
parseArrayComplex(subtree, tvb, pinfo, pOffset, "LastMethodOutputArguments", "Argument", parseArgument, ett_opcua_array_Argument);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_LastMethodCallTime);
|
|
parseStatusResult(subtree, tvb, pinfo, pOffset, "LastMethodReturnStatus");
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
|
|
{
|
|
proto_item *ti;
|
|
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Annotation, &ti, "%s: Annotation", szFieldName);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_Message);
|
|
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_UserName);
|
|
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_AnnotationTime);
|
|
proto_item_set_end(ti, tvb, *pOffset);
|
|
}
|
|
|
|
/** Setup protocol subtree array */
|
|
static gint *ett[] =
|
|
{
|
|
&ett_opcua_TrustListDataType,
|
|
&ett_opcua_array_TrustListDataType,
|
|
&ett_opcua_Node,
|
|
&ett_opcua_array_Node,
|
|
&ett_opcua_InstanceNode,
|
|
&ett_opcua_array_InstanceNode,
|
|
&ett_opcua_TypeNode,
|
|
&ett_opcua_array_TypeNode,
|
|
&ett_opcua_ObjectNode,
|
|
&ett_opcua_array_ObjectNode,
|
|
&ett_opcua_ObjectTypeNode,
|
|
&ett_opcua_array_ObjectTypeNode,
|
|
&ett_opcua_VariableNode,
|
|
&ett_opcua_array_VariableNode,
|
|
&ett_opcua_VariableTypeNode,
|
|
&ett_opcua_array_VariableTypeNode,
|
|
&ett_opcua_ReferenceTypeNode,
|
|
&ett_opcua_array_ReferenceTypeNode,
|
|
&ett_opcua_MethodNode,
|
|
&ett_opcua_array_MethodNode,
|
|
&ett_opcua_ViewNode,
|
|
&ett_opcua_array_ViewNode,
|
|
&ett_opcua_DataTypeNode,
|
|
&ett_opcua_array_DataTypeNode,
|
|
&ett_opcua_ReferenceNode,
|
|
&ett_opcua_array_ReferenceNode,
|
|
&ett_opcua_Argument,
|
|
&ett_opcua_array_Argument,
|
|
&ett_opcua_EnumValueType,
|
|
&ett_opcua_array_EnumValueType,
|
|
&ett_opcua_OptionSet,
|
|
&ett_opcua_array_OptionSet,
|
|
&ett_opcua_TimeZoneDataType,
|
|
&ett_opcua_array_TimeZoneDataType,
|
|
&ett_opcua_ApplicationDescription,
|
|
&ett_opcua_array_ApplicationDescription,
|
|
&ett_opcua_RequestHeader,
|
|
&ett_opcua_array_RequestHeader,
|
|
&ett_opcua_ResponseHeader,
|
|
&ett_opcua_array_ResponseHeader,
|
|
&ett_opcua_ServerOnNetwork,
|
|
&ett_opcua_array_ServerOnNetwork,
|
|
&ett_opcua_UserTokenPolicy,
|
|
&ett_opcua_array_UserTokenPolicy,
|
|
&ett_opcua_EndpointDescription,
|
|
&ett_opcua_array_EndpointDescription,
|
|
&ett_opcua_RegisteredServer,
|
|
&ett_opcua_array_RegisteredServer,
|
|
&ett_opcua_MdnsDiscoveryConfiguration,
|
|
&ett_opcua_array_MdnsDiscoveryConfiguration,
|
|
&ett_opcua_ChannelSecurityToken,
|
|
&ett_opcua_array_ChannelSecurityToken,
|
|
&ett_opcua_SignedSoftwareCertificate,
|
|
&ett_opcua_array_SignedSoftwareCertificate,
|
|
&ett_opcua_SignatureData,
|
|
&ett_opcua_array_SignatureData,
|
|
&ett_opcua_UserIdentityToken,
|
|
&ett_opcua_array_UserIdentityToken,
|
|
&ett_opcua_AnonymousIdentityToken,
|
|
&ett_opcua_array_AnonymousIdentityToken,
|
|
&ett_opcua_UserNameIdentityToken,
|
|
&ett_opcua_array_UserNameIdentityToken,
|
|
&ett_opcua_X509IdentityToken,
|
|
&ett_opcua_array_X509IdentityToken,
|
|
&ett_opcua_KerberosIdentityToken,
|
|
&ett_opcua_array_KerberosIdentityToken,
|
|
&ett_opcua_IssuedIdentityToken,
|
|
&ett_opcua_array_IssuedIdentityToken,
|
|
&ett_opcua_NodeAttributes,
|
|
&ett_opcua_array_NodeAttributes,
|
|
&ett_opcua_ObjectAttributes,
|
|
&ett_opcua_array_ObjectAttributes,
|
|
&ett_opcua_VariableAttributes,
|
|
&ett_opcua_array_VariableAttributes,
|
|
&ett_opcua_MethodAttributes,
|
|
&ett_opcua_array_MethodAttributes,
|
|
&ett_opcua_ObjectTypeAttributes,
|
|
&ett_opcua_array_ObjectTypeAttributes,
|
|
&ett_opcua_VariableTypeAttributes,
|
|
&ett_opcua_array_VariableTypeAttributes,
|
|
&ett_opcua_ReferenceTypeAttributes,
|
|
&ett_opcua_array_ReferenceTypeAttributes,
|
|
&ett_opcua_DataTypeAttributes,
|
|
&ett_opcua_array_DataTypeAttributes,
|
|
&ett_opcua_ViewAttributes,
|
|
&ett_opcua_array_ViewAttributes,
|
|
&ett_opcua_AddNodesItem,
|
|
&ett_opcua_array_AddNodesItem,
|
|
&ett_opcua_AddNodesResult,
|
|
&ett_opcua_array_AddNodesResult,
|
|
&ett_opcua_AddReferencesItem,
|
|
&ett_opcua_array_AddReferencesItem,
|
|
&ett_opcua_DeleteNodesItem,
|
|
&ett_opcua_array_DeleteNodesItem,
|
|
&ett_opcua_DeleteReferencesItem,
|
|
&ett_opcua_array_DeleteReferencesItem,
|
|
&ett_opcua_ViewDescription,
|
|
&ett_opcua_array_ViewDescription,
|
|
&ett_opcua_BrowseDescription,
|
|
&ett_opcua_array_BrowseDescription,
|
|
&ett_opcua_ReferenceDescription,
|
|
&ett_opcua_array_ReferenceDescription,
|
|
&ett_opcua_BrowseResult,
|
|
&ett_opcua_array_BrowseResult,
|
|
&ett_opcua_RelativePathElement,
|
|
&ett_opcua_array_RelativePathElement,
|
|
&ett_opcua_RelativePath,
|
|
&ett_opcua_array_RelativePath,
|
|
&ett_opcua_BrowsePath,
|
|
&ett_opcua_array_BrowsePath,
|
|
&ett_opcua_BrowsePathTarget,
|
|
&ett_opcua_array_BrowsePathTarget,
|
|
&ett_opcua_BrowsePathResult,
|
|
&ett_opcua_array_BrowsePathResult,
|
|
&ett_opcua_EndpointConfiguration,
|
|
&ett_opcua_array_EndpointConfiguration,
|
|
&ett_opcua_SupportedProfile,
|
|
&ett_opcua_array_SupportedProfile,
|
|
&ett_opcua_SoftwareCertificate,
|
|
&ett_opcua_array_SoftwareCertificate,
|
|
&ett_opcua_QueryDataDescription,
|
|
&ett_opcua_array_QueryDataDescription,
|
|
&ett_opcua_NodeTypeDescription,
|
|
&ett_opcua_array_NodeTypeDescription,
|
|
&ett_opcua_QueryDataSet,
|
|
&ett_opcua_array_QueryDataSet,
|
|
&ett_opcua_NodeReference,
|
|
&ett_opcua_array_NodeReference,
|
|
&ett_opcua_ContentFilterElement,
|
|
&ett_opcua_array_ContentFilterElement,
|
|
&ett_opcua_ContentFilter,
|
|
&ett_opcua_array_ContentFilter,
|
|
&ett_opcua_ElementOperand,
|
|
&ett_opcua_array_ElementOperand,
|
|
&ett_opcua_LiteralOperand,
|
|
&ett_opcua_array_LiteralOperand,
|
|
&ett_opcua_AttributeOperand,
|
|
&ett_opcua_array_AttributeOperand,
|
|
&ett_opcua_SimpleAttributeOperand,
|
|
&ett_opcua_array_SimpleAttributeOperand,
|
|
&ett_opcua_ContentFilterElementResult,
|
|
&ett_opcua_array_ContentFilterElementResult,
|
|
&ett_opcua_ContentFilterResult,
|
|
&ett_opcua_array_ContentFilterResult,
|
|
&ett_opcua_ParsingResult,
|
|
&ett_opcua_array_ParsingResult,
|
|
&ett_opcua_ReadValueId,
|
|
&ett_opcua_array_ReadValueId,
|
|
&ett_opcua_HistoryReadValueId,
|
|
&ett_opcua_array_HistoryReadValueId,
|
|
&ett_opcua_HistoryReadResult,
|
|
&ett_opcua_array_HistoryReadResult,
|
|
&ett_opcua_ReadEventDetails,
|
|
&ett_opcua_array_ReadEventDetails,
|
|
&ett_opcua_ReadRawModifiedDetails,
|
|
&ett_opcua_array_ReadRawModifiedDetails,
|
|
&ett_opcua_ReadProcessedDetails,
|
|
&ett_opcua_array_ReadProcessedDetails,
|
|
&ett_opcua_ReadAtTimeDetails,
|
|
&ett_opcua_array_ReadAtTimeDetails,
|
|
&ett_opcua_HistoryData,
|
|
&ett_opcua_array_HistoryData,
|
|
&ett_opcua_ModificationInfo,
|
|
&ett_opcua_array_ModificationInfo,
|
|
&ett_opcua_HistoryModifiedData,
|
|
&ett_opcua_array_HistoryModifiedData,
|
|
&ett_opcua_HistoryEvent,
|
|
&ett_opcua_array_HistoryEvent,
|
|
&ett_opcua_WriteValue,
|
|
&ett_opcua_array_WriteValue,
|
|
&ett_opcua_HistoryUpdateDetails,
|
|
&ett_opcua_array_HistoryUpdateDetails,
|
|
&ett_opcua_UpdateDataDetails,
|
|
&ett_opcua_array_UpdateDataDetails,
|
|
&ett_opcua_UpdateStructureDataDetails,
|
|
&ett_opcua_array_UpdateStructureDataDetails,
|
|
&ett_opcua_UpdateEventDetails,
|
|
&ett_opcua_array_UpdateEventDetails,
|
|
&ett_opcua_DeleteRawModifiedDetails,
|
|
&ett_opcua_array_DeleteRawModifiedDetails,
|
|
&ett_opcua_DeleteAtTimeDetails,
|
|
&ett_opcua_array_DeleteAtTimeDetails,
|
|
&ett_opcua_DeleteEventDetails,
|
|
&ett_opcua_array_DeleteEventDetails,
|
|
&ett_opcua_HistoryUpdateResult,
|
|
&ett_opcua_array_HistoryUpdateResult,
|
|
&ett_opcua_CallMethodRequest,
|
|
&ett_opcua_array_CallMethodRequest,
|
|
&ett_opcua_CallMethodResult,
|
|
&ett_opcua_array_CallMethodResult,
|
|
&ett_opcua_DataChangeFilter,
|
|
&ett_opcua_array_DataChangeFilter,
|
|
&ett_opcua_EventFilter,
|
|
&ett_opcua_array_EventFilter,
|
|
&ett_opcua_AggregateConfiguration,
|
|
&ett_opcua_array_AggregateConfiguration,
|
|
&ett_opcua_AggregateFilter,
|
|
&ett_opcua_array_AggregateFilter,
|
|
&ett_opcua_EventFilterResult,
|
|
&ett_opcua_array_EventFilterResult,
|
|
&ett_opcua_AggregateFilterResult,
|
|
&ett_opcua_array_AggregateFilterResult,
|
|
&ett_opcua_MonitoringParameters,
|
|
&ett_opcua_array_MonitoringParameters,
|
|
&ett_opcua_MonitoredItemCreateRequest,
|
|
&ett_opcua_array_MonitoredItemCreateRequest,
|
|
&ett_opcua_MonitoredItemCreateResult,
|
|
&ett_opcua_array_MonitoredItemCreateResult,
|
|
&ett_opcua_MonitoredItemModifyRequest,
|
|
&ett_opcua_array_MonitoredItemModifyRequest,
|
|
&ett_opcua_MonitoredItemModifyResult,
|
|
&ett_opcua_array_MonitoredItemModifyResult,
|
|
&ett_opcua_NotificationMessage,
|
|
&ett_opcua_array_NotificationMessage,
|
|
&ett_opcua_DataChangeNotification,
|
|
&ett_opcua_array_DataChangeNotification,
|
|
&ett_opcua_MonitoredItemNotification,
|
|
&ett_opcua_array_MonitoredItemNotification,
|
|
&ett_opcua_EventNotificationList,
|
|
&ett_opcua_array_EventNotificationList,
|
|
&ett_opcua_EventFieldList,
|
|
&ett_opcua_array_EventFieldList,
|
|
&ett_opcua_HistoryEventFieldList,
|
|
&ett_opcua_array_HistoryEventFieldList,
|
|
&ett_opcua_StatusChangeNotification,
|
|
&ett_opcua_array_StatusChangeNotification,
|
|
&ett_opcua_SubscriptionAcknowledgement,
|
|
&ett_opcua_array_SubscriptionAcknowledgement,
|
|
&ett_opcua_TransferResult,
|
|
&ett_opcua_array_TransferResult,
|
|
&ett_opcua_ScalarTestType,
|
|
&ett_opcua_array_ScalarTestType,
|
|
&ett_opcua_ArrayTestType,
|
|
&ett_opcua_array_ArrayTestType,
|
|
&ett_opcua_CompositeTestType,
|
|
&ett_opcua_array_CompositeTestType,
|
|
&ett_opcua_BuildInfo,
|
|
&ett_opcua_array_BuildInfo,
|
|
&ett_opcua_RedundantServerDataType,
|
|
&ett_opcua_array_RedundantServerDataType,
|
|
&ett_opcua_EndpointUrlListDataType,
|
|
&ett_opcua_array_EndpointUrlListDataType,
|
|
&ett_opcua_NetworkGroupDataType,
|
|
&ett_opcua_array_NetworkGroupDataType,
|
|
&ett_opcua_SamplingIntervalDiagnosticsDataType,
|
|
&ett_opcua_array_SamplingIntervalDiagnosticsDataType,
|
|
&ett_opcua_ServerDiagnosticsSummaryDataType,
|
|
&ett_opcua_array_ServerDiagnosticsSummaryDataType,
|
|
&ett_opcua_ServerStatusDataType,
|
|
&ett_opcua_array_ServerStatusDataType,
|
|
&ett_opcua_SessionDiagnosticsDataType,
|
|
&ett_opcua_array_SessionDiagnosticsDataType,
|
|
&ett_opcua_SessionSecurityDiagnosticsDataType,
|
|
&ett_opcua_array_SessionSecurityDiagnosticsDataType,
|
|
&ett_opcua_ServiceCounterDataType,
|
|
&ett_opcua_array_ServiceCounterDataType,
|
|
&ett_opcua_StatusResult,
|
|
&ett_opcua_array_StatusResult,
|
|
&ett_opcua_SubscriptionDiagnosticsDataType,
|
|
&ett_opcua_array_SubscriptionDiagnosticsDataType,
|
|
&ett_opcua_ModelChangeStructureDataType,
|
|
&ett_opcua_array_ModelChangeStructureDataType,
|
|
&ett_opcua_SemanticChangeStructureDataType,
|
|
&ett_opcua_array_SemanticChangeStructureDataType,
|
|
&ett_opcua_Range,
|
|
&ett_opcua_array_Range,
|
|
&ett_opcua_EUInformation,
|
|
&ett_opcua_array_EUInformation,
|
|
&ett_opcua_ComplexNumberType,
|
|
&ett_opcua_array_ComplexNumberType,
|
|
&ett_opcua_DoubleComplexNumberType,
|
|
&ett_opcua_array_DoubleComplexNumberType,
|
|
&ett_opcua_AxisInformation,
|
|
&ett_opcua_array_AxisInformation,
|
|
&ett_opcua_XVType,
|
|
&ett_opcua_array_XVType,
|
|
&ett_opcua_ProgramDiagnosticDataType,
|
|
&ett_opcua_array_ProgramDiagnosticDataType,
|
|
&ett_opcua_Annotation,
|
|
&ett_opcua_array_Annotation,
|
|
};
|
|
|
|
void registerComplexTypes(void)
|
|
{
|
|
proto_register_subtree_array(ett, array_length(ett));
|
|
}
|
|
|