First code commit
diff --git a/GCP_31r1_CNL113364.tpd b/GCP_31r1_CNL113364.tpd
new file mode 100644
index 0000000..8e0aae9
--- /dev/null
+++ b/GCP_31r1_CNL113364.tpd
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+ <ProjectName>GCP_31r1_CNL113364</ProjectName>
+ <Folders>
+ <FolderResource projectRelativePath="src" relativeURI="src"/>
+ </Folders>
+ <Files>
+ <FileResource projectRelativePath="src/GCP_EncDec.cc" relativeURI="src/GCP_EncDec.cc"/>
+ <FileResource projectRelativePath="src/GCP_PDU_Defs.asn" relativeURI="src/GCP_PDU_Defs.asn"/>
+ <FileResource projectRelativePath="src/GCP_Types.ttcn" relativeURI="src/GCP_Types.ttcn"/>
+ </Files>
+ <ActiveConfiguration>Default</ActiveConfiguration>
+ <Configurations>
+ <Configuration name="Default">
+ <ProjectProperties>
+ <MakefileSettings>
+ <generateInternalMakefile>true</generateInternalMakefile>
+ <GNUMake>true</GNUMake>
+ <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+ <targetExecutable>bin/GCP_31r1_CNL113364</targetExecutable>
+ <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+ </MakefileSettings>
+ <LocalBuildSettings>
+ <workingDirectory>bin</workingDirectory>
+ </LocalBuildSettings>
+ </ProjectProperties>
+ </Configuration>
+ </Configurations>
+</TITAN_Project_File_Information>
\ No newline at end of file
diff --git a/demo/GCP_EncDec.cc b/demo/GCP_EncDec.cc
new file mode 100644
index 0000000..3708bcc
--- /dev/null
+++ b/demo/GCP_EncDec.cc
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 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
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: GCP_EncDec.cc
+// Rev: <RnXnn>
+// Updated: 2007-07-17
+// Prodnr: CNL 113 364
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+// Please note: Because the encoder/decoder functions are generated by the
+// TITAN, the GCP_EncDec.cc is kept only for compatibility issue and
+// should be removed from the projects.
diff --git a/demo/GCP_PDU_Defs.asn b/demo/GCP_PDU_Defs.asn
new file mode 100644
index 0000000..5112f82
--- /dev/null
+++ b/demo/GCP_PDU_Defs.asn
@@ -0,0 +1,1128 @@
+--/////////////////////////////////////////////////////////////////////////////
+-- Copyright (c) 2000-2018 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
diff --git a/demo/GCP_Types.ttcn b/demo/GCP_Types.ttcn
new file mode 100644
index 0000000..99fae06
--- /dev/null
+++ b/demo/GCP_Types.ttcn
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 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
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: GCP_Types.ttcn
+// Description: GCP Enc
+// Rev: <RnXnn>
+// Prodnr: CNL 113 364
+// Updated: 2012-11-21
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+module GCP_Types
+{
+
+import from GCP_PDU_Defs language "ASN.1:1994" all;
+
+external function enc_PDU_GCP(in MegacoMessage pdu) return octetstring
+ with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+external function dec_PDU_GCP(in octetstring stream) return MegacoMessage
+ with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+
+external function enc_IA5String(in SDP_IA5String pdu) return octetstring
+ with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+external function dec_IA5String(in octetstring stream) return SDP_IA5String
+ with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+
+} with {
+ extension "version <RnXnn>"
+}
+
diff --git a/doc/GCP_31r1_CNL113364_PRI.doc b/doc/GCP_31r1_CNL113364_PRI.doc
new file mode 100644
index 0000000..f0775fc
--- /dev/null
+++ b/doc/GCP_31r1_CNL113364_PRI.doc
Binary files differ
diff --git a/src/GCP_31r1_ProtocolModule.grp b/src/GCP_31r1_ProtocolModule.grp
new file mode 100644
index 0000000..cb06c7f
--- /dev/null
+++ b/src/GCP_31r1_ProtocolModule.grp
@@ -0,0 +1,25 @@
+<!--
+ Copyright (c) 2000-2018 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_31r1_ProtocolModule.grp
+// Description: GCP_31r1 Protocol Module group file
+// Rev: <RnXnn>
+// Prodnr: CNL 113 364
+// Updated: 2012-09-10
+// Contact: http://ttcn.ericsson.se
+//
+-->
+
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<File_Group name="GCP_31r1_ProtocolModule" >
+ <File path="GCP_EncDec.cc" />
+ <File path="GCP_PDU_Defs.asn" />
+ <File path="GCP_Types.ttcn" />
+</File_Group>
diff --git a/src/GCP_EncDec.cc b/src/GCP_EncDec.cc
new file mode 100644
index 0000000..3708bcc
--- /dev/null
+++ b/src/GCP_EncDec.cc
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 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
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: GCP_EncDec.cc
+// Rev: <RnXnn>
+// Updated: 2007-07-17
+// Prodnr: CNL 113 364
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+// Please note: Because the encoder/decoder functions are generated by the
+// TITAN, the GCP_EncDec.cc is kept only for compatibility issue and
+// should be removed from the projects.
diff --git a/src/GCP_PDU_Defs.asn b/src/GCP_PDU_Defs.asn
new file mode 100644
index 0000000..5112f82
--- /dev/null
+++ b/src/GCP_PDU_Defs.asn
@@ -0,0 +1,1128 @@
+--/////////////////////////////////////////////////////////////////////////////
+-- Copyright (c) 2000-2018 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
diff --git a/src/GCP_Types.ttcn b/src/GCP_Types.ttcn
new file mode 100644
index 0000000..99fae06
--- /dev/null
+++ b/src/GCP_Types.ttcn
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 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
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: GCP_Types.ttcn
+// Description: GCP Enc
+// Rev: <RnXnn>
+// Prodnr: CNL 113 364
+// Updated: 2012-11-21
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+module GCP_Types
+{
+
+import from GCP_PDU_Defs language "ASN.1:1994" all;
+
+external function enc_PDU_GCP(in MegacoMessage pdu) return octetstring
+ with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+external function dec_PDU_GCP(in octetstring stream) return MegacoMessage
+ with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+
+external function enc_IA5String(in SDP_IA5String pdu) return octetstring
+ with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+external function dec_IA5String(in octetstring stream) return SDP_IA5String
+ with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+
+} with {
+ extension "version <RnXnn>"
+}
+
diff --git a/test/GCP_31r1_CNL113364_test.tpd b/test/GCP_31r1_CNL113364_test.tpd
new file mode 100644
index 0000000..6b53018
--- /dev/null
+++ b/test/GCP_31r1_CNL113364_test.tpd
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+ <ProjectName>GCP_31r1_CNL113364_test</ProjectName>
+ <ReferencedProjects>
+ <ReferencedProject name="GCP_31r1_CNL113364" projectLocationURI="../GCP_31r1_CNL113364.tpd"/>
+ </ReferencedProjects>
+ <ActiveConfiguration>Default</ActiveConfiguration>
+ <Configurations>
+ <Configuration name="Default">
+ <ProjectProperties>
+ <MakefileSettings>
+ <generateInternalMakefile>true</generateInternalMakefile>
+ <GNUMake>true</GNUMake>
+ <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+ <targetExecutable>bin/GCP_31r1_CNL113364_test</targetExecutable>
+ </MakefileSettings>
+ <LocalBuildSettings>
+ <workingDirectory>bin</workingDirectory>
+ </LocalBuildSettings>
+ </ProjectProperties>
+ </Configuration>
+ </Configurations>
+</TITAN_Project_File_Information>
\ No newline at end of file
diff --git a/test/GCP_Test.prj b/test/GCP_Test.prj
new file mode 100644
index 0000000..da6ef64
--- /dev/null
+++ b/test/GCP_Test.prj
@@ -0,0 +1,28 @@
+<!DOCTYPE TITAN_GUI_project_file>
+<Project TITAN_version="1.8.pl2" >
+ <General>
+ <Project_Name>GCP_Test</Project_Name>
+ <Executable_Path>bin/GCP_Test</Executable_Path>
+ <Working_Dir>bin</Working_Dir>
+ <Build_Host>alpha</Build_Host>
+ <Execution_Mode>Parallel</Execution_Mode>
+ <Code_Splitting_Mode>None</Code_Splitting_Mode>
+ <Log_Format>yes</Log_Format>
+ <Update_Symlinks>yes</Update_Symlinks>
+ <Create_Absolute_Symlinks>no</Create_Absolute_Symlinks>
+ <Update_Makefile>yes</Update_Makefile>
+ <Localhost_Execute>yes</Localhost_Execute>
+ <Execute_Command>rsh %host "cd %project_working_dir ; "%executable" %localhost %mctr_port"</Execute_Command>
+ <Execute_Hosts>alfa, beta, gamma</Execute_Hosts>
+ <UnUsed_List></UnUsed_List>
+ </General>
+ <File_Group name="MainFileGroup" >
+ <File_Groups>
+ <File_Group name="GCP_PM" >
+ <File path="../src/GCP_EncDec.cc" />
+ <File path="../src/GCP_PDU_Defs.asn" />
+ <File path="../src/GCP_Types.ttcn" />
+ </File_Group>
+ </File_Groups>
+ </File_Group>
+</Project>