--/////////////////////////////////////////////////////////////////////////////
-- 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:
--   Janos Zoltan Szabo - initial implementation
--
--/////////////////////////////////////////////////////////////////////////////

--
--  File:		GCP_PDU_Defs.asn
--  Rev:                <RnXnn>
--  Updated:            2012-11-12
--  Prodnr:             CNL 113 364
--  Contact:            http://ttcn.ericsson.se
--/////////////////////////////////////////////////////////////////////////////
GCP-PDU-Defs {itu-t(0) identified-organization (4) etsi(0) reserved(127) etsi-identified-organization(0) ericsson(5) testing (0) ip(7) gcp(0) version0600(1) pduDefinitions(1) patchNo(1) }

DEFINITIONS AUTOMATIC TAGS::=
BEGIN

IMPORTS ;
-- ethekr , copied ASN1 section from  GCP_ASN1_31r1 specification
-- ethekr , added error codes from previous ASN.1 file
-- ethekr, changed 32 bit integers to octetstring 
-- ethekr, "value" changed to "valueField" in EventParameter, PropertyParm,SigParameter
-- ethekr, "optional" cnanged to "optionalField" in CommandRequest
-- ethgasz added IMPORTS; and address changed to addressField

MegacoMessage ::= SEQUENCE
{
       authHeader         AuthenticationHeader OPTIONAL,
       mess               Message
}

AuthenticationHeader ::= SEQUENCE
{
       secParmIndex      SecurityParmIndex,
       seqNum            SequenceNum,
       ad                AuthData
}

SecurityParmIndex ::= OCTET STRING(SIZE(4))

SequenceNum       ::= OCTET STRING(SIZE(4))

AuthData          ::= OCTET STRING (SIZE (12..32))

Message ::= SEQUENCE
{
version               INTEGER(0..99),
-- The version of the protocol defined here is equal to 2.
       mId                 MId,       -- Name/address of message originator
       messageBody              CHOICE
       {
              messageError       ErrorDescriptor,
              transactions        SEQUENCE OF Transaction
       },
       ...
}

MId ::= CHOICE
{
       ip4Address                             IP4Address,
       ip6Address                            IP6Address,
       domainName                        DomainName,
       deviceName                        PathName,
mtpAddress                            OCTET STRING(SIZE(2..4)),
 -- Addressing structure of mtpAddress:
 --      25-15                0
 --        |  PC        | NI |
 --        24 - 14 bits    2 bits
 -- Note: 14 bits are defined for international use.
 -- Two national options exist where the point code is 16 or 24  
       -- bits.
 -- To octet align the mtpAddress the MSBs shall be encoded as 0s.
      ...
}

DomainName ::= SEQUENCE
{
name              IA5String,
-- The name starts with an alphanumeric digit followed by a
-- sequence of alphanumeric digits, hyphens and dots.  No two
-- dots shall occur consecutively.
portNumber       INTEGER(0..65535) OPTIONAL
}

IP4Address ::= SEQUENCE
{
       addressField       OCTET STRING (SIZE(4)),
       portNumber       INTEGER(0..65535) OPTIONAL
}

IP6Address ::= SEQUENCE
{
       addressField       OCTET STRING (SIZE(16)),
       portNumber       INTEGER(0..65535) OPTIONAL
}

PathName ::= IA5String(SIZE (1..64))
-- See section 

Transaction ::= CHOICE
{
       transactionRequest         TransactionRequest,
       transactionPending        TransactionPending,
       transactionReply          TransactionReply,
       transactionResponseAck       TransactionResponseAck,
          -- use of response acks is dependent on underlying transport
       ...
}

TransactionId ::= OCTET STRING (SIZE(1..5))


--  ethekr changed from INTEGER(0..4294967295)  
--  32 bit unsigned integer

TransactionRequest ::= SEQUENCE
{
       transactionId               TransactionId,
       actions                     SEQUENCE OF ActionRequest,
       ...
}

TransactionPending ::= SEQUENCE
{
       transactionId               TransactionId,
       ...
}

TransactionReply ::= SEQUENCE
{
       transactionId               TransactionId,
       immAckRequired              NULL OPTIONAL,
transactionResult        CHOICE
       {
            transactionError       ErrorDescriptor,
            actionReplies       SEQUENCE OF ActionReply
       },
       ...
}

TransactionResponseAck ::= SEQUENCE OF TransactionAck
TransactionAck ::= SEQUENCE
{
       firstAck       TransactionId,
       lastAck       TransactionId OPTIONAL
}

ErrorDescriptor ::= SEQUENCE
{
       errorCode        ErrorCode,
       errorText        ErrorText OPTIONAL
}

ErrorCode ::= INTEGER(0..65535)
-- See section 13 for IANA considerations with respect to error codes

ErrorText ::= IA5String

ContextID ::= OCTET STRING (SIZE(1..5))

-- ethekr changed from
-- INTEGER(0..4294967295)

