/////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000-2019 Ericsson Telecom AB
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
/////////////////////////////////////////////////////////////////////////////////////
// Contributors:
// Akos Makovics
//
//  File:         UpcUa_Common.ttcn
//  Rev:          <RnXnn>
//  Prodnr:       CNL113861
/////////////////////////////////////////////////////////////////////////////////////

module OpcUa_Common {

  const integer Bad_TcpServerTooBusy := 2155675648;                     //0x807D0000, The server cannot process the request because it is too busy.
  const integer Bad_TcpMessageTypeInvalid := 2155741184;                //0x807E0000, The type of the message specified in the header invalid.
  const integer Bad_TcpSecureChannelUnknown := 2155806720;              //0x807F0000, The SecureChannelId and/or TokenId are not currently in use.
  const integer Bad_TcpMessageTooLarge := 2155872256;                   //0x80800000, The size of the message specified in the header is too large.
  const integer Bad_Timeout := 2148139008;                              //0x800A0000, The operation timed out.
  const integer Bad_TcpNotEnoughResources := 2155937792;                //0x80810000, There are not enough resources to process the request.
  const integer Bad_TcpInternalError := 2156003328;                     //0x80820000, An internal error occurred.
  const integer Bad_TcpEndpointUrlInvalid := 2156068864;                //0x80830000, The Server does not recognize the QueryString specified.
  const integer Bad_SecurityChecksFailed := 2148728832;                 //0x80130000, An error occurred verifying security.
  const integer Bad_RequestInterrupted := 2156134400;                   //0x80840000, The request could not be sent because of a network interruption.
  const integer Bad_RequestTimeout := 2156199936;                       //0x80850000, Timeout occurred while processing the request.
  const integer Bad_SecureChannelClosed := 2156265472;                  //0x80860000, The secure channel has been closed.
  const integer Bad_SecureChannelTokenUnknown := 2156331008;            //0x80870000, The token has expired or is not recognized.
  const integer Bad_CertificateUntrusted := 2156396544;                 //0x80880000, The sequence number is not valid.
  const integer Bad_CertificateTimeInvalid := 2148794368;               //0x80140000, The Certificate has expired or is not yet valid.
  const integer Bad_CertificateIssuerTimeInvalid := 2148859904;         //0x80150000, An Issuer Certificate has expired or is not yet valid.
  const integer Bad_CertificateUseNotAllowed := 2149056512;             //0x80180000, The Certificate may not be used for the requested operation.
  const integer Bad_CertificateIssuerUseNotAllowed := 2149122048;       //0x80190000, The Issuer Certificate may not be used for the requested operation.
  const integer Bad_CertificateRevocationUnknown := 2149253120;         //0x801B0000, It was not possible to determine if the Certificate has been revoked.
  const integer Bad_CertificateIssuerRevocationUnknown := 2149318656;   //0x801C0000, It was not possible to determine if the Issuer Certificate has been revoked.
  const integer Bad_CertificateRevoked := 2149384192;                   //0x801D0000, The certificate has been revoked.

  type enumerated CommonServiceResultCodes {
    Good,
    Good_CompletesAsynchronously,
    Good_SubscriptionTransferred,
    Bad_CertificateHostNameInvalid,
    Bad_CertificateChainIncomplete,
    Bad_CertificateIssuerRevocationUnknown,
    Bad_CertificateIssuerUseNotAllowed,
    Bad_CertificateIssuerTimeInvalid,
    Bad_CertificateIssuerRevoked,
    Bad_CertificateInvalid,
    Bad_CertificateRevocationUnknown,
    Bad_CertificateRevoked,
    Bad_CertificateTimeInvalid,
    Bad_CertificateUriInvalid,
    Bad_CertificateUntrusted,
    Bad_CertificateUseNotAllowed,
    Bad_CommunicationError,
    Bad_DataTypeIdUnknown,
    Bad_DecodingError,
    Bad_EncodingError,
    Bad_EncodingLimitsExceeded,
    Bad_IdentityTokenInvalid,
    Bad_IdentityTokenRejected,
    Bad_InternalError,
    Bad_InvalidArgument,
    Bad_InvalidState,
    Bad_InvalidTimestamp,
    Bad_LicenseExpired,
    Bad_LicenseLimitsExceeded,
    Bad_LicenseNotAvailable,
    Bad_NothingToDo,
    Bad_OutOfMemory,
    Bad_RequestCancelledByClient,
    Bad_RequestTooLarge,
    Bad_ResponseTooLarge,
    Bad_RequestHeaderInvalid,
    Bad_ResourceUnavailable,
    Bad_SecureChannelIdInvalid,
    Bad_SecurityChecksFailed,
    Bad_ServerHalted,
    Bad_ServerNotConnected,
    Bad_ServerUriInvalid,
    Bad_ServiceUnsupported,
    Bad_SessionIdInvalid,
    Bad_SessionClosed,
    Bad_SessionNotActivated,
    Bad_Shutdown,
    Bad_SubscriptionIdInvalid,
    Bad_Timeout,
    Bad_TimestampsToReturnInvalid,
    Bad_TooManyOperations,
    Bad_UnexpectedError,
    Bad_UnknownResponse,
    Bad_UserAccessDenied,
    Bad_ViewIdUnknown,
    Bad_ViewTimestampInvalid,
    Bad_ViewParameterMismatchInvalid,
    Bad_ViewVersionInvalid
  }

  type enumerated CommonOperationLevelResultCodes {
    Good_Clamped,
    Good_Overload,
    Uncertain,
    Bad,
    Bad_AttributeIdInvalid,
    Bad_BrowseDirectionInvalid,
    Bad_BrowseNameInvalid,
    Bad_ContentFilterInvalid,
    Bad_ContinuationPointInvalid,
    Bad_DataEncodingInvalid,
    Bad_DataEncodingUnsupported,
    Bad_EventFilterInvalid,
    Bad_FilterNotAllowed,
    Bad_FilterOperandInvalid,
    Bad_HistoryOperationInvalid,
    Bad_HistoryOperationUnsupported,
    Bad_IndexRangeInvalid,
    Bad_IndexRangeNoData,
    Bad_MonitoredItemFilterInvalid,
    Bad_MonitoredItemFilterUnsupported,
    Bad_MonitoredItemIdInvalid,
    Bad_MonitoringModeInvalid,
    Bad_NoCommunication,
    Bad_NoContinuationPoints,
    Bad_NodeClassInvalid,
    Bad_NodeIdInvalid,
    Bad_NodeIdUnknown,
    Bad_NoDeleteRights,
    Bad_NodeNotInView,
    Bad_NotFound,
    Bad_NotImplemented,
    Bad_NotReadable,
    Bad_NotSupported,
    Bad_NotWritable,
    Bad_ObjectDeleted,
    Bad_OutOfRange,
    Bad_ReferenceTypeIdInvalid,
    Bad_SecurityModeInsufficient,
    Bad_SourceNodeIdInvalid,
    Bad_StructureMissing,
    Bad_TargetNodeIdInvalid,
    Bad_TypeDefinitionInvalid,
    Bad_TypeMismatch,
    Bad_WaitingForInitialData
  }
}
