/******************************************************************************
** Copyright (C) 2006-2014 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 17.06.2014.
** DON'T MODIFY THIS FILE!
**
******************************************************************************/

#include "config.h"

#include <glib.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_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_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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ServiceFault");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ServiceFault);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "FindServersRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FindServersRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseString(subtree, tvb, pOffset, hf_opcua_EndpointUrl);
  /* Array length field ignored: NoOfLocaleIds */
  parseArraySimple(subtree, tvb, pOffset, "LocaleIds", "String", hf_opcua_LocaleIds, parseString, ett_opcua_array_String);
  /* Array length field ignored: NoOfServerUris */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "FindServersResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FindServersResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfServers */
  parseArrayComplex(subtree, tvb, pOffset, "Servers", "ApplicationDescription", parseApplicationDescription, ett_opcua_array_ApplicationDescription);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "GetEndpointsRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_GetEndpointsRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseString(subtree, tvb, pOffset, hf_opcua_EndpointUrl);
  /* Array length field ignored: NoOfLocaleIds */
  parseArraySimple(subtree, tvb, pOffset, "LocaleIds", "String", hf_opcua_LocaleIds, parseString, ett_opcua_array_String);
  /* Array length field ignored: NoOfProfileUris */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "GetEndpointsResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_GetEndpointsResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfEndpoints */
  parseArrayComplex(subtree, tvb, pOffset, "Endpoints", "EndpointDescription", parseEndpointDescription, ett_opcua_array_EndpointDescription);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "RegisterServerRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterServerRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseRegisteredServer(subtree, tvb, pOffset, "Server");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "RegisterServerResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterServerResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "OpenSecureChannelRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_OpenSecureChannelRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_ClientProtocolVersion);
  parseSecurityTokenRequestType(subtree, tvb, pOffset);
  parseMessageSecurityMode(subtree, tvb, pOffset);
  parseByteString(subtree, tvb, pOffset, hf_opcua_ClientNonce);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedLifetime);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "OpenSecureChannelResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_OpenSecureChannelResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_ServerProtocolVersion);
  parseChannelSecurityToken(subtree, tvb, pOffset, "SecurityToken");
  parseByteString(subtree, tvb, pOffset, hf_opcua_ServerNonce);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CloseSecureChannelRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSecureChannelRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CloseSecureChannelResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSecureChannelResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CreateSessionRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSessionRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseApplicationDescription(subtree, tvb, pOffset, "ClientDescription");
  parseString(subtree, tvb, pOffset, hf_opcua_ServerUri);
  parseString(subtree, tvb, pOffset, hf_opcua_EndpointUrl);
  parseString(subtree, tvb, pOffset, hf_opcua_SessionName);
  parseByteString(subtree, tvb, pOffset, hf_opcua_ClientNonce);
  parseByteString(subtree, tvb, pOffset, hf_opcua_ClientCertificate);
  parseDouble(subtree, tvb, pOffset, hf_opcua_RequestedSessionTimeout);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxResponseMessageSize);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CreateSessionResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSessionResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseNodeId(subtree, tvb, pOffset, "SessionId");
  parseNodeId(subtree, tvb, pOffset, "AuthenticationToken");
  parseDouble(subtree, tvb, pOffset, hf_opcua_RevisedSessionTimeout);
  parseByteString(subtree, tvb, pOffset, hf_opcua_ServerNonce);
  parseByteString(subtree, tvb, pOffset, hf_opcua_ServerCertificate);
  /* Array length field ignored: NoOfServerEndpoints */
  parseArrayComplex(subtree, tvb, pOffset, "ServerEndpoints", "EndpointDescription", parseEndpointDescription, ett_opcua_array_EndpointDescription);
  /* Array length field ignored: NoOfServerSoftwareCertificates */
  parseArrayComplex(subtree, tvb, pOffset, "ServerSoftwareCertificates", "SignedSoftwareCertificate", parseSignedSoftwareCertificate, ett_opcua_array_SignedSoftwareCertificate);
  parseSignatureData(subtree, tvb, pOffset, "ServerSignature");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxRequestMessageSize);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ActivateSessionRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ActivateSessionRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseSignatureData(subtree, tvb, pOffset, "ClientSignature");
  /* Array length field ignored: NoOfClientSoftwareCertificates */
  parseArrayComplex(subtree, tvb, pOffset, "ClientSoftwareCertificates", "SignedSoftwareCertificate", parseSignedSoftwareCertificate, ett_opcua_array_SignedSoftwareCertificate);
  /* Array length field ignored: NoOfLocaleIds */
  parseArraySimple(subtree, tvb, pOffset, "LocaleIds", "String", hf_opcua_LocaleIds, parseString, ett_opcua_array_String);
  parseExtensionObject(subtree, tvb, pOffset, "UserIdentityToken");
  parseSignatureData(subtree, tvb, pOffset, "UserTokenSignature");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ActivateSessionResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ActivateSessionResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseByteString(subtree, tvb, pOffset, hf_opcua_ServerNonce);
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CloseSessionRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSessionRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseBoolean(subtree, tvb, pOffset, hf_opcua_DeleteSubscriptions);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CloseSessionResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSessionResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CancelRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CancelRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestHandle);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CancelResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CancelResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_CancelCount);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "AddNodesRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfNodesToAdd */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToAdd", "AddNodesItem", parseAddNodesItem, ett_opcua_array_AddNodesItem);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "AddNodesResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "AddNodesResult", parseAddNodesResult, ett_opcua_array_AddNodesResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "AddReferencesRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfReferencesToAdd */
  parseArrayComplex(subtree, tvb, pOffset, "ReferencesToAdd", "AddReferencesItem", parseAddReferencesItem, ett_opcua_array_AddReferencesItem);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "AddReferencesResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteNodesRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfNodesToDelete */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToDelete", "DeleteNodesItem", parseDeleteNodesItem, ett_opcua_array_DeleteNodesItem);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteNodesResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteReferencesRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfReferencesToDelete */
  parseArrayComplex(subtree, tvb, pOffset, "ReferencesToDelete", "DeleteReferencesItem", parseDeleteReferencesItem, ett_opcua_array_DeleteReferencesItem);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteReferencesResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "BrowseRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseViewDescription(subtree, tvb, pOffset, "View");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedMaxReferencesPerNode);
  /* Array length field ignored: NoOfNodesToBrowse */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToBrowse", "BrowseDescription", parseBrowseDescription, ett_opcua_array_BrowseDescription);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "BrowseResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "BrowseResult", parseBrowseResult, ett_opcua_array_BrowseResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "BrowseNextRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseNextRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoints);
  /* Array length field ignored: NoOfContinuationPoints */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "BrowseNextResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseNextResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "BrowseResult", parseBrowseResult, ett_opcua_array_BrowseResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TranslateBrowsePathsToNodeIdsRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathsToNodeIdsRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfBrowsePaths */
  parseArrayComplex(subtree, tvb, pOffset, "BrowsePaths", "BrowsePath", parseBrowsePath, ett_opcua_array_BrowsePath);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TranslateBrowsePathsToNodeIdsResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathsToNodeIdsResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "BrowsePathResult", parseBrowsePathResult, ett_opcua_array_BrowsePathResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "RegisterNodesRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterNodesRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfNodesToRegister */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToRegister", "NodeId", parseNodeId, ett_opcua_array_NodeId);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "RegisterNodesResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterNodesResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfRegisteredNodeIds */
  parseArrayComplex(subtree, tvb, pOffset, "RegisteredNodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "UnregisterNodesRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UnregisterNodesRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfNodesToUnregister */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToUnregister", "NodeId", parseNodeId, ett_opcua_array_NodeId);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "UnregisterNodesResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UnregisterNodesResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "QueryFirstRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryFirstRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseViewDescription(subtree, tvb, pOffset, "View");
  /* Array length field ignored: NoOfNodeTypes */
  parseArrayComplex(subtree, tvb, pOffset, "NodeTypes", "NodeTypeDescription", parseNodeTypeDescription, ett_opcua_array_NodeTypeDescription);
  parseContentFilter(subtree, tvb, pOffset, "Filter");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxDataSetsToReturn);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxReferencesToReturn);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "QueryFirstResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryFirstResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfQueryDataSets */
  parseArrayComplex(subtree, tvb, pOffset, "QueryDataSets", "QueryDataSet", parseQueryDataSet, ett_opcua_array_QueryDataSet);
  parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
  /* Array length field ignored: NoOfParsingResults */
  parseArrayComplex(subtree, tvb, pOffset, "ParsingResults", "ParsingResult", parseParsingResult, ett_opcua_array_ParsingResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  parseContentFilterResult(subtree, tvb, pOffset, "FilterResult");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "QueryNextRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryNextRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoint);
  parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "QueryNextResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryNextResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfQueryDataSets */
  parseArrayComplex(subtree, tvb, pOffset, "QueryDataSets", "QueryDataSet", parseQueryDataSet, ett_opcua_array_QueryDataSet);
  parseByteString(subtree, tvb, pOffset, hf_opcua_RevisedContinuationPoint);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ReadRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseDouble(subtree, tvb, pOffset, hf_opcua_MaxAge);
  parseTimestampsToReturn(subtree, tvb, pOffset);
  /* Array length field ignored: NoOfNodesToRead */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToRead", "ReadValueId", parseReadValueId, ett_opcua_array_ReadValueId);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ReadResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "DataValue", parseDataValue, ett_opcua_array_DataValue);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "HistoryReadRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseExtensionObject(subtree, tvb, pOffset, "HistoryReadDetails");
  parseTimestampsToReturn(subtree, tvb, pOffset);
  parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoints);
  /* Array length field ignored: NoOfNodesToRead */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToRead", "HistoryReadValueId", parseHistoryReadValueId, ett_opcua_array_HistoryReadValueId);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "HistoryReadResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "HistoryReadResult", parseHistoryReadResult, ett_opcua_array_HistoryReadResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "WriteRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfNodesToWrite */
  parseArrayComplex(subtree, tvb, pOffset, "NodesToWrite", "WriteValue", parseWriteValue, ett_opcua_array_WriteValue);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "WriteResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "HistoryUpdateRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfHistoryUpdateDetails */
  parseArrayComplex(subtree, tvb, pOffset, "HistoryUpdateDetails", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "HistoryUpdateResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "HistoryUpdateResult", parseHistoryUpdateResult, ett_opcua_array_HistoryUpdateResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CallRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfMethodsToCall */
  parseArrayComplex(subtree, tvb, pOffset, "MethodsToCall", "CallMethodRequest", parseCallMethodRequest, ett_opcua_array_CallMethodRequest);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CallResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "CallMethodResult", parseCallMethodResult, ett_opcua_array_CallMethodResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CreateMonitoredItemsRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateMonitoredItemsRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  parseTimestampsToReturn(subtree, tvb, pOffset);
  /* Array length field ignored: NoOfItemsToCreate */
  parseArrayComplex(subtree, tvb, pOffset, "ItemsToCreate", "MonitoredItemCreateRequest", parseMonitoredItemCreateRequest, ett_opcua_array_MonitoredItemCreateRequest);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CreateMonitoredItemsResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateMonitoredItemsResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "MonitoredItemCreateResult", parseMonitoredItemCreateResult, ett_opcua_array_MonitoredItemCreateResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ModifyMonitoredItemsRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifyMonitoredItemsRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  parseTimestampsToReturn(subtree, tvb, pOffset);
  /* Array length field ignored: NoOfItemsToModify */
  parseArrayComplex(subtree, tvb, pOffset, "ItemsToModify", "MonitoredItemModifyRequest", parseMonitoredItemModifyRequest, ett_opcua_array_MonitoredItemModifyRequest);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ModifyMonitoredItemsResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifyMonitoredItemsResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "MonitoredItemModifyResult", parseMonitoredItemModifyResult, ett_opcua_array_MonitoredItemModifyResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "SetMonitoringModeRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetMonitoringModeRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  parseMonitoringMode(subtree, tvb, pOffset);
  /* Array length field ignored: NoOfMonitoredItemIds */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "SetMonitoringModeResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetMonitoringModeResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "SetTriggeringRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetTriggeringRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_TriggeringItemId);
  /* Array length field ignored: NoOfLinksToAdd */
  parseArraySimple(subtree, tvb, pOffset, "LinksToAdd", "UInt32", hf_opcua_LinksToAdd, parseUInt32, ett_opcua_array_UInt32);
  /* Array length field ignored: NoOfLinksToRemove */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "SetTriggeringResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetTriggeringResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfAddResults */
  parseArraySimple(subtree, tvb, pOffset, "AddResults", "StatusCode", hf_opcua_AddResults, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfAddDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "AddDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  /* Array length field ignored: NoOfRemoveResults */
  parseArraySimple(subtree, tvb, pOffset, "RemoveResults", "StatusCode", hf_opcua_RemoveResults, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfRemoveDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "RemoveDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteMonitoredItemsRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteMonitoredItemsRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  /* Array length field ignored: NoOfMonitoredItemIds */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteMonitoredItemsResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteMonitoredItemsResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CreateSubscriptionRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSubscriptionRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseDouble(subtree, tvb, pOffset, hf_opcua_RequestedPublishingInterval);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedLifetimeCount);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedMaxKeepAliveCount);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxNotificationsPerPublish);
  parseBoolean(subtree, tvb, pOffset, hf_opcua_PublishingEnabled);
  parseByte(subtree, tvb, pOffset, hf_opcua_Priority);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "CreateSubscriptionResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSubscriptionResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  parseDouble(subtree, tvb, pOffset, hf_opcua_RevisedPublishingInterval);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedLifetimeCount);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedMaxKeepAliveCount);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ModifySubscriptionRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifySubscriptionRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  parseDouble(subtree, tvb, pOffset, hf_opcua_RequestedPublishingInterval);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedLifetimeCount);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedMaxKeepAliveCount);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxNotificationsPerPublish);
  parseByte(subtree, tvb, pOffset, hf_opcua_Priority);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "ModifySubscriptionResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifySubscriptionResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseDouble(subtree, tvb, pOffset, hf_opcua_RevisedPublishingInterval);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedLifetimeCount);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedMaxKeepAliveCount);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "SetPublishingModeRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetPublishingModeRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseBoolean(subtree, tvb, pOffset, hf_opcua_PublishingEnabled);
  /* Array length field ignored: NoOfSubscriptionIds */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "SetPublishingModeResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetPublishingModeResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "PublishRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PublishRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfSubscriptionAcknowledgements */
  parseArrayComplex(subtree, tvb, pOffset, "SubscriptionAcknowledgements", "SubscriptionAcknowledgement", parseSubscriptionAcknowledgement, ett_opcua_array_SubscriptionAcknowledgement);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "PublishResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PublishResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  /* Array length field ignored: NoOfAvailableSequenceNumbers */
  parseArraySimple(subtree, tvb, pOffset, "AvailableSequenceNumbers", "UInt32", hf_opcua_AvailableSequenceNumbers, parseUInt32, ett_opcua_array_UInt32);
  parseBoolean(subtree, tvb, pOffset, hf_opcua_MoreNotifications);
  parseNotificationMessage(subtree, tvb, pOffset, "NotificationMessage");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "RepublishRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RepublishRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
  parseUInt32(subtree, tvb, pOffset, hf_opcua_RetransmitSequenceNumber);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "RepublishResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RepublishResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseNotificationMessage(subtree, tvb, pOffset, "NotificationMessage");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TransferSubscriptionsRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferSubscriptionsRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfSubscriptionIds */
  parseArraySimple(subtree, tvb, pOffset, "SubscriptionIds", "UInt32", hf_opcua_SubscriptionIds, parseUInt32, ett_opcua_array_UInt32);
  parseBoolean(subtree, tvb, pOffset, hf_opcua_SendInitialValues);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TransferSubscriptionsResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferSubscriptionsResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArrayComplex(subtree, tvb, pOffset, "Results", "TransferResult", parseTransferResult, ett_opcua_array_TransferResult);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteSubscriptionsRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteSubscriptionsRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  /* Array length field ignored: NoOfSubscriptionIds */
  parseArraySimple(subtree, tvb, 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, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "DeleteSubscriptionsResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteSubscriptionsResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  /* Array length field ignored: NoOfResults */
  parseArraySimple(subtree, tvb, pOffset, "Results", "StatusCode", hf_opcua_Results, parseStatusCode, ett_opcua_array_StatusCode);
  /* Array length field ignored: NoOfDiagnosticInfos */
  parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TestStackRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_TestId);
  parseInt32(subtree, tvb, pOffset, hf_opcua_Iteration);
  parseVariant(subtree, tvb, pOffset, "Input");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TestStackResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseVariant(subtree, tvb, pOffset, "Output");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TestStackExRequest");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackExRequest);

  parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
  parseUInt32(subtree, tvb, pOffset, hf_opcua_TestId);
  parseInt32(subtree, tvb, pOffset, hf_opcua_Iteration);
  parseCompositeTestType(subtree, tvb, pOffset, "Input");
  proto_item_set_end(ti, tvb, *pOffset);
}
void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, *pOffset, -1, "TestStackExResponse");
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackExResponse);

  parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
  parseCompositeTestType(subtree, tvb, 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_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_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));
}