-- Context NULL Value: 0
-- Context CHOOSE Value: 4294967294 (0xFFFFFFFE) 
-- Context ALL Value: 4294967295 (0xFFFFFFFF)


ActionRequest ::= SEQUENCE
{
       contextId                     ContextID,
       contextRequest              ContextRequest OPTIONAL,
       contextAttrAuditReq       ContextAttrAuditRequest OPTIONAL,
       commandRequests              SEQUENCE OF CommandRequest
}

ActionReply ::= SEQUENCE
{
       contextId               ContextID,
       errorDescriptor       ErrorDescriptor OPTIONAL,
       contextReply       ContextRequest OPTIONAL,
       commandReply        SEQUENCE OF CommandReply
}

ContextRequest ::= SEQUENCE
{
       priority              INTEGER(0..15) OPTIONAL,
       emergency              BOOLEAN OPTIONAL,
       topologyReq              SEQUENCE OF TopologyRequest OPTIONAL,
       ...
       
}

ContextAttrAuditRequest ::= SEQUENCE
{
topology       NULL OPTIONAL,
       emergency       NULL OPTIONAL,
       priority       NULL OPTIONAL,
       ...
}

CommandRequest ::= SEQUENCE
{
       command              Command,
       optionalField              NULL OPTIONAL,
       wildcardReturn       NULL OPTIONAL,
       ...
}

Command ::= CHOICE
{
       addReq                      AmmRequest,
       moveReq                  AmmRequest,
       modReq                   AmmRequest,
       -- Add, Move, Modify requests have the same parameters
       subtractReq              SubtractRequest,
       auditCapRequest          AuditRequest,
       auditValueRequest        AuditRequest,
       notifyReq                NotifyRequest,
       serviceChangeReq         ServiceChangeRequest,
       ...
}

CommandReply ::= CHOICE
{
       addReply                  AmmsReply,
       moveReply                 AmmsReply,
       modReply                  AmmsReply,
       subtractReply             AmmsReply,
       -- Add, Move, Modify, Subtract replies have the same parameters
       auditCapReply             AuditReply,
       auditValueReply           AuditReply,
       notifyReply               NotifyReply,
       serviceChangeReply        ServiceChangeReply,
       ...
}

TopologyRequest ::= SEQUENCE
{
       terminationFrom             TerminationID,
       terminationTo             TerminationID,
       topologyDirection        ENUMERATED
       {
              bothway(0),
              isolate(1),
              oneway(2)
       },
--...,
       streamID              StreamID OPTIONAL
}

AmmRequest ::= SEQUENCE
{
       terminationID              TerminationIDList,
       descriptors                     SEQUENCE OF       AmmDescriptor,
       -- At most one descriptor of each type (see AmmDescriptor)
       -- allowed in the sequence.
       ...
}

AmmDescriptor ::= CHOICE
{
       mediaDescriptor                     MediaDescriptor,
       modemDescriptor                     ModemDescriptor,
       muxDescriptor                     MuxDescriptor,
       eventsDescriptor                     EventsDescriptor,
       eventBufferDescriptor              EventBufferDescriptor,
       signalsDescriptor                     SignalsDescriptor,
       digitMapDescriptor              DigitMapDescriptor,
       auditDescriptor                     AuditDescriptor,
...
}


AmmsReply ::= SEQUENCE
{
       terminationID               TerminationIDList,
       terminationAudit               TerminationAudit OPTIONAL,
       ...
}

SubtractRequest ::= SEQUENCE
{
       terminationID                 TerminationIDList,
       auditDescriptor               AuditDescriptor OPTIONAL,
       ...
}

AuditRequest ::= SEQUENCE
{
       terminationID              TerminationID,
       auditDescriptor              AuditDescriptor,
       ...
}

AuditReply ::= CHOICE
{
contextAuditResult       TerminationIDList,
errorDescriptor                            ErrorDescriptor,
       
       auditResult                     AuditResult,
       ...
}

AuditResult ::= SEQUENCE
{
       
       terminationID              TerminationID,
       terminationAuditResult       TerminationAudit
}



TerminationAudit ::= SEQUENCE OF AuditReturnParameter

AuditReturnParameter ::= CHOICE
{
       errorDescriptor                     ErrorDescriptor,
mediaDescriptor                      MediaDescriptor,
       modemDescriptor                      ModemDescriptor,
       muxDescriptor                      MuxDescriptor,
       eventsDescriptor                    EventsDescriptor,
       eventBufferDescriptor              EventBufferDescriptor,
       signalsDescriptor                   SignalsDescriptor,
       digitMapDescriptor             DigitMapDescriptor,
       observedEventsDescriptor        ObservedEventsDescriptor,
       statisticsDescriptor            StatisticsDescriptor,
       packagesDescriptor              PackagesDescriptor,
       emptyDescriptors              AuditDescriptor,
...
}

