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 &quot;cd %project_working_dir ; &quot;%executable&quot; %localhost %mctr_port&quot;</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>