diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /plugins/epan/opcua/opcua_serviceparser.c | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'plugins/epan/opcua/opcua_serviceparser.c')
-rw-r--r-- | plugins/epan/opcua/opcua_serviceparser.c | 1317 |
1 files changed, 1317 insertions, 0 deletions
diff --git a/plugins/epan/opcua/opcua_serviceparser.c b/plugins/epan/opcua/opcua_serviceparser.c new file mode 100644 index 00000000..d71b6781 --- /dev/null +++ b/plugins/epan/opcua/opcua_serviceparser.c @@ -0,0 +1,1317 @@ +/****************************************************************************** +** Copyright (C) 2006-2015 ascolab GmbH. All Rights Reserved. +** Web: http://www.ascolab.com +** +** SPDX-License-Identifier: GPL-2.0-or-later +** +** 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" +#include "opcua_serviceparser.h" + +gint ett_opcua_ServiceFault = -1; +gint ett_opcua_array_ServiceFault = -1; +gint ett_opcua_FindServersRequest = -1; +gint ett_opcua_array_FindServersRequest = -1; +gint ett_opcua_FindServersResponse = -1; +gint ett_opcua_array_FindServersResponse = -1; +gint ett_opcua_FindServersOnNetworkRequest = -1; +gint ett_opcua_array_FindServersOnNetworkRequest = -1; +gint ett_opcua_FindServersOnNetworkResponse = -1; +gint ett_opcua_array_FindServersOnNetworkResponse = -1; +gint ett_opcua_GetEndpointsRequest = -1; +gint ett_opcua_array_GetEndpointsRequest = -1; +gint ett_opcua_GetEndpointsResponse = -1; +gint ett_opcua_array_GetEndpointsResponse = -1; +gint ett_opcua_RegisterServerRequest = -1; +gint ett_opcua_array_RegisterServerRequest = -1; +gint ett_opcua_RegisterServerResponse = -1; +gint ett_opcua_array_RegisterServerResponse = -1; +gint ett_opcua_RegisterServer2Request = -1; +gint ett_opcua_array_RegisterServer2Request = -1; +gint ett_opcua_RegisterServer2Response = -1; +gint ett_opcua_array_RegisterServer2Response = -1; +gint ett_opcua_OpenSecureChannelRequest = -1; +gint ett_opcua_array_OpenSecureChannelRequest = -1; +gint ett_opcua_OpenSecureChannelResponse = -1; +gint ett_opcua_array_OpenSecureChannelResponse = -1; +gint ett_opcua_CloseSecureChannelRequest = -1; +gint ett_opcua_array_CloseSecureChannelRequest = -1; +gint ett_opcua_CloseSecureChannelResponse = -1; +gint ett_opcua_array_CloseSecureChannelResponse = -1; +gint ett_opcua_CreateSessionRequest = -1; +gint ett_opcua_array_CreateSessionRequest = -1; +gint ett_opcua_CreateSessionResponse = -1; +gint ett_opcua_array_CreateSessionResponse = -1; +gint ett_opcua_ActivateSessionRequest = -1; +gint ett_opcua_array_ActivateSessionRequest = -1; +gint ett_opcua_ActivateSessionResponse = -1; +gint ett_opcua_array_ActivateSessionResponse = -1; +gint ett_opcua_CloseSessionRequest = -1; +gint ett_opcua_array_CloseSessionRequest = -1; +gint ett_opcua_CloseSessionResponse = -1; +gint ett_opcua_array_CloseSessionResponse = -1; +gint ett_opcua_CancelRequest = -1; +gint ett_opcua_array_CancelRequest = -1; +gint ett_opcua_CancelResponse = -1; +gint ett_opcua_array_CancelResponse = -1; +gint ett_opcua_AddNodesRequest = -1; +gint ett_opcua_array_AddNodesRequest = -1; +gint ett_opcua_AddNodesResponse = -1; +gint ett_opcua_array_AddNodesResponse = -1; +gint ett_opcua_AddReferencesRequest = -1; +gint ett_opcua_array_AddReferencesRequest = -1; +gint ett_opcua_AddReferencesResponse = -1; +gint ett_opcua_array_AddReferencesResponse = -1; +gint ett_opcua_DeleteNodesRequest = -1; +gint ett_opcua_array_DeleteNodesRequest = -1; +gint ett_opcua_DeleteNodesResponse = -1; +gint ett_opcua_array_DeleteNodesResponse = -1; +gint ett_opcua_DeleteReferencesRequest = -1; +gint ett_opcua_array_DeleteReferencesRequest = -1; +gint ett_opcua_DeleteReferencesResponse = -1; +gint ett_opcua_array_DeleteReferencesResponse = -1; +gint ett_opcua_BrowseRequest = -1; +gint ett_opcua_array_BrowseRequest = -1; +gint ett_opcua_BrowseResponse = -1; +gint ett_opcua_array_BrowseResponse = -1; +gint ett_opcua_BrowseNextRequest = -1; +gint ett_opcua_array_BrowseNextRequest = -1; +gint ett_opcua_BrowseNextResponse = -1; +gint ett_opcua_array_BrowseNextResponse = -1; +gint ett_opcua_TranslateBrowsePathsToNodeIdsRequest = -1; +gint ett_opcua_array_TranslateBrowsePathsToNodeIdsRequest = -1; +gint ett_opcua_TranslateBrowsePathsToNodeIdsResponse = -1; +gint ett_opcua_array_TranslateBrowsePathsToNodeIdsResponse = -1; +gint ett_opcua_RegisterNodesRequest = -1; +gint ett_opcua_array_RegisterNodesRequest = -1; +gint ett_opcua_RegisterNodesResponse = -1; +gint ett_opcua_array_RegisterNodesResponse = -1; +gint ett_opcua_UnregisterNodesRequest = -1; +gint ett_opcua_array_UnregisterNodesRequest = -1; +gint ett_opcua_UnregisterNodesResponse = -1; +gint ett_opcua_array_UnregisterNodesResponse = -1; +gint ett_opcua_QueryFirstRequest = -1; +gint ett_opcua_array_QueryFirstRequest = -1; +gint ett_opcua_QueryFirstResponse = -1; +gint ett_opcua_array_QueryFirstResponse = -1; +gint ett_opcua_QueryNextRequest = -1; +gint ett_opcua_array_QueryNextRequest = -1; +gint ett_opcua_QueryNextResponse = -1; +gint ett_opcua_array_QueryNextResponse = -1; +gint ett_opcua_ReadRequest = -1; +gint ett_opcua_array_ReadRequest = -1; +gint ett_opcua_ReadResponse = -1; +gint ett_opcua_array_ReadResponse = -1; +gint ett_opcua_HistoryReadRequest = -1; +gint ett_opcua_array_HistoryReadRequest = -1; +gint ett_opcua_HistoryReadResponse = -1; +gint ett_opcua_array_HistoryReadResponse = -1; +gint ett_opcua_WriteRequest = -1; +gint ett_opcua_array_WriteRequest = -1; +gint ett_opcua_WriteResponse = -1; +gint ett_opcua_array_WriteResponse = -1; +gint ett_opcua_HistoryUpdateRequest = -1; +gint ett_opcua_array_HistoryUpdateRequest = -1; +gint ett_opcua_HistoryUpdateResponse = -1; +gint ett_opcua_array_HistoryUpdateResponse = -1; +gint ett_opcua_CallRequest = -1; +gint ett_opcua_array_CallRequest = -1; +gint ett_opcua_CallResponse = -1; +gint ett_opcua_array_CallResponse = -1; +gint ett_opcua_CreateMonitoredItemsRequest = -1; +gint ett_opcua_array_CreateMonitoredItemsRequest = -1; +gint ett_opcua_CreateMonitoredItemsResponse = -1; +gint ett_opcua_array_CreateMonitoredItemsResponse = -1; +gint ett_opcua_ModifyMonitoredItemsRequest = -1; +gint ett_opcua_array_ModifyMonitoredItemsRequest = -1; +gint ett_opcua_ModifyMonitoredItemsResponse = -1; +gint ett_opcua_array_ModifyMonitoredItemsResponse = -1; +gint ett_opcua_SetMonitoringModeRequest = -1; +gint ett_opcua_array_SetMonitoringModeRequest = -1; +gint ett_opcua_SetMonitoringModeResponse = -1; +gint ett_opcua_array_SetMonitoringModeResponse = -1; +gint ett_opcua_SetTriggeringRequest = -1; +gint ett_opcua_array_SetTriggeringRequest = -1; +gint ett_opcua_SetTriggeringResponse = -1; +gint ett_opcua_array_SetTriggeringResponse = -1; +gint ett_opcua_DeleteMonitoredItemsRequest = -1; +gint ett_opcua_array_DeleteMonitoredItemsRequest = -1; +gint ett_opcua_DeleteMonitoredItemsResponse = -1; +gint ett_opcua_array_DeleteMonitoredItemsResponse = -1; +gint ett_opcua_CreateSubscriptionRequest = -1; +gint ett_opcua_array_CreateSubscriptionRequest = -1; +gint ett_opcua_CreateSubscriptionResponse = -1; +gint ett_opcua_array_CreateSubscriptionResponse = -1; +gint ett_opcua_ModifySubscriptionRequest = -1; +gint ett_opcua_array_ModifySubscriptionRequest = -1; +gint ett_opcua_ModifySubscriptionResponse = -1; +gint ett_opcua_array_ModifySubscriptionResponse = -1; +gint ett_opcua_SetPublishingModeRequest = -1; +gint ett_opcua_array_SetPublishingModeRequest = -1; +gint ett_opcua_SetPublishingModeResponse = -1; +gint ett_opcua_array_SetPublishingModeResponse = -1; +gint ett_opcua_PublishRequest = -1; +gint ett_opcua_array_PublishRequest = -1; +gint ett_opcua_PublishResponse = -1; +gint ett_opcua_array_PublishResponse = -1; +gint ett_opcua_RepublishRequest = -1; +gint ett_opcua_array_RepublishRequest = -1; +gint ett_opcua_RepublishResponse = -1; +gint ett_opcua_array_RepublishResponse = -1; +gint ett_opcua_TransferSubscriptionsRequest = -1; +gint ett_opcua_array_TransferSubscriptionsRequest = -1; +gint ett_opcua_TransferSubscriptionsResponse = -1; +gint ett_opcua_array_TransferSubscriptionsResponse = -1; +gint ett_opcua_DeleteSubscriptionsRequest = -1; +gint ett_opcua_array_DeleteSubscriptionsRequest = -1; +gint ett_opcua_DeleteSubscriptionsResponse = -1; +gint ett_opcua_array_DeleteSubscriptionsResponse = -1; +gint ett_opcua_TestStackRequest = -1; +gint ett_opcua_array_TestStackRequest = -1; +gint ett_opcua_TestStackResponse = -1; +gint ett_opcua_array_TestStackResponse = -1; +gint ett_opcua_TestStackExRequest = -1; +gint ett_opcua_array_TestStackExRequest = -1; +gint ett_opcua_TestStackExResponse = -1; +gint ett_opcua_array_TestStackExResponse = -1; + +void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ServiceFault, &ti, "ServiceFault"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersRequest, &ti, "FindServersRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + 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); + /* Array length field ignored: NoOfServerUris */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerUris", "String", hf_opcua_ServerUris, parseString, ett_opcua_array_String); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersResponse, &ti, "FindServersResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfServers */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Servers", "ApplicationDescription", parseApplicationDescription, ett_opcua_array_ApplicationDescription); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseFindServersOnNetworkRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersOnNetworkRequest, &ti, "FindServersOnNetworkRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_StartingRecordId); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxRecordsToReturn); + /* Array length field ignored: NoOfServerCapabilityFilter */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilityFilter", "String", hf_opcua_ServerCapabilityFilter, parseString, ett_opcua_array_String); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseFindServersOnNetworkResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersOnNetworkResponse, &ti, "FindServersOnNetworkResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_LastCounterResetTime); + /* Array length field ignored: NoOfServers */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Servers", "ServerOnNetwork", parseServerOnNetwork, ett_opcua_array_ServerOnNetwork); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_GetEndpointsRequest, &ti, "GetEndpointsRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + 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); + /* Array length field ignored: NoOfProfileUris */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "ProfileUris", "String", hf_opcua_ProfileUris, parseString, ett_opcua_array_String); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_GetEndpointsResponse, &ti, "GetEndpointsResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfEndpoints */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Endpoints", "EndpointDescription", parseEndpointDescription, ett_opcua_array_EndpointDescription); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServerRequest, &ti, "RegisterServerRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseRegisteredServer(subtree, tvb, pinfo, pOffset, "Server"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServerResponse, &ti, "RegisterServerResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseRegisterServer2Request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServer2Request, &ti, "RegisterServer2Request"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseRegisteredServer(subtree, tvb, pinfo, pOffset, "Server"); + /* Array length field ignored: NoOfDiscoveryConfiguration */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiscoveryConfiguration", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseRegisterServer2Response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServer2Response, &ti, "RegisterServer2Response"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfConfigurationResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "ConfigurationResults", "StatusCode", hf_opcua_ConfigurationResults, 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 parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_OpenSecureChannelRequest, &ti, "OpenSecureChannelRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ClientProtocolVersion); + parseSecurityTokenRequestType(subtree, tvb, pinfo, pOffset); + parseMessageSecurityMode(subtree, tvb, pinfo, pOffset); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientNonce); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedLifetime); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_OpenSecureChannelResponse, &ti, "OpenSecureChannelResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ServerProtocolVersion); + parseChannelSecurityToken(subtree, tvb, pinfo, pOffset, "SecurityToken"); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerNonce); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSecureChannelRequest, &ti, "CloseSecureChannelRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSecureChannelResponse, &ti, "CloseSecureChannelResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSessionRequest, &ti, "CreateSessionRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseApplicationDescription(subtree, tvb, pinfo, pOffset, "ClientDescription"); + parseString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerUri); + parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EndpointUrl); + parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SessionName); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientNonce); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientCertificate); + parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedSessionTimeout); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxResponseMessageSize); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSessionResponse, &ti, "CreateSessionResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseNodeId(subtree, tvb, pinfo, pOffset, "SessionId"); + parseNodeId(subtree, tvb, pinfo, pOffset, "AuthenticationToken"); + parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedSessionTimeout); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerNonce); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerCertificate); + /* Array length field ignored: NoOfServerEndpoints */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ServerEndpoints", "EndpointDescription", parseEndpointDescription, ett_opcua_array_EndpointDescription); + /* Array length field ignored: NoOfServerSoftwareCertificates */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ServerSoftwareCertificates", "SignedSoftwareCertificate", parseSignedSoftwareCertificate, ett_opcua_array_SignedSoftwareCertificate); + parseSignatureData(subtree, tvb, pinfo, pOffset, "ServerSignature"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxRequestMessageSize); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ActivateSessionRequest, &ti, "ActivateSessionRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseSignatureData(subtree, tvb, pinfo, pOffset, "ClientSignature"); + /* Array length field ignored: NoOfClientSoftwareCertificates */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ClientSoftwareCertificates", "SignedSoftwareCertificate", parseSignedSoftwareCertificate, ett_opcua_array_SignedSoftwareCertificate); + /* Array length field ignored: NoOfLocaleIds */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "LocaleIds", "String", hf_opcua_LocaleIds, parseString, ett_opcua_array_String); + parseExtensionObject(subtree, tvb, pinfo, pOffset, "UserIdentityToken"); + parseSignatureData(subtree, tvb, pinfo, pOffset, "UserTokenSignature"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ActivateSessionResponse, &ti, "ActivateSessionResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerNonce); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSessionRequest, &ti, "CloseSessionRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteSubscriptions); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSessionResponse, &ti, "CloseSessionResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CancelRequest, &ti, "CancelRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestHandle); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CancelResponse, &ti, "CancelResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CancelCount); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddNodesRequest, &ti, "AddNodesRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfNodesToAdd */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToAdd", "AddNodesItem", parseAddNodesItem, ett_opcua_array_AddNodesItem); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddNodesResponse, &ti, "AddNodesResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "AddNodesResult", parseAddNodesResult, ett_opcua_array_AddNodesResult); + /* 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 parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddReferencesRequest, &ti, "AddReferencesRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfReferencesToAdd */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ReferencesToAdd", "AddReferencesItem", parseAddReferencesItem, ett_opcua_array_AddReferencesItem); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddReferencesResponse, &ti, "AddReferencesResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteNodesRequest, &ti, "DeleteNodesRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfNodesToDelete */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToDelete", "DeleteNodesItem", parseDeleteNodesItem, ett_opcua_array_DeleteNodesItem); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteNodesResponse, &ti, "DeleteNodesResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteReferencesRequest, &ti, "DeleteReferencesRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfReferencesToDelete */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ReferencesToDelete", "DeleteReferencesItem", parseDeleteReferencesItem, ett_opcua_array_DeleteReferencesItem); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteReferencesResponse, &ti, "DeleteReferencesResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseRequest, &ti, "BrowseRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseViewDescription(subtree, tvb, pinfo, pOffset, "View"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedMaxReferencesPerNode); + /* Array length field ignored: NoOfNodesToBrowse */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToBrowse", "BrowseDescription", parseBrowseDescription, ett_opcua_array_BrowseDescription); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseResponse, &ti, "BrowseResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "BrowseResult", parseBrowseResult, ett_opcua_array_BrowseResult); + /* 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 parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseNextRequest, &ti, "BrowseNextRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ReleaseContinuationPoints); + /* Array length field ignored: NoOfContinuationPoints */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "ContinuationPoints", "ByteString", hf_opcua_ContinuationPoints, parseByteString, ett_opcua_array_ByteString); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseNextResponse, &ti, "BrowseNextResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "BrowseResult", parseBrowseResult, ett_opcua_array_BrowseResult); + /* 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 parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TranslateBrowsePathsToNodeIdsRequest, &ti, "TranslateBrowsePathsToNodeIdsRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfBrowsePaths */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "BrowsePaths", "BrowsePath", parseBrowsePath, ett_opcua_array_BrowsePath); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TranslateBrowsePathsToNodeIdsResponse, &ti, "TranslateBrowsePathsToNodeIdsResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "BrowsePathResult", parseBrowsePathResult, ett_opcua_array_BrowsePathResult); + /* 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 parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterNodesRequest, &ti, "RegisterNodesRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfNodesToRegister */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToRegister", "NodeId", parseNodeId, ett_opcua_array_NodeId); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterNodesResponse, &ti, "RegisterNodesResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfRegisteredNodeIds */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "RegisteredNodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_UnregisterNodesRequest, &ti, "UnregisterNodesRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfNodesToUnregister */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToUnregister", "NodeId", parseNodeId, ett_opcua_array_NodeId); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_UnregisterNodesResponse, &ti, "UnregisterNodesResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryFirstRequest, &ti, "QueryFirstRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseViewDescription(subtree, tvb, pinfo, pOffset, "View"); + /* Array length field ignored: NoOfNodeTypes */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodeTypes", "NodeTypeDescription", parseNodeTypeDescription, ett_opcua_array_NodeTypeDescription); + parseContentFilter(subtree, tvb, pinfo, pOffset, "Filter"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxDataSetsToReturn); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxReferencesToReturn); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryFirstResponse, &ti, "QueryFirstResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfQueryDataSets */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "QueryDataSets", "QueryDataSet", parseQueryDataSet, ett_opcua_array_QueryDataSet); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint); + /* Array length field ignored: NoOfParsingResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ParsingResults", "ParsingResult", parseParsingResult, ett_opcua_array_ParsingResult); + /* Array length field ignored: NoOfDiagnosticInfos */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo); + parseContentFilterResult(subtree, tvb, pinfo, pOffset, "FilterResult"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryNextRequest, &ti, "QueryNextRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ReleaseContinuationPoint); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryNextResponse, &ti, "QueryNextResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfQueryDataSets */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "QueryDataSets", "QueryDataSet", parseQueryDataSet, ett_opcua_array_QueryDataSet); + parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedContinuationPoint); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ReadRequest, &ti, "ReadRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_MaxAge); + parseTimestampsToReturn(subtree, tvb, pinfo, pOffset); + /* Array length field ignored: NoOfNodesToRead */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToRead", "ReadValueId", parseReadValueId, ett_opcua_array_ReadValueId); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ReadResponse, &ti, "ReadResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "DataValue", parseDataValue, ett_opcua_array_DataValue); + /* 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 parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadRequest, &ti, "HistoryReadRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseExtensionObject(subtree, tvb, pinfo, pOffset, "HistoryReadDetails"); + parseTimestampsToReturn(subtree, tvb, pinfo, pOffset); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ReleaseContinuationPoints); + /* Array length field ignored: NoOfNodesToRead */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToRead", "HistoryReadValueId", parseHistoryReadValueId, ett_opcua_array_HistoryReadValueId); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadResponse, &ti, "HistoryReadResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "HistoryReadResult", parseHistoryReadResult, ett_opcua_array_HistoryReadResult); + /* 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 parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_WriteRequest, &ti, "WriteRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfNodesToWrite */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToWrite", "WriteValue", parseWriteValue, ett_opcua_array_WriteValue); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_WriteResponse, &ti, "WriteResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateRequest, &ti, "HistoryUpdateRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfHistoryUpdateDetails */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "HistoryUpdateDetails", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateResponse, &ti, "HistoryUpdateResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "HistoryUpdateResult", parseHistoryUpdateResult, ett_opcua_array_HistoryUpdateResult); + /* 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 parseCallRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CallRequest, &ti, "CallRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfMethodsToCall */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "MethodsToCall", "CallMethodRequest", parseCallMethodRequest, ett_opcua_array_CallMethodRequest); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CallResponse, &ti, "CallResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "CallMethodResult", parseCallMethodResult, ett_opcua_array_CallMethodResult); + /* 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 parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateMonitoredItemsRequest, &ti, "CreateMonitoredItemsRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + parseTimestampsToReturn(subtree, tvb, pinfo, pOffset); + /* Array length field ignored: NoOfItemsToCreate */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ItemsToCreate", "MonitoredItemCreateRequest", parseMonitoredItemCreateRequest, ett_opcua_array_MonitoredItemCreateRequest); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateMonitoredItemsResponse, &ti, "CreateMonitoredItemsResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "MonitoredItemCreateResult", parseMonitoredItemCreateResult, ett_opcua_array_MonitoredItemCreateResult); + /* 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 parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifyMonitoredItemsRequest, &ti, "ModifyMonitoredItemsRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + parseTimestampsToReturn(subtree, tvb, pinfo, pOffset); + /* Array length field ignored: NoOfItemsToModify */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "ItemsToModify", "MonitoredItemModifyRequest", parseMonitoredItemModifyRequest, ett_opcua_array_MonitoredItemModifyRequest); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifyMonitoredItemsResponse, &ti, "ModifyMonitoredItemsResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "MonitoredItemModifyResult", parseMonitoredItemModifyResult, ett_opcua_array_MonitoredItemModifyResult); + /* 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 parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetMonitoringModeRequest, &ti, "SetMonitoringModeRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + parseMonitoringMode(subtree, tvb, pinfo, pOffset); + /* Array length field ignored: NoOfMonitoredItemIds */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "MonitoredItemIds", "UInt32", hf_opcua_MonitoredItemIds, parseUInt32, ett_opcua_array_UInt32); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetMonitoringModeResponse, &ti, "SetMonitoringModeResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetTriggeringRequest, &ti, "SetTriggeringRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TriggeringItemId); + /* Array length field ignored: NoOfLinksToAdd */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "LinksToAdd", "UInt32", hf_opcua_LinksToAdd, parseUInt32, ett_opcua_array_UInt32); + /* Array length field ignored: NoOfLinksToRemove */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "LinksToRemove", "UInt32", hf_opcua_LinksToRemove, parseUInt32, ett_opcua_array_UInt32); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetTriggeringResponse, &ti, "SetTriggeringResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfAddResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "AddResults", "StatusCode", hf_opcua_AddResults, parseStatusCode, ett_opcua_array_StatusCode); + /* Array length field ignored: NoOfAddDiagnosticInfos */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "AddDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo); + /* Array length field ignored: NoOfRemoveResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "RemoveResults", "StatusCode", hf_opcua_RemoveResults, parseStatusCode, ett_opcua_array_StatusCode); + /* Array length field ignored: NoOfRemoveDiagnosticInfos */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "RemoveDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteMonitoredItemsRequest, &ti, "DeleteMonitoredItemsRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + /* Array length field ignored: NoOfMonitoredItemIds */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "MonitoredItemIds", "UInt32", hf_opcua_MonitoredItemIds, parseUInt32, ett_opcua_array_UInt32); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteMonitoredItemsResponse, &ti, "DeleteMonitoredItemsResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSubscriptionRequest, &ti, "CreateSubscriptionRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedPublishingInterval); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedLifetimeCount); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedMaxKeepAliveCount); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxNotificationsPerPublish); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingEnabled); + parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Priority); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSubscriptionResponse, &ti, "CreateSubscriptionResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedPublishingInterval); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedLifetimeCount); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedMaxKeepAliveCount); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifySubscriptionRequest, &ti, "ModifySubscriptionRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedPublishingInterval); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedLifetimeCount); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedMaxKeepAliveCount); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxNotificationsPerPublish); + parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Priority); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifySubscriptionResponse, &ti, "ModifySubscriptionResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedPublishingInterval); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedLifetimeCount); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedMaxKeepAliveCount); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetPublishingModeRequest, &ti, "SetPublishingModeRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_PublishingEnabled); + /* Array length field ignored: NoOfSubscriptionIds */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "SubscriptionIds", "UInt32", hf_opcua_SubscriptionIds, parseUInt32, ett_opcua_array_UInt32); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetPublishingModeResponse, &ti, "SetPublishingModeResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_PublishRequest, &ti, "PublishRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfSubscriptionAcknowledgements */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "SubscriptionAcknowledgements", "SubscriptionAcknowledgement", parseSubscriptionAcknowledgement, ett_opcua_array_SubscriptionAcknowledgement); + proto_item_set_end(ti, tvb, *pOffset); +} +void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_PublishResponse, &ti, "PublishResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + /* Array length field ignored: NoOfAvailableSequenceNumbers */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "AvailableSequenceNumbers", "UInt32", hf_opcua_AvailableSequenceNumbers, parseUInt32, ett_opcua_array_UInt32); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_MoreNotifications); + parseNotificationMessage(subtree, tvb, pinfo, pOffset, "NotificationMessage"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RepublishRequest, &ti, "RepublishRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SubscriptionId); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RetransmitSequenceNumber); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RepublishResponse, &ti, "RepublishResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseNotificationMessage(subtree, tvb, pinfo, pOffset, "NotificationMessage"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TransferSubscriptionsRequest, &ti, "TransferSubscriptionsRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfSubscriptionIds */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "SubscriptionIds", "UInt32", hf_opcua_SubscriptionIds, parseUInt32, ett_opcua_array_UInt32); + parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_SendInitialValues); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TransferSubscriptionsResponse, &ti, "TransferSubscriptionsResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArrayComplex(subtree, tvb, pinfo, pOffset, "Results", "TransferResult", parseTransferResult, ett_opcua_array_TransferResult); + /* 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 parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteSubscriptionsRequest, &ti, "DeleteSubscriptionsRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + /* Array length field ignored: NoOfSubscriptionIds */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "SubscriptionIds", "UInt32", hf_opcua_SubscriptionIds, parseUInt32, ett_opcua_array_UInt32); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteSubscriptionsResponse, &ti, "DeleteSubscriptionsResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + /* Array length field ignored: NoOfResults */ + parseArraySimple(subtree, tvb, pinfo, pOffset, "Results", "StatusCode", hf_opcua_Results, 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 parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackRequest, &ti, "TestStackRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TestId); + parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_Iteration); + parseVariant(subtree, tvb, pinfo, pOffset, "Input"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackResponse, &ti, "TestStackResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseVariant(subtree, tvb, pinfo, pOffset, "Output"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackExRequest, &ti, "TestStackExRequest"); + + parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader"); + parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_TestId); + parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_Iteration); + parseCompositeTestType(subtree, tvb, pinfo, pOffset, "Input"); + proto_item_set_end(ti, tvb, *pOffset); +} +void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset) +{ + proto_item *ti; + proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackExResponse, &ti, "TestStackExResponse"); + + parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader"); + parseCompositeTestType(subtree, tvb, pinfo, pOffset, "Output"); + proto_item_set_end(ti, tvb, *pOffset); +} + +/** Setup protocol subtree array */ +static gint *ett[] = +{ + &ett_opcua_ServiceFault, + &ett_opcua_array_ServiceFault, + &ett_opcua_FindServersRequest, + &ett_opcua_array_FindServersRequest, + &ett_opcua_FindServersResponse, + &ett_opcua_array_FindServersResponse, + &ett_opcua_FindServersOnNetworkRequest, + &ett_opcua_array_FindServersOnNetworkRequest, + &ett_opcua_FindServersOnNetworkResponse, + &ett_opcua_array_FindServersOnNetworkResponse, + &ett_opcua_GetEndpointsRequest, + &ett_opcua_array_GetEndpointsRequest, + &ett_opcua_GetEndpointsResponse, + &ett_opcua_array_GetEndpointsResponse, + &ett_opcua_RegisterServerRequest, + &ett_opcua_array_RegisterServerRequest, + &ett_opcua_RegisterServerResponse, + &ett_opcua_array_RegisterServerResponse, + &ett_opcua_RegisterServer2Request, + &ett_opcua_array_RegisterServer2Request, + &ett_opcua_RegisterServer2Response, + &ett_opcua_array_RegisterServer2Response, + &ett_opcua_OpenSecureChannelRequest, + &ett_opcua_array_OpenSecureChannelRequest, + &ett_opcua_OpenSecureChannelResponse, + &ett_opcua_array_OpenSecureChannelResponse, + &ett_opcua_CloseSecureChannelRequest, + &ett_opcua_array_CloseSecureChannelRequest, + &ett_opcua_CloseSecureChannelResponse, + &ett_opcua_array_CloseSecureChannelResponse, + &ett_opcua_CreateSessionRequest, + &ett_opcua_array_CreateSessionRequest, + &ett_opcua_CreateSessionResponse, + &ett_opcua_array_CreateSessionResponse, + &ett_opcua_ActivateSessionRequest, + &ett_opcua_array_ActivateSessionRequest, + &ett_opcua_ActivateSessionResponse, + &ett_opcua_array_ActivateSessionResponse, + &ett_opcua_CloseSessionRequest, + &ett_opcua_array_CloseSessionRequest, + &ett_opcua_CloseSessionResponse, + &ett_opcua_array_CloseSessionResponse, + &ett_opcua_CancelRequest, + &ett_opcua_array_CancelRequest, + &ett_opcua_CancelResponse, + &ett_opcua_array_CancelResponse, + &ett_opcua_AddNodesRequest, + &ett_opcua_array_AddNodesRequest, + &ett_opcua_AddNodesResponse, + &ett_opcua_array_AddNodesResponse, + &ett_opcua_AddReferencesRequest, + &ett_opcua_array_AddReferencesRequest, + &ett_opcua_AddReferencesResponse, + &ett_opcua_array_AddReferencesResponse, + &ett_opcua_DeleteNodesRequest, + &ett_opcua_array_DeleteNodesRequest, + &ett_opcua_DeleteNodesResponse, + &ett_opcua_array_DeleteNodesResponse, + &ett_opcua_DeleteReferencesRequest, + &ett_opcua_array_DeleteReferencesRequest, + &ett_opcua_DeleteReferencesResponse, + &ett_opcua_array_DeleteReferencesResponse, + &ett_opcua_BrowseRequest, + &ett_opcua_array_BrowseRequest, + &ett_opcua_BrowseResponse, + &ett_opcua_array_BrowseResponse, + &ett_opcua_BrowseNextRequest, + &ett_opcua_array_BrowseNextRequest, + &ett_opcua_BrowseNextResponse, + &ett_opcua_array_BrowseNextResponse, + &ett_opcua_TranslateBrowsePathsToNodeIdsRequest, + &ett_opcua_array_TranslateBrowsePathsToNodeIdsRequest, + &ett_opcua_TranslateBrowsePathsToNodeIdsResponse, + &ett_opcua_array_TranslateBrowsePathsToNodeIdsResponse, + &ett_opcua_RegisterNodesRequest, + &ett_opcua_array_RegisterNodesRequest, + &ett_opcua_RegisterNodesResponse, + &ett_opcua_array_RegisterNodesResponse, + &ett_opcua_UnregisterNodesRequest, + &ett_opcua_array_UnregisterNodesRequest, + &ett_opcua_UnregisterNodesResponse, + &ett_opcua_array_UnregisterNodesResponse, + &ett_opcua_QueryFirstRequest, + &ett_opcua_array_QueryFirstRequest, + &ett_opcua_QueryFirstResponse, + &ett_opcua_array_QueryFirstResponse, + &ett_opcua_QueryNextRequest, + &ett_opcua_array_QueryNextRequest, + &ett_opcua_QueryNextResponse, + &ett_opcua_array_QueryNextResponse, + &ett_opcua_ReadRequest, + &ett_opcua_array_ReadRequest, + &ett_opcua_ReadResponse, + &ett_opcua_array_ReadResponse, + &ett_opcua_HistoryReadRequest, + &ett_opcua_array_HistoryReadRequest, + &ett_opcua_HistoryReadResponse, + &ett_opcua_array_HistoryReadResponse, + &ett_opcua_WriteRequest, + &ett_opcua_array_WriteRequest, + &ett_opcua_WriteResponse, + &ett_opcua_array_WriteResponse, + &ett_opcua_HistoryUpdateRequest, + &ett_opcua_array_HistoryUpdateRequest, + &ett_opcua_HistoryUpdateResponse, + &ett_opcua_array_HistoryUpdateResponse, + &ett_opcua_CallRequest, + &ett_opcua_array_CallRequest, + &ett_opcua_CallResponse, + &ett_opcua_array_CallResponse, + &ett_opcua_CreateMonitoredItemsRequest, + &ett_opcua_array_CreateMonitoredItemsRequest, + &ett_opcua_CreateMonitoredItemsResponse, + &ett_opcua_array_CreateMonitoredItemsResponse, + &ett_opcua_ModifyMonitoredItemsRequest, + &ett_opcua_array_ModifyMonitoredItemsRequest, + &ett_opcua_ModifyMonitoredItemsResponse, + &ett_opcua_array_ModifyMonitoredItemsResponse, + &ett_opcua_SetMonitoringModeRequest, + &ett_opcua_array_SetMonitoringModeRequest, + &ett_opcua_SetMonitoringModeResponse, + &ett_opcua_array_SetMonitoringModeResponse, + &ett_opcua_SetTriggeringRequest, + &ett_opcua_array_SetTriggeringRequest, + &ett_opcua_SetTriggeringResponse, + &ett_opcua_array_SetTriggeringResponse, + &ett_opcua_DeleteMonitoredItemsRequest, + &ett_opcua_array_DeleteMonitoredItemsRequest, + &ett_opcua_DeleteMonitoredItemsResponse, + &ett_opcua_array_DeleteMonitoredItemsResponse, + &ett_opcua_CreateSubscriptionRequest, + &ett_opcua_array_CreateSubscriptionRequest, + &ett_opcua_CreateSubscriptionResponse, + &ett_opcua_array_CreateSubscriptionResponse, + &ett_opcua_ModifySubscriptionRequest, + &ett_opcua_array_ModifySubscriptionRequest, + &ett_opcua_ModifySubscriptionResponse, + &ett_opcua_array_ModifySubscriptionResponse, + &ett_opcua_SetPublishingModeRequest, + &ett_opcua_array_SetPublishingModeRequest, + &ett_opcua_SetPublishingModeResponse, + &ett_opcua_array_SetPublishingModeResponse, + &ett_opcua_PublishRequest, + &ett_opcua_array_PublishRequest, + &ett_opcua_PublishResponse, + &ett_opcua_array_PublishResponse, + &ett_opcua_RepublishRequest, + &ett_opcua_array_RepublishRequest, + &ett_opcua_RepublishResponse, + &ett_opcua_array_RepublishResponse, + &ett_opcua_TransferSubscriptionsRequest, + &ett_opcua_array_TransferSubscriptionsRequest, + &ett_opcua_TransferSubscriptionsResponse, + &ett_opcua_array_TransferSubscriptionsResponse, + &ett_opcua_DeleteSubscriptionsRequest, + &ett_opcua_array_DeleteSubscriptionsRequest, + &ett_opcua_DeleteSubscriptionsResponse, + &ett_opcua_array_DeleteSubscriptionsResponse, + &ett_opcua_TestStackRequest, + &ett_opcua_array_TestStackRequest, + &ett_opcua_TestStackResponse, + &ett_opcua_array_TestStackResponse, + &ett_opcua_TestStackExRequest, + &ett_opcua_array_TestStackExRequest, + &ett_opcua_TestStackExResponse, + &ett_opcua_array_TestStackExResponse, +}; + +void registerServiceTypes(void) +{ + proto_register_subtree_array(ett, array_length(ett)); +} + |