AuditDescriptor ::= SEQUENCE
{
auditToken       BIT STRING
{
                            muxToken(0), modemToken(1), mediaToken(2),
eventsToken(3), signalsToken(4),
digitMapToken(5), statsToken(6),
observedEventsToken(7),
packagesToken(8), eventBufferToken(9)
} OPTIONAL,
       ...,
       auditPropertyToken SEQUENCE OF IndAuditParameter OPTIONAL
}

IndAuditParameter ::= CHOICE
{
indaudmediaDescriptor               IndAudMediaDescriptor,
       indaudeventsDescriptor             IndAudEventsDescriptor,
       indaudeventBufferDescriptor       IndAudEventBufferDescriptor,
       indaudsignalsDescriptor            IndAudSignalsDescriptor,
       indauddigitMapDescriptor      IndAudDigitMapDescriptor,
       indaudstatisticsDescriptor    IndAudStatisticsDescriptor,
       indaudpackagesDescriptor      IndAudPackagesDescriptor,
...
}

IndAudMediaDescriptor ::= SEQUENCE
{
       
       termStateDescr       IndAudTerminationStateDescriptor OPTIONAL,
       streams       CHOICE
                     {
                     oneStream       IndAudStreamParms,
                     multiStream       SEQUENCE OF IndAudStreamDescriptor
                     } OPTIONAL,
       ...
}

IndAudStreamDescriptor ::= SEQUENCE
{
       streamID                             StreamID,
       streamParms                            IndAudStreamParms
}

IndAudStreamParms ::= SEQUENCE
{
       localControlDescriptor        IndAudLocalControlDescriptor OPTIONAL,
       localDescriptor               IndAudLocalRemoteDescriptor OPTIONAL,
       remoteDescriptor              IndAudLocalRemoteDescriptor OPTIONAL,
       ...
}

IndAudLocalControlDescriptor ::= SEQUENCE
{
       streamMode           NULL OPTIONAL,
       reserveValue       NULL OPTIONAL,
       reserveGroup       NULL OPTIONAL,
       propertyParms        SEQUENCE OF IndAudPropertyParm OPTIONAL,
       ...
}

IndAudPropertyParm ::= SEQUENCE
{
       name               PkgdName,
       ...
}

IndAudLocalRemoteDescriptor ::= SEQUENCE
{
       propGroupID INTEGER(0..65535) OPTIONAL,
propGrps       IndAudPropertyGroup,
       ...
}

IndAudPropertyGroup ::= SEQUENCE OF IndAudPropertyParm

IndAudTerminationStateDescriptor ::= SEQUENCE 
{
       propertyParms              SEQUENCE OF IndAudPropertyParm,
       eventBufferControl       NULL OPTIONAL,
       serviceState               NULL OPTIONAL,
       ...
}

IndAudEventsDescriptor ::= SEQUENCE
{
       requestID                RequestID OPTIONAL,
       pkgdName           PkgdName,
       streamID              StreamID OPTIONAL,
       ...
}

IndAudEventBufferDescriptor ::= SEQUENCE
{
       eventName              PkgdName,
       streamID              StreamID OPTIONAL,
       ...
}

IndAudSignalsDescriptor ::=CHOICE
{
       signal              IndAudSignal,
       seqSigList              IndAudSeqSigList,
       ...
}

IndAudSeqSigList ::= SEQUENCE
{
       id              INTEGER(0..65535),
       signalList       IndAudSignal OPTIONAL
}

IndAudSignal ::= SEQUENCE
{
       signalName               PkgdName,
       streamID              StreamID OPTIONAL,
       ...
}



IndAudDigitMapDescriptor ::= SEQUENCE
{
       digitMapName         DigitMapName       OPTIONAL
}

IndAudStatisticsDescriptor ::= SEQUENCE 
{
       statName               PkgdName
}

IndAudPackagesDescriptor ::= SEQUENCE
{
packageName              Name,
packageVersion       INTEGER(0..99),
...
}

NotifyRequest ::= SEQUENCE
{
       terminationID                   TerminationIDList,
       observedEventsDescriptor        ObservedEventsDescriptor,
       errorDescriptor                     ErrorDescriptor OPTIONAL,
       ...
}

NotifyReply ::= SEQUENCE
{
       terminationID                        TerminationIDList,
       errorDescriptor                      ErrorDescriptor OPTIONAL,
       ...
}

ObservedEventsDescriptor ::= SEQUENCE
{
       requestId                             RequestID,
       observedEventLst                      SEQUENCE OF ObservedEvent
}

ObservedEvent ::= SEQUENCE
{
       eventName                            EventName,
       streamID                            StreamID OPTIONAL,
       eventParList                     SEQUENCE OF EventParameter,
       timeNotation                       TimeNotation OPTIONAL,
       ...
}

EventName ::= PkgdName

EventParameter ::= SEQUENCE
{
       eventParameterName       Name,
       valueField                          Value,
-- For use of extraInfo see the comment related to PropertyParm
       extraInfo CHOICE
       {
              relation       Relation,
              range              BOOLEAN,
              sublist       BOOLEAN
       } OPTIONAL,
       ...
}

ServiceChangeRequest ::= SEQUENCE
{
       terminationID                    TerminationIDList,
       serviceChangeParms               ServiceChangeParm,
       ...
}

ServiceChangeReply ::= SEQUENCE
{
       terminationID                     TerminationIDList,
       serviceChangeResult               ServiceChangeResult,
       ...
}

-- For ServiceChangeResult, no parameters are mandatory.  Hence the
-- distinction between ServiceChangeParm and ServiceChangeResParm.

ServiceChangeResult ::= CHOICE
{
       errorDescriptor                     ErrorDescriptor,
       serviceChangeResParms               ServiceChangeResParm
}

WildcardField ::= OCTET STRING(SIZE(1))

TerminationID ::= SEQUENCE
{
       wildcard       SEQUENCE OF WildcardField, 
       id              OCTET STRING (SIZE(1..8)),
       
       ...
}
-- See Section  for explanation of wildcarding mechanism.
-- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination.

TerminationIDList ::= SEQUENCE OF TerminationID

MediaDescriptor ::= SEQUENCE
{
       
       termStateDescr       TerminationStateDescriptor OPTIONAL,
       streams              MediaDescriptorStreams OPTIONAL,
       ...
}

-- added by ethcky beacuse of the tool
MediaDescriptorStreams ::= CHOICE
                            {
                                   oneStream       StreamParms,
                                   multiStream       SEQUENCE OF StreamDescriptor
                            }

StreamDescriptor ::= SEQUENCE
{
       streamID                             StreamID,
       streamParms                            StreamParms
}

StreamParms ::= SEQUENCE
{
       localControlDescriptor               LocalControlDescriptor OPTIONAL,
       localDescriptor                      LocalRemoteDescriptor OPTIONAL,
       remoteDescriptor                     LocalRemoteDescriptor OPTIONAL,
       ...
}

LocalControlDescriptor ::= SEQUENCE
{
       streamMode           StreamMode OPTIONAL,
       reserveValue       BOOLEAN OPTIONAL,
       reserveGroup       BOOLEAN OPTIONAL,
       propertyParms        SEQUENCE OF PropertyParm,
       ...
}

StreamMode ::= ENUMERATED 
{
       sendOnly(0),
       recvOnly(1),
       sendRecv(2),
       inactive(3),
       loopBack(4),
              ...
}

-- In PropertyParm, value is a SEQUENCE OF octet string.  When sent
-- by an MGC the interpretation is as follows:
-- empty sequence means CHOOSE
-- one element sequence specifies value
-- If the sublist field is not selected, a longer sequence means
-- "choose one of the values" (i.e. value1 OR value2 OR ...)
-- If the sublist field is selected,
-- a sequence with more than one element encodes the value of a
-- list-valued property (i.e. value1 AND value2 AND ...).
-- The relation field may only be selected if the value sequence
-- has length 1.  It indicates that the MG has to choose a value
-- for the property. E.g., x > 3 (using the greaterThan
-- value for relation) instructs the MG to choose any value larger
-- than 3 for property x.
-- The range field may only be selected if the value sequence
-- has length 2.  It indicates that the MG has to choose a value
-- in the range between the first octet in the value sequence and
-- the trailing octet in the value sequence, including the
-- boundary values.
-- When sent by the MG, only responses to an AuditCapability request
-- may contain multiple values, a range, or a relation field.

PropertyParm ::= SEQUENCE
{
       name               PkgdName,
       valueField        SEQUENCE OF OCTET STRING,
       extraInfo       CHOICE
       {
              relation       Relation,
              range              BOOLEAN,
              sublist       BOOLEAN
       } OPTIONAL,
       ...
}

Name ::= OCTET STRING(SIZE(2))

PkgdName ::= OCTET STRING(SIZE(4))
-- represents Package Name (2 octets) plus Property, Event,
-- Signal Names or Statistics ID. (2 octets)
-- To wildcard a package use 0xFFFF for first two octets, choose
-- is not allowed. To reference native property tag specified in
-- Annex C, use 0x0000 as first two octets.
-- To wildcard a Property, Event, Signal, or Statistics ID, use 
-- 0xFFFF for last two octets, choose is not allowed.
-- Wildcarding of Package Name is permitted only if Property,
--Event, Signal, or Statistics ID is
-- also wildcarded.

SDP-IA5String ::= IA5String

Relation ::= ENUMERATED
{
       greaterThan(0),
       smallerThan(1),
       unequalTo(2),
       ...
}

LocalRemoteDescriptor ::= SEQUENCE
{
       propGrps       SEQUENCE OF PropertyGroup,
       ...
}

PropertyGroup ::= SEQUENCE OF PropertyParm

TerminationStateDescriptor ::= SEQUENCE 
{
       propertyParms       SEQUENCE OF PropertyParm,
       eventBufferControl         EventBufferControl OPTIONAL,
       serviceState        ServiceState OPTIONAL,
       ...
}

EventBufferControl ::= ENUMERATED
{
       off(0),
       lockStep(1),
       ...
}

ServiceState ::= ENUMERATED
{
       test(0),
       outOfSvc(1),
       inSvc(2),
      ...
}

MuxDescriptor   ::= SEQUENCE
{
       muxType                MuxType,
       termList             SEQUENCE OF TerminationID,
       nonStandardData       NonStandardData OPTIONAL,
       ...
}

MuxType ::= ENUMERATED
{
       h221(0),
       h223(1),
       h226(2),
       v76(3),
       ...,
       nx64k(4)
}

StreamID ::= INTEGER(0..65535)  -- 16 bit unsigned integer

EventsDescriptor ::= SEQUENCE
{
       requestID                RequestID OPTIONAL,
                            -- RequestID must be present if eventList
-- is non empty,
       eventList                SEQUENCE OF RequestedEvent,
       ...
}

RequestedEvent ::= SEQUENCE
{
       pkgdName           PkgdName,
       streamID              StreamID OPTIONAL,
       eventAction        RequestedActions OPTIONAL,
       evParList          SEQUENCE OF EventParameter,
       ...
}

RequestedActions ::= SEQUENCE
{
       keepActive                     BOOLEAN OPTIONAL,
       eventDM                     EventDM OPTIONAL,
       secondEvent                SecondEventsDescriptor OPTIONAL,
       signalsDescriptor          SignalsDescriptor OPTIONAL,
       ...
}


EventDM ::= CHOICE
{       digitMapName       DigitMapName,
       digitMapValue       DigitMapValue
}

SecondEventsDescriptor ::= SEQUENCE
{
       requestID                      RequestID OPTIONAL,
       eventList                      SEQUENCE OF SecondRequestedEvent,
       ...
}

SecondRequestedEvent ::= SEQUENCE
{
       pkgdName                  PkgdName,
       streamID                     StreamID OPTIONAL,
       eventAction               SecondRequestedActions OPTIONAL,
       evParList                 SEQUENCE OF EventParameter,
       ...
}

SecondRequestedActions ::= SEQUENCE
{
       keepActive                     BOOLEAN OPTIONAL,
       eventDM                     EventDM OPTIONAL,
       signalsDescriptor        SignalsDescriptor OPTIONAL,
       ...
}

EventBufferDescriptor ::= SEQUENCE OF EventSpec

EventSpec ::= SEQUENCE
{
       eventName              EventName,
       streamID              StreamID OPTIONAL,
       eventParList       SEQUENCE OF EventParameter,
       ...
}


SignalsDescriptor ::= SEQUENCE OF SignalRequest

SignalRequest ::=CHOICE
{
       signal              Signal,
       seqSigList              SeqSigList,
       ...
}

SeqSigList ::= SEQUENCE
{
       id                     INTEGER(0..65535),
       signalList              SEQUENCE OF Signal
}

Signal ::= SEQUENCE
{
       signalName               SignalName,
       streamID              StreamID OPTIONAL,
       sigType              SignalType OPTIONAL,
       duration              INTEGER (0..65535) OPTIONAL,
       notifyCompletion       NotifyCompletion OPTIONAL,
       keepActive              BOOLEAN OPTIONAL,
       sigParList               SEQUENCE OF SigParameter,
       ...
}

SignalType ::= ENUMERATED
{
       brief(0),
       onOff(1),
       timeOut(2),
       ...
}

SignalName ::= PkgdName

NotifyCompletion ::= BIT STRING
{
       onTimeOut(0), onInterruptByEvent(1),
       onInterruptByNewSignalDescr(2), otherReason(3)
}

SigParameter ::= SEQUENCE
{
       sigParameterName               Name,
       valueField                          Value,
-- For use of extraInfo see the comment related to PropertyParm
       extraInfo CHOICE
       {
              relation       Relation,
              range              BOOLEAN,
              sublist       BOOLEAN
       } OPTIONAL,
       ...
}

-- For an AuditCapReply with all events, the RequestID SHALL be ALL.
-- ALL is represented by 0xffffffff.

RequestID ::=  OCTET STRING (SIZE(1..5))

-- ethekr changed from INTEGER(0..4294967295)  
-- 32 bit unsigned integer

ModemDescriptor ::= SEQUENCE
{
mtl        SEQUENCE OF ModemType, 
       mpl        SEQUENCE OF PropertyParm,
       nonStandardData       NonStandardData OPTIONAL
}

ModemType ::= ENUMERATED
{
       v18(0),
       v22(1),
       v22bis(2),
       v32(3),
       v32bis(4),
       v34(5),
       v90(6),
       v91(7),
       synchISDN(8),
       ...
}

DigitMapDescriptor ::= SEQUENCE
{
       digitMapName         DigitMapName       OPTIONAL,
       digitMapValue        DigitMapValue       OPTIONAL
}

DigitMapName ::= Name

DigitMapValue ::= SEQUENCE
{
       startTimer               INTEGER(0..99) OPTIONAL,
       shortTimer               INTEGER(0..99) OPTIONAL,
       longTimer                INTEGER(0..99) OPTIONAL,
       durationTimer     INTEGER(0..99) OPTIONAL,
       digitMapBody        IA5String,
-- Units are seconds for start, short and long timers, and
-- hundreds of milliseconds for duration timer. Thus start,
-- short, and long range from 1 to 99 seconds and duration
-- from 100 ms to 9.9 s
       -- See Section  for explanation of digit map syntax
       ...
}

ServiceChangeParm ::= SEQUENCE
{
       serviceChangeMethod         ServiceChangeMethod,
       serviceChangeAddress       ServiceChangeAddress OPTIONAL,
       serviceChangeVersion       INTEGER(0..99) OPTIONAL,
       serviceChangeProfile        ServiceChangeProfile OPTIONAL,
       serviceChangeReason         Value, 
-- A serviceChangeReason consists of a numeric reason code
-- and an optional text description.
-- The serviceChangeReason SHALL be a string consisting of 
-- a decimal reason code, optionally followed by a single 
-- space character and a textual description string.
-- This string is first BER-encoded as an IA5String.
-- The result of this BER-encoding is then encoded as
-- an ASN.1 OCTET STRING type, "double wrapping" the 
--value
-- as was done for package elements.
       serviceChangeDelay    OCTET STRING (SIZE(1..5))        OPTIONAL,
       -- ethekr changed from
        --  INTEGER(0..4294967295) OPTIONAL,
        -- 32 bit unsigned integer
       serviceChangeMgcId          MId OPTIONAL,
       timeStamp                     TimeNotation OPTIONAL,
       nonStandardData              NonStandardData OPTIONAL,
...,
serviceChangeInfo              AuditDescriptor OPTIONAL
}

ServiceChangeAddress ::= CHOICE
{
       portNumber                     INTEGER(0..65535), -- TCP/UDP port number
       ip4Address                      IP4Address,
       ip6Address                     IP6Address,
       domainName                 DomainName,
       deviceName                 PathName,
mtpAddress                     OCTET STRING(SIZE(2..4)),
       ...
}

ServiceChangeResParm ::= SEQUENCE
{
       serviceChangeMgcId        MId OPTIONAL,
       serviceChangeAddress       ServiceChangeAddress OPTIONAL,
       serviceChangeVersion       INTEGER(0..99) OPTIONAL,
serviceChangeProfile       ServiceChangeProfile OPTIONAL,
timestamp                     TimeNotation OPTIONAL,
...
}

ServiceChangeMethod ::= ENUMERATED
{
       failover(0),
       forced(1),
       graceful(2),
       restart(3),
       disconnected(4),
       handOff(5),
       ...
}

ServiceChangeProfile ::= SEQUENCE
{
       profileName        IA5String(SIZE (1..67))
       
-- 64 characters for name, 1 for "/", 2 for version to match ABNF
}

PackagesDescriptor ::= SEQUENCE OF PackagesItem

PackagesItem ::= SEQUENCE
{
packageName              Name,
packageVersion       INTEGER(0..99),
...
}

StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter

StatisticsParameter ::= SEQUENCE
{
       statName               PkgdName,
       statValue               Value OPTIONAL
}

NonStandardData ::= SEQUENCE
{
       nonStandardIdentifier       NonStandardIdentifier,
       data                            OCTET STRING
}

NonStandardIdentifier              ::= CHOICE
{
       object                     OBJECT IDENTIFIER,
       h221NonStandard              H221NonStandard,
       experimental              IA5String(SIZE(8)), 
 -- first two characters should be "X-" or "X+"
       ...
}

H221NonStandard ::= SEQUENCE
{       t35CountryCode1              INTEGER(0..255),
t35CountryCode2              INTEGER(0..255),        -- country, as per T.35
       t35Extension              INTEGER(0..255),        -- assigned nationally
       manufacturerCode              INTEGER(0..65535), -- assigned nationally
       ...
}

TimeNotation ::= SEQUENCE
{
       date               IA5String(SIZE(8)),  -- yyyymmdd format
       time               IA5String(SIZE(8))  -- hhmmssss format
       -- per ISO 8601:1988
}

Value ::= SEQUENCE OF OCTET STRING

-- *******************************************************
-- MGC Command Error Codes (Registered IANA codes)
-- Extracted from H.248v2 annex L
-- test suite constants
 

tsc-errDesc400 ErrorDescriptor ::= {errorCode 400, errorText "Syntax error in message" }
tsc-errDesc401 ErrorDescriptor ::= {errorCode 401, errorText "Protocol Error" }
tsc-errDesc402 ErrorDescriptor ::= {errorCode 402, errorText "Unauthorized" }
tsc-errDesc403 ErrorDescriptor ::= {errorCode 403, errorText "Syntax Error in TransactionRequest" }
tsc-errDesc406 ErrorDescriptor ::= {errorCode 406, errorText "Version Not Supported" }
tsc-errDesc410 ErrorDescriptor ::= {errorCode 410, errorText "Incorrect identifier" }
tsc-errDesc411 ErrorDescriptor ::= {errorCode 411, errorText "The transaction refers to an unknown ContextId" }
tsc-errDesc412 ErrorDescriptor ::= {errorCode 412, errorText "No ContextIDs available" }
       
tsc-errDesc421 ErrorDescriptor ::= {errorCode 421, errorText "Unknown action or illegal combination of actions" }
tsc-errDesc422 ErrorDescriptor ::= {errorCode 422, errorText "Syntax Error in Action" }
tsc-errDesc430 ErrorDescriptor ::= {errorCode 430, errorText "Unknown TerminationID" }
tsc-errDesc431 ErrorDescriptor ::= {errorCode 431, errorText "No TerminationID matched a wildcard" }
tsc-errDesc432 ErrorDescriptor ::= {errorCode 432, errorText "Out of TerminationIDs or No TerminationID available" }
tsc-errDesc433 ErrorDescriptor ::= {errorCode 433, errorText "TerminationID is already in a Context" }
tsc-errDesc434 ErrorDescriptor ::= {errorCode 434, errorText "Max number of Terminations in a Context exceeded" }
tsc-errDesc435 ErrorDescriptor ::= {errorCode 435, errorText "Termination ID is not in specified Context" }
tsc-errDesc440 ErrorDescriptor ::= {errorCode 440, errorText "Unsupported or unknown Package" }
tsc-errDesc441 ErrorDescriptor ::= {errorCode 441, errorText "Missing Remote or Local Descriptor" }
tsc-errDesc442 ErrorDescriptor ::= {errorCode 442, errorText "Syntax Error in Command" }
tsc-errDesc443 ErrorDescriptor ::= {errorCode 443, errorText "Unsupported or Unknown Command" }
tsc-errDesc444 ErrorDescriptor ::= {errorCode 444, errorText "Unsupported or Unknown Descriptor" }
tsc-errDesc445 ErrorDescriptor ::= {errorCode 445, errorText "Unsupported or Unknown Property" }
tsc-errDesc446 ErrorDescriptor ::= {errorCode 446, errorText "Unsupported or Unknown Parameter" }
tsc-errDesc447 ErrorDescriptor ::= {errorCode 447, errorText "Descriptor not legal in this command" }
tsc-errDesc448 ErrorDescriptor ::= {errorCode 448, errorText "Descriptor appears twice in a command" }
tsc-errDesc450 ErrorDescriptor ::= {errorCode 450, errorText "No such property in this package" }
tsc-errDesc451 ErrorDescriptor ::= {errorCode 451, errorText "No such event in this package" }
tsc-errDesc452 ErrorDescriptor ::= {errorCode 452, errorText "No such signal in this package" }
tsc-errDesc453 ErrorDescriptor ::= {errorCode 453, errorText "No such statistic in this package" }
tsc-errDesc454 ErrorDescriptor ::= {errorCode 454, errorText "No such parameter value in this package" }
tsc-errDesc455 ErrorDescriptor ::= {errorCode 455, errorText "Property illegal in this Descriptor" }
tsc-errDesc456 ErrorDescriptor ::= {errorCode 456, errorText "Property appears twice in this Descriptor" }
tsc-errDesc457 ErrorDescriptor ::= {errorCode 457, errorText "Missing parameter in signal or event" }
tsc-errDesc471 ErrorDescriptor ::= {errorCode 471, errorText "Implied Add for Multiplex failure" }

tsc-errDesc500 ErrorDescriptor ::= {errorCode 500, errorText "Internal software failure in the MG" }
tsc-errDesc501 ErrorDescriptor ::= {errorCode 501, errorText "Not Implemented" }
tsc-errDesc502 ErrorDescriptor ::= {errorCode 502, errorText "Not ready" }
tsc-errDesc503 ErrorDescriptor ::= {errorCode 503, errorText "Service Unavailable" }
tsc-errDesc504 ErrorDescriptor ::= {errorCode 504, errorText "Command Received from unauthorized entity" }
tsc-errDesc505 ErrorDescriptor ::= {errorCode 505, errorText "Command Received before a ServiceChange Reply has been received" }
tsc-errDesc510 ErrorDescriptor ::= {errorCode 510, errorText "Insufficient resources" }
tsc-errDesc512 ErrorDescriptor ::= {errorCode 512, errorText "Media Gateway unequipped to detect requested Event" }
tsc-errDesc513 ErrorDescriptor ::= {errorCode 513, errorText "Media Gateway unequipped to generate requested Signals" }
tsc-errDesc514 ErrorDescriptor ::= {errorCode 514, errorText "Media Gateway cannot send the specified announcement" }
tsc-errDesc515 ErrorDescriptor ::= {errorCode 515, errorText "Unsupported Media Type" }
tsc-errDesc517 ErrorDescriptor ::= {errorCode 517, errorText "Unsupported or invalid mode" }
tsc-errDesc518 ErrorDescriptor ::= {errorCode 518, errorText "Event buffer full" }
tsc-errDesc519 ErrorDescriptor ::= {errorCode 519, errorText "Out of space to store digit map" }
tsc-errDesc520 ErrorDescriptor ::= {errorCode 520, errorText "Digit map undefined in the MG" }
tsc-errDesc521 ErrorDescriptor ::= {errorCode 521, errorText "Termination is ""ServiceChangeing""" }
tsc-errDesc526 ErrorDescriptor ::= {errorCode 526, errorText "Insufficient bandwidth" }
tsc-errDesc529 ErrorDescriptor ::= {errorCode 529, errorText "Internal hardware failure in MG" }
tsc-errDesc530 ErrorDescriptor ::= {errorCode 530, errorText "Temporary Network failure" }
tsc-errDesc531 ErrorDescriptor ::= {errorCode 531, errorText "Permanent Network failure" }
tsc-errDesc532 ErrorDescriptor ::= {errorCode 532, errorText "Audited Property, Statistic, Event or Signal does not exist" }
tsc-errDesc533 ErrorDescriptor ::= {errorCode 533, errorText "Response exceeds maximum transport PDU size" }
tsc-errDesc534 ErrorDescriptor ::= {errorCode 534, errorText "Illegal write of read only property" }
tsc-errDesc540 ErrorDescriptor ::= {errorCode 540, errorText "Unexpected initial hook state" }
tsc-errDesc581 ErrorDescriptor ::= {errorCode 581 ,errorText "Does Not Exist" }

-- *******************************************************
-- Extracted from H.248v1 Annex C
-- C.11 SDP equivalents
-- The SDP equivalents are subject to the SDP exceptions outlined in 7.1.8 for the text encoding of the
-- protocol. For example, the CHOOSE wildcard is allowed to be used in the MGC to MG direction
-- irrespective of the encoding (binary or text) of the protocol.
-- test suite constants

tsc-anxc-generic OCTET STRING ::= '0000'H
tsc-anxc-generic-media OCTET STRING ::= '00001001'H


tsc-SDP-V OCTET STRING ::= '0000B001'H --String Protocol Version
tsc-SDP-O OCTET STRING ::= '0000B002'H -- String Owner/creator and session ID
tsc-SDP-S OCTET STRING ::= '0000B003'H -- String Session name
tsc-SDP-I OCTET STRING ::= '0000B004'H -- String Session identifier
tsc-SDP-U OCTET STRING ::= '0000B005'H -- String URI of descriptor
-- SDC_E B006 String email address renamed to SDP_E here, seems to be a typo in the standard
tsc-SDP-E OCTET STRING ::= '0000B006'H -- String email address
tsc-SDP-P OCTET STRING ::= '0000B007'H -- String phone number
tsc-SDP-C OCTET STRING ::= '0000B008'H -- String Connection information
tsc-SDP-B OCTET STRING ::= '0000B009'H -- String Bandwidth Information
tsc-SDP-Z OCTET STRING ::= '0000B00A'H -- String Time zone adjustment
tsc-SDP-K OCTET STRING ::= '0000B00B'H -- String Encryption Key
tsc-SDP-A OCTET STRING ::= '0000B00C'H -- String Zero or more session attributes
tsc-SDP-T OCTET STRING ::= '0000B00D'H -- String Active Session Time
tsc-SDP-R OCTET STRING ::= '0000B00E'H -- String Zero or more repeat times
tsc-SDP-M OCTET STRING ::= '0000B00F'H -- String

-- *******************************************************
-- Extracted from H.248v1 Annex E, Basic packages
-- test suite constants
tsc-Package-generic OCTET STRING ::= '0001'H
tsc-Package-generic-cause OCTET STRING ::= '00010001'H
tsc-Package-generic-signalCompletion OCTET STRING ::= '00010002'H
tsc-Package-toot OCTET STRING ::= '0002'H
tsc-Package-root-maxNumberOfContexts OCTET STRING ::= '00020001'H
tsc-Package-root-maxTerminationsPerContext OCTET STRING ::= '00020002'H
tsc-Package-root-normalMGExecutionTime OCTET STRING ::= '00020003'H
tsc-Package-root-normalMGCExecutionTime OCTET STRING ::= '00020004'H
tsc-Package-root-MGProvisionalResponseTimerValue OCTET STRING ::= '00020005'H
tsc-Package-root-MGCProvisionalResponseTimerValue OCTET STRING ::= '00020006'H
tsc-Package-root-MGCOriginatedPendingLimit OCTET STRING ::= '00020007'H
tsc-Package-root-MGOriginatedPendingLimit OCTET STRING ::= '00020008'H
tsc-Package-tonegen OCTET STRING ::= '0003'H
tsc-Package-tonegen-playTone OCTET STRING ::= '00030001'H


END
